Я переношу приложение Android и iOS с Parse.com на Parse Server. Сначала я делаю эту миграцию с помощью тестового приложения, чтобы убедиться, что все в порядке. С iOS не было проблем, но с Android обновленное приложение вылетает каждый раз, когда пользователь входит в приложение.Android-переход от Parse к Parse Server сбой
Это Android код обновления:
public static void initParse(Application app) {
ctxt = app.getApplicationContext();
Parse.enableLocalDatastore(app);
// Old version
//Parse.initialize(app, "<my app id>", "<my client key>");
// New version
Parse.initialize(new Parse.Configuration.Builder(ctxt)
.applicationId("<my app id>")
.clientKey(null)
.server("https://<my new server>/parse/")
.build()
);
ParseUser.enableRevocableSessionInBackground();
}
Катастрофа возвращает «com.parse.ParseException: java.lang.IllegalStateException: невозможно закодировать ассоциацию с несохраненным ParseObject», и принимая во внимание что я читал в Stackoverflow, это потому, что ParseUser.getCurrentUser() возвращает значение null (несмотря на то, что пользователь вошел в систему), и методы анализа не работают.
Фактически, если я принимаю тот же код, раскомментирую старую версию Parse.initialize, прокомментирую новую версию Parse.initialize, скомпилируем и запустим приложение, оно запускается без проблем и пользователь может использовать его правильно ,
Но, если я прокомментирую старую версию Parse.initialize, раскомментируйте новую версию Parse.initialize, скомпилируйте и запустите приложение, это немедленно сработает, потому что ParseUser.getCurrentUser() возвращает значение null, а методы анализа не работают.
Что мне здесь не хватает? Должен ли я заставлять моих пользователей снова входить в систему? Это кажется мне плохим UX, и в любом случае, в iOS у меня нет проблем с новой версией, в чем разница между обеими платформами?
EDIT 1:
Следуя совету Роберт Раунтри Я изменил инициализацию к этому:
public static void initParse(Application app) {
ctxt = app.getApplicationContext();
Parse.enableLocalDatastore(app);
// Old version
//Parse.initialize(app, "<my app id>", "<my client key>");
// New version
Parse.initialize(new Parse.Configuration.Builder(ctxt)
.applicationId("<my app id>")
.clientKey("<my client key>")
.server("https://<my new server>/parse/")
.build()
);
//Parse.setLogLevel(Parse.LOG_LEVEL_DEBUG);
Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE);
ParseUser.enableRevocableSessionInBackground();
}
Кроме того, я проверил, что мой Анализировать версия последний доступный, у меня есть это в моем Gradle файле:
compile 'com.parse.bolts:bolts-android:1.+'
compile 'com.parse:parse-android:1.+'
И результат тот же, что приложение падает с «com.parse.ParseException: Java .lang.IllegalStateException: невозможно закодировать связь с несохраненным ParseObject «первым вызовом, который я делаю для Parse. Кроме того, уникальный журнал, который я могу видеть, связанный с синтаксическим разбором, связан с маркером GCM, и больше ничего.
EDIT 2:
Я попробовал другую вещь, удалить приложение со старой инициализации и установить его с помощью новой инициализации и, как я догадался, что новая версия теперь работает.
Но, конечно, это не решение для меня, я не могу сказать своим пользователям, чтобы удалить приложение и установить его снова.
Но это подсказка: нет никаких проблем с новой инициализацией, но с тем, как старый «пар» «реагирует» при открытии приложения с новым Parse Server, должно быть какое-либо несогласованность в getCurrentUser или что-то в этом роде.
Проверка ParseSDK является актуальной. попробуйте с clientKey обратно в (нулевым) ... также «Parse.setLogLevel (Parse.LOG_LEVEL_DEBUG);» для дополнительной информации –
Спасибо, Роберт! Я внес изменения, но результаты остались прежними. – Wonton