我已关注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。所以我可以推迟注册,但这不会发生。
感谢您的帮助,谢谢。
答案 0 :(得分:1)
<强>注册强>
致电pushNotification.register()
时:
successHandler
和ecb
时没有错误,则会调用senderID
。您的senderID
和申请已在GCMRegistrar注册。errorHandler
或ecb
senderID
一旦您的设置正确,您的errorHandler
可能永远不会被调用。
从docs开始,每次启动应用程序时都必须调用register
方法。这不会创建重复的注册。该插件将管理所有这些。
<强> onNotificationGCM 强>
仅在以下情况下调用:
GCMRegistrar
<强> GCMRegistrar 强>
senderID
)。senderID
,然后返回注册ID。这需要Internet连接(AFAIK)因此,当您第一次拨打pushNotification.register
时,如果您没有连接到互联网,PushPlugin会返回OK
,但GCMRegistrar没有注册ID可以返回给您。