我正在尝试在我的应用程序中实现登录状态监视。我想要实现的是在后台服务中连续调用API。它将根据用户是否有资格保持登录状态给出响应。如果响应指示用户不具有保持登录状态的条件,则应用程序应注销。
我如何实现此目标
我创建了一个前台服务,并在AsyncTask
方法内调用了API。我在服务的onStartCommand()
方法中调用了此方法。
我的疑问
Intent dialogIntent = new Intent(BluetoothLeService.this,SplashScreen.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(dialogIntent);
如何通过服务完成活动?
编辑-为什么我要尝试这种方式
如果从后端手动删除用户的激活,则根据此工作流程应用程序将自动注销。基本上我的应用程序是基于BLE的警报系统,因此无法在一定时间后注销。唯一的注销情况是如果后端(即服务提供商)发现用户不符合使用该服务的条件,则他们会将提到的API结果更改为false。由于这种情况,我一直都在调用该API。有什么更好的解决方法为此吗?
答案 0 :(得分:1)
您可以比想象中容易得多地完成任务。对于我来说,我使用令牌进行授权和进一步使用服务。我认为服务中的调用API将使您的应用运行缓慢。
因此,我在我的应用程序开发中使用了改造,我认为在您的项目中,您使用了此库或截击。那代币呢?成功登录后,我收到两个令牌:access_token
+ refresh_token
。第一个令牌用于获取普通信息。而refresh_token用于更新access_token。如果您的refresh_token将过期,则必须从应用程序注销。而且不要试图在后台发送API
请求,这是个坏主意。
使用令牌的主要模式:登录->获取两个令牌(访问+刷新)->在普通请求中使用access_token(从API获取数据或发送smth)->使用refresh_token
因此,例如在我的服务器上,两次刷新之间的间隔时间为0.5小时。在您的access_token过期之前,Refresh_token
才有效。
例如article关于此令牌的信息。
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-继续使用应用程序。祝你好运:)
答案 1 :(得分:0)
您应该在Clint一侧进行登录监视,而不是调用和api,这将是一个更好的选择。
您可以使用固定时间的倒数计时器进行时间管理。
只要发生任何事件,您都可以重新启动计时器。
根据不活动时间(计时器结束时),您可以将用户重新发送到登录活动。
使用常规api调用处理服务不是正确的选择。
但是,如果您需要常规的api调用,并且如果这是最后的选择,那么与服务相比,计时器将是更好的选择
希望这对您有帮助!