2

问题: 一旦用户成功登录到应用程序,偶尔(没有确定何时发生这种情况的明确模式),即使未调用 logout,ParseUser.getCurrentUser() 也会变为 null。

详细信息: 我们在 Android 上使用 Parse SDK 让用户登录。这是我们在 Application onCreate 上初始化 Parse 的方式:

Parse.Configuration.Builder parseConfiguration = new Parse.Configuration.Builder(this)
                .applicationId(getString(R.string.parse_app_id))
                .clientKey(getString(R.string.parse_client_key))
                .server(getString(R.string.parse_server_url))
                .enableLocalDataStore();

Parse.initialize(parseConfiguration.build());

在相同的方法中,我们还为用户获取最新信息:

if (ParseUser.getCurrentUser() != null) {
    ParseUser.getCurrentUser().fetchInBackground();
}

然后在我们的主要活动中,如果 currentUser 为空,我们将显示登录屏幕,如下所示:

if ( ParseUser.getCurrentUser() == null) {
    Intent intent = new Intent(this, LoginActivity.class);
    startActivityForResult(intent, LOGIN_REQUEST);
}

在 LoginActivity 中,我们直接获取 Facebook 和 Google 身份验证令牌(不使用 Parse SDK)。一旦我们获得了 facebook/google 访问令牌,我们就调用

Task<ParseUser> parseUserTask = ParseUser.logInWithInBackground("facebook", authData);

成功完成此任务后,我们让用户登录并使用该应用程序。整个流程效果很好。

但是,偶尔(随机)会向用户显示登录屏幕。在我们的应用程序中,我们不会在任何地方调用注销或调用登录屏幕工作流程。有人可以建议这可能是什么原因吗?

如果有任何帮助,我们将在 AWS 上托管我们的服务器并按如下方式对其进行初始化:

var api = new ParseServer({
  databaseURI: databaseUri
  cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
  appId: process.env.APP_ID,
  masterKey: process.env.MASTER_KEY,
  serverURL: process.env.SERVER_URL,
  push: {
      android: {
          senderId: process.env.GOOGLE_GCM_SENDER_ID,
          apiKey: process.env.GOOGLE_GCM_API_KEY
      }
  },
  filesAdapter: new S3Adapter(
      process.env.S3_AWS_ACCESS_KEY_ID,
      process.env.S3_AWS_SECRET_ACCESS_KEY,
      process.env.S3_BUCKET_NAME,
      {
          directAccess: true, 
          bucketPrefix: process.env.S3_BUCKET_NAME
      }
    )
});

谢谢,杰基山

4

0 回答 0