Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用前台服务的Android登录监控_Android - Fatal编程技术网

使用前台服务的Android登录监控

使用前台服务的Android登录监控,android,Android,我正在尝试在我的应用程序中实现登录状态监视。我试图实现的是在后台服务中连续调用API。它将根据用户是否有资格继续登录给出响应。如果响应表明用户没有资格继续登录,则应用程序应注销 我是如何实现这一点的 我创建了一个前台服务,并在AsyncTask方法中调用了API。我在服务的onStartCommand()方法中调用了这个方法 我的怀疑 这是执行此工作流程的正确方法吗 我从服务中调用了登录活动,如下所示 如何从服务中完成活动 编辑-我为什么要这样做 如果从后端手动删除用户的激活,则根据此工作流程,

我正在尝试在我的应用程序中实现登录状态监视。我试图实现的是在后台服务中连续调用API。它将根据用户是否有资格继续登录给出响应。如果响应表明用户没有资格继续登录,则应用程序应注销

我是如何实现这一点的

我创建了一个前台服务,并在
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());
            }
          });
        }