为什么我的通知事件没有在 Cordova 中触发?
Why is my notification event not firing in Cordova?
我正在从 Amazon SNS 发布通知并在我的设备上正确接收它。
这是我要发送的示例消息:
{
"APNS_SANDBOX": "{\"aps\":{\"alert\":{\"title\":\"A short string describing the purpose of the notification\",\"body\":\"The text of the alert message\",\"launch-image\":\"The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider\"},\"badge\":5,\"content-available\":\"1\",\"category\":\"identifier\",\"thread-id\":\"id\",\"sound\":\"default\"},\"notId\":1,\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}"
}
然而,当我在 phone 上打开通知时,我期待 notification
事件触发,我的目标是在通知打开类似:window.location='data.some_link_to_notification';
我去掉了所有这些,只是添加了一个警报,看看它是否被调用,但它似乎没有。这是我的 index.js
文件。
var app = {
// Application Constructor
initialize: function() {
document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
},
onDeviceReady: function() {
StatusBar.backgroundColorByHexString('#FFFFFF');
var push = PushNotification.init({
android: {},
browser: {},
ios: {
alert: "true",
badge: "true",
sound: "true"
},
windows: {}
});
push.on('notification', function (data) {
alert("notification event");
});
push.on('error', function (err) {
console.log(err)
alert('Event=error, message=' + err.message)
});
push.on('registration', function (data) {
console.dir(data)
console.log('registrationId:' + data.registrationId)
window.localStorage.setItem("regId", data.registrationId);
});
cordova.InAppBrowser.open('app_url', '_self');
}
};
app.initialize();
正如您在评论中所说,您的问题是使用 cordova.InAppBrowser.open('app_url', '_self');
加载远程 url
当你导航到不同的页面时(不管是远程页面还是本地页面),所有的javascript代码都会丢失,所以当通知到达时触发通知事件, 但没有什么可以听的了。
因为它是一个远程页面,所以你还有另一个问题,cordova.js 或任何插件 javascript 都不在线,如果你想让 Cordova 插件从远程 url 你必须上传 iOS cordova.js,插件文件夹和一些文件(如果你打开 platforms/ios/ 上的 Xcode 项目,你会看到一个黄色的"Stagin" 文件夹里面有一个蓝色的 "www" 文件夹,你应该把所有的代码上传到你的服务器。
请记住,代码只是 iOS,因此如果您想对 Android 执行相同的操作,您应该在服务器中为每个代码使用不同的 url。并从远程版本中删除 cordova.InAppBrowser.open('app_url', '_self');
否则会导致无限循环。
另外请记住,Apple 不喜欢加载外部网站的应用程序,如果他们注意到,他们可能会拒绝您的应用程序。
我正在从 Amazon SNS 发布通知并在我的设备上正确接收它。
这是我要发送的示例消息:
{
"APNS_SANDBOX": "{\"aps\":{\"alert\":{\"title\":\"A short string describing the purpose of the notification\",\"body\":\"The text of the alert message\",\"launch-image\":\"The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider\"},\"badge\":5,\"content-available\":\"1\",\"category\":\"identifier\",\"thread-id\":\"id\",\"sound\":\"default\"},\"notId\":1,\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}"
}
然而,当我在 phone 上打开通知时,我期待 notification
事件触发,我的目标是在通知打开类似:window.location='data.some_link_to_notification';
我去掉了所有这些,只是添加了一个警报,看看它是否被调用,但它似乎没有。这是我的 index.js
文件。
var app = {
// Application Constructor
initialize: function() {
document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
},
onDeviceReady: function() {
StatusBar.backgroundColorByHexString('#FFFFFF');
var push = PushNotification.init({
android: {},
browser: {},
ios: {
alert: "true",
badge: "true",
sound: "true"
},
windows: {}
});
push.on('notification', function (data) {
alert("notification event");
});
push.on('error', function (err) {
console.log(err)
alert('Event=error, message=' + err.message)
});
push.on('registration', function (data) {
console.dir(data)
console.log('registrationId:' + data.registrationId)
window.localStorage.setItem("regId", data.registrationId);
});
cordova.InAppBrowser.open('app_url', '_self');
}
};
app.initialize();
正如您在评论中所说,您的问题是使用 cordova.InAppBrowser.open('app_url', '_self');
当你导航到不同的页面时(不管是远程页面还是本地页面),所有的javascript代码都会丢失,所以当通知到达时触发通知事件, 但没有什么可以听的了。
因为它是一个远程页面,所以你还有另一个问题,cordova.js 或任何插件 javascript 都不在线,如果你想让 Cordova 插件从远程 url 你必须上传 iOS cordova.js,插件文件夹和一些文件(如果你打开 platforms/ios/ 上的 Xcode 项目,你会看到一个黄色的"Stagin" 文件夹里面有一个蓝色的 "www" 文件夹,你应该把所有的代码上传到你的服务器。
请记住,代码只是 iOS,因此如果您想对 Android 执行相同的操作,您应该在服务器中为每个代码使用不同的 url。并从远程版本中删除 cordova.InAppBrowser.open('app_url', '_self');
否则会导致无限循环。
另外请记住,Apple 不喜欢加载外部网站的应用程序,如果他们注意到,他们可能会拒绝您的应用程序。