Phonegap:GCM推送通知注册呼叫返回OK,但设备甚至没有连接到互联网

时间:2015-02-26 17:27:38

标签: android cordova phonegap-plugins phonegap-pushplugin

我已关注this tutorial,我有以下代码:

onDeviceReady我执行:

var pushNotification = window.plugins.pushNotification;
pushNotification.register(app.successHandler, app.errorHandler,{"senderID":"824841663931","ecb":"app.onNotificationGCM"});

处理程序:

// result contains any message sent from the plugin call
successHandler: function(result) {
    alert('Callback Success! Result = '+result)
},

errorHandler:function(error) {
    alert(error);
},

onNotificationGCM: function(e) {
        switch( e.event )
        {
            case 'registered':
                if ( e.regid.length > 0 )
                {
                    console.log("Regid " + e.regid);
                    alert('registration id = '+e.regid);
                    localStorage.regid = e.regid
                }
            break;

            case 'message':
              // this is the actual push notification. its format depends on the data model from the push server
              alert('message = '+e.message+' msgcnt = '+e.msgcnt);
            break;

            case 'error':
              alert('GCM error = '+e.msg);
            break;

            default:
              alert('An unknown GCM event has occurred');
              break;
        }
    }

如果我的设备在我第一次打开应用程序时连接到互联网,则此代码可以正常工作。

如果我的设备未连接,则使用" OK"来调用successHandler。并且永远不会调用onNotificationGCM。这是正常的吗?

我原本期望注册失败并使用e.event =' error'来调用errorHandler或onNotificationGCM。所以我可以推迟注册,但这不会发生。

感谢您的帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

  1. <强>注册

    致电pushNotification.register()时:

      如果在解析successHandlerecb时没有错误,则会调用
    • senderID。您的senderID和申请已在GCMRegistrar注册。
    • 只有在解析errorHandlerecb 时出现JSON错误时才会调用
    • senderID

    一旦您的设置正确,您的errorHandler可能永远不会被调用。

    docs开始,每次启动应用程序时都必须调用register方法。这不会创建重复的注册。该插件将管理所有这些。

  2. <强> onNotificationGCM

    仅在以下情况下调用:

    • 您会收到GCM的通知。
    • 您的申请已成功注册GCMRegistrar
  3. <强> GCMRegistrar

    • 如果已注册,则返回注册ID(适用于您的应用程序和senderID)。
    • 如果没有,它会注册您的应用程序和senderID,然后返回注册ID。这需要Internet连接(AFAIK)

    因此,当您第一次拨打pushNotification.register时,如果您没有连接到互联网,PushPlugin会返回OK,但GCMRegistrar没有注册ID可以返回给您。