Android 解析推送通知和新 GCM 生成错误的设备令牌并且解析推送通知不起作用
Android parse push notification and new GCM generate wrong device token and parse push notification not working
简介:在解析安装中 table 当我使用新的 GCM API[=36= 时,设备令牌未正确添加].
现在将以下类型的设备令牌添加到 Parse 安装中 table。
设备令牌:|ID|1|:crGctxOB068:APA91bFgPRehabJcm9CYdS948iqX2_ppLj02CtbzmEHR0cfbuPooq5F--hqqvR9AH-Ez6MWMQON1Toc2DiNJTNdpRc3nmm3ukIpWJ1jHaXq0Iug6MoHbmKb9U0ak2CrKznkpKnPY5_Jp
详细说明:
我使用了新的 GCM api 来获取注册 ID。
我需要 regId 供内部使用。
我使用了 google 的 link 中的代码:Google cloud messaging android。
我注意到了一点。每当我开始应用程序解析时,都会正确获取 deviceToken。登录后,我在 mainActivity
的 onCreate 中使用以下代码更新 "user" 字段
ParseACL acl = new ParseACL();
acl.setPublicReadAccess(true);
acl.setPublicWriteAccess(true);
ParseInstallation installation = ParseInstallation.getCurrentInstallation();
installation.setACL(acl);
if (ParseUser.getCurrentUser() != null) {
installation.put("user", ParseUser.getCurrentUser());
}
installation.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.e("installation", "success");
Log.i("parse", "token after save : " + ParseInstallation.getCurrentInstallation().getString("deviceToken"));
ParsePush.subscribeInBackground("", new SaveCallback() {
@Override
public void done(ParseException e) {
if (e != null) {
Log.e("error: ", e.getLocalizedMessage());
e.printStackTrace();
} else {
Log.e("subscribed: ", "to broadcast channel");
Log.i("parse", "token after subscribe : " + ParseInstallation.getCurrentInstallation().getString("deviceToken"));
}
}
});
} else {
Log.e("installation", "failed");
e.printStackTrace();
}
}
});
通常当上面的代码 运行 deviceToken 更改为上面提到的令牌时,这似乎是错误的。所以我的推送通知不起作用。
我已经解决了问题。
我需要将 GCM 设备令牌传递给其他网络服务,因此我使用以下代码从 GCM 获取令牌。
InstanceID instanceID = InstanceID.getInstance(getApplicationContext());
String token = instanceID.getToken(CommonUtils.SENDER_ID,
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
从此代码中获取令牌后,解析的 deviceToken 发生了变化。
因此,我没有使用上面的代码,而是使用了下面的代码来获取 deviceToken,它解决了这个问题。
ParseInstallation.getCurrentInstallation().getString("deviceToken");
简介:在解析安装中 table 当我使用新的 GCM API[=36= 时,设备令牌未正确添加]. 现在将以下类型的设备令牌添加到 Parse 安装中 table。
设备令牌:|ID|1|:crGctxOB068:APA91bFgPRehabJcm9CYdS948iqX2_ppLj02CtbzmEHR0cfbuPooq5F--hqqvR9AH-Ez6MWMQON1Toc2DiNJTNdpRc3nmm3ukIpWJ1jHaXq0Iug6MoHbmKb9U0ak2CrKznkpKnPY5_Jp
详细说明:
我使用了新的 GCM api 来获取注册 ID。 我需要 regId 供内部使用。
我使用了 google 的 link 中的代码:Google cloud messaging android。
我注意到了一点。每当我开始应用程序解析时,都会正确获取 deviceToken。登录后,我在 mainActivity
的 onCreate 中使用以下代码更新 "user" 字段 ParseACL acl = new ParseACL();
acl.setPublicReadAccess(true);
acl.setPublicWriteAccess(true);
ParseInstallation installation = ParseInstallation.getCurrentInstallation();
installation.setACL(acl);
if (ParseUser.getCurrentUser() != null) {
installation.put("user", ParseUser.getCurrentUser());
}
installation.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.e("installation", "success");
Log.i("parse", "token after save : " + ParseInstallation.getCurrentInstallation().getString("deviceToken"));
ParsePush.subscribeInBackground("", new SaveCallback() {
@Override
public void done(ParseException e) {
if (e != null) {
Log.e("error: ", e.getLocalizedMessage());
e.printStackTrace();
} else {
Log.e("subscribed: ", "to broadcast channel");
Log.i("parse", "token after subscribe : " + ParseInstallation.getCurrentInstallation().getString("deviceToken"));
}
}
});
} else {
Log.e("installation", "failed");
e.printStackTrace();
}
}
});
通常当上面的代码 运行 deviceToken 更改为上面提到的令牌时,这似乎是错误的。所以我的推送通知不起作用。
我已经解决了问题。
我需要将 GCM 设备令牌传递给其他网络服务,因此我使用以下代码从 GCM 获取令牌。
InstanceID instanceID = InstanceID.getInstance(getApplicationContext());
String token = instanceID.getToken(CommonUtils.SENDER_ID,
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
从此代码中获取令牌后,解析的 deviceToken 发生了变化。 因此,我没有使用上面的代码,而是使用了下面的代码来获取 deviceToken,它解决了这个问题。
ParseInstallation.getCurrentInstallation().getString("deviceToken");