尽管所有尝试并在SO上回顾了之前的问题和解决方案,但我无法从GCM获得注册ID。
我正在使用pushplugin,并尝试使用Cordova为Android构建。应用程序已成功构建,但似乎从未调用onNotificationGCM函数。成功处理程序被调用。我使用Genymotion Android模拟器。
在github问题上有人说将onNotification函数附加到window对象。但我也无法做到这一点。有一般问题吗?有没有人成功使用这个插件?
可能是什么原因? 此处的试用使用了与上述不同的另一个cordova插件。虽然我在上面插件的github repo中尝试了这个例子,但它没有用。
index.js:
var app = {
// Application Constructor
initialize: function() {
this.bindEvents();
},
// Bind Event Listeners
//
// Bind any events that are required on startup. Common events are:
// 'load', 'deviceready', 'offline', and 'online'.
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicity call 'app.receivedEvent(...);'
// "senderID":"273794328096"
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function(id) {
console.log('Received Event: ' + id);
if (device.platform == 'android' || device.platform == 'Android') {
alert("Register called");
window.GcmPushPlugin.register(app.successHandler, app.errorHandler, {
"senderId":"273794328096",
"jsCallback":"onNotificationGCM"
});
}
else {
alert("Register called");
pushNotification.register(this.successHandler,this.errorHandler,{"badge":"true","sound":"true","alert":"true","ecb":"onNotificationAPN"});
}
},
// result contains any message sent from the plugin call
successHandler: function(result) {
alert('Callback Success! Result = '+ result.gcm)
},
errorHandler:function(error) {
alert("Error:" + error);
},
};
function onNotificationGCM(notification) {
console.log("Event Received: " + notification); // { "extra": {"url" : "someurl.js" } }
}
的index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<title>Hello World</title>
</head>
<body>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript">
app.initialize();
</script>
</body>
</html>
答案 0 :(得分:0)
示例代码
var Project = {};
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
receivedEvent: function(id) {
app.registerDevice();
},
registerDevice: function(){
if (window.cordova && window.cordova.platformId=='android'){
try{
var pushNotification = window.plugins.pushNotification;
pushNotification.register(
app.successPN,
app.errorPN,
{
"senderID": "727700427600",
"ecb": "Project.Notification"
}
);
}
catch (ex){
// window.alert('Error (message): ' + ex.message);
// window.alert('Error (stack): ' + ex.stack);
}
console.log("regID = " + localStorage['pioneer.device.regid']);
}
},
successPN: function (result){
// window.alert('PN Success: ' + result);
},
errorPN: function (result){
// window.alert('PN Error: ' + result);
}
};
app.initialize();
<强> Project.Notification 强>
Project.Notification = function(e){
// Pioneer.alert(JSON.stringify(e), 'alert');
switch( e.event )
{
case 'registered':
// process reg id
break;
case 'message':
// print message
break;
case 'error':
// window.alert("Notification error: " + e.msg);
break;
default:
// window.alert("Notification - Unknown event");
break;
}
};