Parse.com推送通知不能始终如一地接收"GCM -MISMATCH SENDER ID"错误

por*_*der 5 android push-notification parse-platform

来自parse.com的推送通知并不一致.随机推送通知将失败,导致GCM - MISMATCH SENDER ID"错误.我的理解是,通过编程,我们不必对GCM执行任何操作,因为parse.com将objectId发送到GCM.在任何一种情况下,我都没有能够找出有时出现此错误的任何具体原因,有时则不会.此外,我使用的是Parse版本,1.10.2.

我的Application类具有以下内容

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
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

用户登录我的应用程序后,我将一个频道附加到他们.我保存的频道数据只是我从服务器获取的用户唯一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
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

最后,当用户退出时,我取消订阅他们的频道.我添加了取消订阅以尝试阻止任何一个设备接收多个推送通知,因为他们已经以多个用户身份登录到应用程序并订阅了多个渠道.以下是我注销时代码的外观.

                    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());
                            }
                        }
                    });
Run Code Online (Sandbox Code Playgroud)

此实现的结果是,当推送通知不起作用时,它将继续失败大约50-100次.然后它将开始工作约150-200次.然后它又回到了不工作状态.它来回不是工作,不是工作类型.它更多的是失败,失败,失败多次,然后成功,成功,多次成功.对我在实施中缺少的任何帮助表示赞赏.提前致谢.

por*_*der 2

我终于找到这个问题的答案了!该问题与我的实施无关。对于遇到相同冲突的其他人,请查找也使用推送通知的任何其他第三方服务。对我来说,Mixpanel 是罪魁祸首。当我mixpanel.initPushHandling()从代码库中删除时,一切都开始工作。这是有道理的,因为当您初始化 mixpanel 的推送通知时,您会传入一个用于 GCMSenderID 的值。解析推送通知的工作方式有所不同。使用 parse.com,您不必发送 GCMSenderID,因为 parse 会自动发送 objectId 来执行推送通知。在两者之间,这会导致 GCM-MISMATCH-SENDER 错误。

因此,解决方案是删除任何可能与 parse.com 冲突的服务。请随意使用我的实现,它很好。干杯!