使用Foreground服务监控Android登录

时间:2019-05-28 11:54:56

标签: android

我正在尝试在我的应用程序中实现登录状态监视。我想要实现的是在后台服务中连续调用API。它将根据用户是否有资格保持登录状态给出响应。如果响应指示用户不具有保持登录状态的条件,则应用程序应注销。

我如何实现此目标

我创建了一个前台服务,并在AsyncTask方法内调用了API。我在服务的onStartCommand()方法中调用了此方法。

我的疑问

  1. 这是实施此工作流程的正确方法吗?
  2. 我通过这样的服务调用了登录活动
    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。有什么更好的解决方法为此吗?

2 个答案:

答案 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调用,并且如果这是最后的选择,那么与服务相比,计时器将是更好的选择

希望这对您有帮助!