ParseInstallation.getCurrentInstallation (). GetObjectId () возвращает значение NULL в смартфоне конкретного пользователя - PullRequest
0 голосов
/ 11 июля 2019

У меня есть Android-приложение, использующее сервер Parse для бэкэнда.Ряд пользователей в настоящее время используют мое приложение для Android.Однако некоторые пользователи сталкивались с проблемой при установке приложения, состоящей в том, что объект не создается в таблице установки даже после входа в систему.

Когда я взглянул на проблему из своего приложения для Android с помощью некоторого кода Google Analytics,Я обнаружил, что ParseInstallation.getCurrentInstallation().getObjectId() возвращает ноль для пользователя, даже если процесс инициализации Parse завершен правильно.С помощью кода Google Analytics я проверял метод каждые 10 секунд в течение 10 минут после инициализации Parse, но этот метод всегда возвращал нулевое значение для конкретного пользователя.

// Parse initialization in the onCreate() of Application class
Parse.enableLocalDatastore(this);
Parse.initialize(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_api))
        .build());
ParseUser.enableAutomaticUser();
ParseACL.setDefaultACL(new ParseACL(), true);

// After Log-In, Save the installation.
// (My app user normally would come here 20 ~ 30 seconds or long after the above Parse initialization.) 
ParseInstallation installation = ParseInstallation.getCurrentInstallation();
if (!TextUtils.isEmpty(installation.getObjectId()) { // installation.getObjectId() returns null for the particular user.
    installation.put("GCMSenderId", getString(R.string.fcm_sender_id));
    installation.saveInBackground(
        // will associate the Installation with the User in new SaveCallback()
    );
}

// build.gradle(Module: app)
implementation 'com.github.parse-community.Parse-SDK-Android:parse:1.18.5' 
implementation 'com.github.parse-community.Parse-SDK-Android:fcm:1.18.5'

Большинство пользователей получают действительный ObjectId и работают без проблем правильно,Однако, как только пользователь сталкивается с проблемой, объект больше не создается в таблице установки для пользователя, даже если пользователь снова устанавливает приложение.

Я не знаю, является ли это фундаментальной проблемой сРазбор сервера.

Любой совет будет мне полезен.

Ответы [ 2 ]

1 голос
/ 26 июля 2019

Вот результаты использования подсказки Дави Македо:

После installation.save() иногда installation.get("deviceToken") возвращает ноль. Поэтому я использовал итерационную процедуру, чтобы дождаться, пока installation.get("deviceToken") вернет правильное значение. И тогда я позвонил installation.saveInBackground(). В течение 10 дней я наблюдал за результатами пользователей своего приложения, и, похоже, он пока работает хорошо.

Если вы используете Parse Client на устройстве с батарейным питанием, таком как телефон Android, вы столкнетесь с подобной проблемой, как я. Наиболее важным моментом является то, что installation.get("deviceToken") чаще возвращает ноль, когда телефон находится в режиме энергосбережения. Поэтому, прежде чем звонить на номера installation.save() и installation.saveInBackground(), необходимо убедиться, что телефон не находится в режиме энергосбережения и подключен к Интернету.

Кстати, с помощью Дэви я решил проблему. Спасибо Дави.

Если возникнут какие-либо дополнительные проблемы, я поделюсь с вами.

1 голос
/ 12 июля 2019

Я думаю, что objectId является нулевым, потому что установка по какой-то причине не сохраняется. Я бы порекомендовал вам перейти со следующим кодом и проверить еще раз:

// Parse initialization in the onCreate() of Application class
Parse.enableLocalDatastore(this);
Parse.initialize(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_api))
        .build());
ParseUser.enableAutomaticUser();
ParseACL.setDefaultACL(new ParseACL(), true);

// After Log-In, Save the installation.
// (My app user normally would come here 20 ~ 30 seconds or long after the above Parse initialization.) 
ParseInstallation installation = ParseInstallation.getCurrentInstallation();
if (TextUtils.isEmpty(installation.getObjectId())) { // installation.getObjectId() returns null for the particular user.
    installation.save();
}
installation.put("GCMSenderId", getString(R.string.fcm_sender_id));
installation.saveInBackground(
    // will associate the Installation with the User in new SaveCallback()
);

// build.gradle(Module: app)
implementation 'com.github.parse-community.Parse-SDK-Android:parse:1.18.5' 
implementation 'com.github.parse-community.Parse-SDK-Android:fcm:1.18.5'
...