ParseInstallation.getCurrentInstallation().getObjectId() returns 在特定用户的智能手机中为空
ParseInstallation.getCurrentInstallation().getObjectId() returns null in the particular user's smartphone
我的 Android 应用程序使用 Parse 服务器作为后端服务。
许多用户目前正在使用我的 Android 应用程序。
但是,某些特定用户在安装应用程序时遇到问题,即即使在登录后也没有在安装中创建对象table。
当我使用一些 Analytics 代码查看 Android 应用程序的问题时,我发现即使 Parse 初始化过程已完成,用户的 ParseInstallation.getCurrentInstallation().getObjectId()
returns null适当地。
使用 Analytics 代码,在 Parse 初始化后的 10 分钟内,我每 10 秒检查一次该方法,但该方法总是为特定用户返回 null。
// 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 并正常工作,没有任何问题。
但是,一旦用户遇到问题,即使用户再次安装该应用程序,也不再为用户在安装 table 中创建该对象。
我不知道这是否是 Parse 服务器的根本问题。
任何建议都会对我有所帮助。
我认为objectId为null是因为某些原因没有保存安装。我建议您使用以下代码并再次检查:
// 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'
以下是使用 Davi Macêdo 提示的结果:
在 installation.save()
之后,有时 installation.get("deviceToken")
return 无效。
所以我使用了一个迭代例程来等待 installation.get("deviceToken")
到 return 一个有效值。然后我打电话给 installation.saveInBackground()
。
在这 10 天里,我一直在观察我的应用程序用户的结果,到目前为止它似乎运行良好。
如果您在 Android phone 等电池供电设备上使用 Parse Client,您将面临与我类似的问题。
最重要的一点是,当phone处于省电模式时,installation.get("deviceToken")
returns null的频率更高。
因此,在调用 installation.save()
和 installation.saveInBackground()
之前,您需要确保 phone 未处于省电模式并且网络连接良好。
顺便说一句,在大维的帮助下,我解决了这个问题。感谢 Davi。
如果还有什么问题,我再跟大家分享。
我的 Android 应用程序使用 Parse 服务器作为后端服务。 许多用户目前正在使用我的 Android 应用程序。 但是,某些特定用户在安装应用程序时遇到问题,即即使在登录后也没有在安装中创建对象table。
当我使用一些 Analytics 代码查看 Android 应用程序的问题时,我发现即使 Parse 初始化过程已完成,用户的 ParseInstallation.getCurrentInstallation().getObjectId()
returns null适当地。
使用 Analytics 代码,在 Parse 初始化后的 10 分钟内,我每 10 秒检查一次该方法,但该方法总是为特定用户返回 null。
// 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 并正常工作,没有任何问题。 但是,一旦用户遇到问题,即使用户再次安装该应用程序,也不再为用户在安装 table 中创建该对象。
我不知道这是否是 Parse 服务器的根本问题。
任何建议都会对我有所帮助。
我认为objectId为null是因为某些原因没有保存安装。我建议您使用以下代码并再次检查:
// 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'
以下是使用 Davi Macêdo 提示的结果:
在 installation.save()
之后,有时 installation.get("deviceToken")
return 无效。
所以我使用了一个迭代例程来等待 installation.get("deviceToken")
到 return 一个有效值。然后我打电话给 installation.saveInBackground()
。
在这 10 天里,我一直在观察我的应用程序用户的结果,到目前为止它似乎运行良好。
如果您在 Android phone 等电池供电设备上使用 Parse Client,您将面临与我类似的问题。
最重要的一点是,当phone处于省电模式时,installation.get("deviceToken")
returns null的频率更高。
因此,在调用 installation.save()
和 installation.saveInBackground()
之前,您需要确保 phone 未处于省电模式并且网络连接良好。
顺便说一句,在大维的帮助下,我解决了这个问题。感谢 Davi。
如果还有什么问题,我再跟大家分享。