Android Parse.com推送通知接收不一致”;GCM-发送方ID不匹配“;错误
来自parse.com的推送通知无法持续工作。随机推送通知将失败,导致GCM与发件人ID不匹配“错误。我的理解是,在编程上,我们不必对GCM做任何事情,因为parse.com将objectId发送给GCM。在这两种情况下,我都无法找出这个错误有时会发生,有时不会发生的具体原因。此外,我正在使用解析版本1.10.2 我的应用程序类有以下内容Android Parse.com推送通知接收不一致”;GCM-发送方ID不匹配“;错误,android,parse-platform,push-notification,Android,Parse Platform,Push Notification,来自parse.com的推送通知无法持续工作。随机推送通知将失败,导致GCM与发件人ID不匹配“错误。我的理解是,在编程上,我们不必对GCM做任何事情,因为parse.com将objectId发送给GCM。在这两种情况下,我都无法找出这个错误有时会发生,有时不会发生的具体原因。此外,我正在使用解析版本1.10.2 我的应用程序类有以下内容 Parse.initialize(this, APPLICATION_ID_DEBUG, CLIENT_KEY_DEBUG); Par
Parse.initialize(this, APPLICATION_ID_DEBUG, CLIENT_KEY_DEBUG);
Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE);
ParsePush.subscribeInBackground(Constants.CHANNEL, new SaveCallback() {
@Override
public void done(ParseException e) {
if (Utils.checkIfNull(e)) {
// subscribed to channel
} else {
// failed to subscribe to channel
}
}
});
用户登录到我的应用程序后,我会为他们附加一个频道。我保存的通道数据只是我从服务器获取的用户的唯一id
List<String> arryChannel = new ArrayList<>();
arryChannel.add(uniqueUserId);
final ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();
parseInstallation.put(Constants.CHANNEL, arryChannel);
parseInstallation.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (Utils.checkIfNull(e)) {
// update channel with user's unique id
} else {
// failed to update channel with user unique id
}
}
});
List arryChannel=new ArrayList();
arryChannel.add(uniqueUserId);
final ParseInstallation ParseInstallation=ParseInstallation.getCurrentInstallation();
parseInstallation.put(Constants.CHANNEL、arryChannel);
parseInstallation.saveInBackground(新的SaveCallback(){
@凌驾
公共作废完成(Parsee异常){
if(Utils.checkIfNull(e)){
//使用用户的唯一id更新频道
}否则{
//无法使用用户唯一id更新频道
}
}
});
最后,当用户注销时,我会从他们的频道取消订阅。我添加了unsubscribe以尝试阻止任何一台设备接收多个推送通知,因为它们已作为多个用户登录到应用程序并订阅了多个频道。以下是您注销时我的代码的外观
ParsePush.unsubscribeInBackground(Constants.CHANNEL, new SaveCallback() {
@Override
public void done(ParseException e) {
if (Utils.checkIfNull(e)) {
// successfully unsubscribed to channel
// save the updated (unsubscribed) parse installation
final ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();
parseInstallation.put(Constants.CHANNEL, new ArrayList<String>());
parseInstallation.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (Utils.checkIfNull(e)) {
// add whatever logs here to check for any issues with unsubscribing
} else {
// failed to update channel
}
}
});
} else {
Logger.e("PARSE", "failed to unsubscribed to channel: " + e.getMessage());
}
}
});
ParsePush.unsubscribeInBackground(Constants.CHANNEL,new SaveCallback()){
@凌驾
公共作废完成(Parsee异常){
if(Utils.checkIfNull(e)){
//已成功取消订阅频道
//保存更新(取消订阅)的解析安装
final ParseInstallation ParseInstallation=ParseInstallation.getCurrentInstallation();
parseInstallation.put(Constants.CHANNEL,new ArrayList());
parseInstallation.saveInBackground(新的SaveCallback(){
@凌驾
公共作废完成(Parsee异常){
if(Utils.checkIfNull(e)){
//在此处添加任何日志以检查取消订阅的任何问题
}否则{
//无法更新频道
}
}
});
}否则{
Logger.e(“解析”,“取消订阅频道失败:”+e.getMessage());
}
}
});
此实现的结果是,当推送通知不起作用时,它将继续失败约50-100次。然后它将开始工作大约150-200次。然后它又回到不工作的状态。这不是一个工作,不是来回的工作类型。它更多的是失败,失败,失败多次,然后是成功,成功,成功多次。对于我在实施过程中所缺少的任何帮助,我们都表示感谢。提前谢谢。我终于找到了这个问题的答案!这个问题与我的执行无关。对于遇到相同冲突的任何其他人,请查找也使用推送通知的任何其他第三方服务。对我来说,Mixpanel是罪魁祸首。当我从代码库中删除mixpanel.initPushHandling()时,所有这些都开始工作。这是有意义的,因为在初始化mixpanel的推送通知时,会传入一个用于GCMSenderID的值。解析推送通知的工作方式不同。使用parse.com,您不必发送GCMSenderID,因为parse将自动发送objectId以执行推送通知。在这两者之间,这会导致GCM-MISHATCH-SENDER错误
因此,解决方案是,删除任何可能与parse.com冲突的服务。请随意使用我的实现,这很好。干杯 看看这个。我想这是正确的答案
我面对这个问题,经过仔细研究,终于找到了解决办法。正如Parse在文章中所说,如果除了Parse之外您还使用其他推送提供商,那么您应该提供应用程序用于推送消息的每个发件人ID。请看以下内容: Parse Android SDK选择合理的默认配置,这样您就不必担心GCM注册ID、发送者ID或API密钥。特别是,SDK将在启动时使用Parse的发件人ID(1076345567071)自动注册应用程序以进行推送,并将生成的注册ID存储在应用程序当前Parse安装的deviceToken字段中 但是,作为希望从多个推送提供商发送推送的开发人员的高级功能,Parse允许您选择使用其他GCM发送者ID注册推送应用程序。要执行此操作,请在应用程序的AndroidManifest.xml中指定附加的GCM发送者ID,该ID带有以下
标记,作为
元素的子元素:
<meta-data android:name="com.parse.push.gcm_sender_id"
android:value="id:YOUR_SENDER_ID" />;
;
在上面的示例代码段中,您的\u SENDER\u ID应替换为数字GCM SENDER ID。请注意,Parse SDK希望您使用ID:前缀作为发件人ID的前缀,如示例代码段中所示
如果你想用多个附加的发送者ID注册你的应用程序,那么android:value
<meta-data android:name="com.parse.push.gcm_sender_id"
android:value="id:YOUR_SENDER_ID_1,YOUR_SENDER_ID_2,YOUR_SENDER_ID_3" />;