使用前台服务的Android登录监控
我正在尝试在我的应用程序中实现登录状态监视。我试图实现的是在后台服务中连续调用API。它将根据用户是否有资格继续登录给出响应。如果响应表明用户没有资格继续登录,则应用程序应注销 我是如何实现这一点的 我创建了一个前台服务,并在使用前台服务的Android登录监控,android,Android,我正在尝试在我的应用程序中实现登录状态监视。我试图实现的是在后台服务中连续调用API。它将根据用户是否有资格继续登录给出响应。如果响应表明用户没有资格继续登录,则应用程序应注销 我是如何实现这一点的 我创建了一个前台服务,并在AsyncTask方法中调用了API。我在服务的onStartCommand()方法中调用了这个方法 我的怀疑 这是执行此工作流程的正确方法吗 我从服务中调用了登录活动,如下所示 如何从服务中完成活动 编辑-我为什么要这样做 如果从后端手动删除用户的激活,则根据此工作流程,
AsyncTask
方法中调用了API。我在服务的onStartCommand()方法中调用了这个方法
我的怀疑
这是执行此工作流程的正确方法吗
我从服务中调用了登录活动,如下所示
如何从服务中完成活动
编辑-我为什么要这样做
如果从后端手动删除用户的激活,则根据此工作流程,应用程序将自动注销。基本上,我的应用程序是基于BLE的警报系统。因此,在特定时间后注销是不可能的。注销的唯一情况是,后端(即服务提供商)发现用户没有资格使用该服务,他们会将所提到的API结果更改为false。由于这种情况,我一直在调用API。有什么更好的解决方法吗?您可以比您想象的更轻松地完成任务。至于我,我使用代币进行授权和进一步的服务使用。我认为服务中的调用API将使您的应用程序运行缓慢
所以,我在我的应用程序开发中使用改型,我认为在你的项目中,你可以使用这个库或截取。那么代币呢?成功登录后,我收到两个令牌:access\u-token
+refresh\u-token
。第一个令牌用于获取普通信息。刷新令牌用于更新访问令牌。如果您的刷新令牌将过期,您必须从应用程序注销。不要试图在后台发送API
请求,这是个坏主意
使用令牌的主要模式:登录->获取两个令牌(访问+刷新)->在普通请求中使用访问令牌(从API获取数据或发送smth)->使用刷新令牌刷新令牌
因此,例如,在我的服务器上,我在令牌刷新之间使用0,5小时<代码>刷新\u令牌
在您的访问\u令牌过期之前无效
例如,关于此令牌
处理okhttp中的错误:
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
Request request = new Request.Builder()
.url("url_url_url")
.build();
client.newCall(request).enqueue(new Callback() {
@Override public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}
});
}
使现代化
所以,解决方案的最后一个变体是:创建包含api调用方法的类。您将在每次请求之前调用此方法。此方法将返回true/false。如果为false-您将从应用程序注销,如果为true-继续使用应用程序。祝您好运:)您应该在Clint端进行登录监视,而不是调用和api,这将是一个更好的选择
您可以使用固定时间的倒计时计时器进行时间管理
无论何时发生事件,都可以重新启动计时器
根据非活动时间(计时器完成时),您可以再次将用户发送到登录活动
使用常规api调用处理服务不是正确的选择
但如果您需要一个常规的api调用,并且它是最终选项,那么与服务相比,计时器将是一个更好的选项
希望这对你有帮助 “这是实现这个工作流程的正确方法吗?”--不是。“一直在后台服务中调用API”从电池和带宽的角度来看对用户来说是可怕的。请在应用程序位于前台时进行检查,此时您不再需要服务。如果从后端手动删除用户的激活,而应用程序处于脱机状态,会发生什么情况?您好,问题在于此场景是客户想要的,因为。其目的是如果从后端手动删除用户的激活,然后应用程序将注销。那么你知道令牌使用情况了吗?当用户激活被删除时,您可以在从服务器获得适当消息后自动注销。您正在使用哪个库?我正在使用OKHTT,您可以从服务器接收一些消息?是的,兄弟。当用户第一次登录时,将获得唯一id。我存储这个ID。然后这个唯一的ID将发送到上面提到的API。当用户激活处于活动或非活动状态时,它将给出响应。因此,我将API调用置于服务中。当用户激活的响应处于非活动状态时,应用程序将注销以获得响应。我的客户要求我根据常规API调用进行此操作。如果这有助于您对答案进行评分
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
Request request = new Request.Builder()
.url("url_url_url")
.build();
client.newCall(request).enqueue(new Callback() {
@Override public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}
});
}