ParseUser.getCurrentUser() время от времени является нулевым, даже если выход из системы не вызывается

Проблема: После того, как пользователь успешно вошел в приложение, время от времени (не было определено определенного шаблона относительно того, когда это происходит), ParseUser.getCurrentUser() становится нулевым, даже если выход из системы не вызывается.

Детали: Мы используем Parse SDK на Android, чтобы позволить пользователю войти в систему. Вот как мы инициализируем Parse на Application onCreate:

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
      }
    )
});

Спасибо, Джайкишан

0 ответов

Другие вопросы по тегам