问题: 一旦用户成功登录到应用程序,偶尔(没有确定何时发生这种情况的明确模式),即使未调用 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
}
)
});
谢谢,杰基山