IBM worklight 中基于标签的推送通知示例
Tag based Push notification example in IBM worklight
问题一:
我正在尝试使用 IBM worklight 实现基于标签的推送通知。正如培训 material 中所建议的那样,我在应用程序描述符文件中添加了标签。另外,我已经在 main.js
文件中订阅了那个特定的标记名。
遵循的步骤:
- 在应用程序中添加了标签-descriptor.xml,标签名称为 OFFERS。
- 在
WL.Client.Push.onReadyToSubscribe
函数中使用 WL.Client.PushsubscribeTag("OFFERS", {onSuccess:doSubscribeSuccess , onFailure: doSubscribeFailure})
订阅了该标签。
- 已添加
WL.client.Push.onMessage(props,payload)
来处理收到的通知。
- 加载应用程序时,它会转到
main.js
(已附)中的 doSubscribeMethod
,但不会调用回调方法 doSubscribeSuccess。
- 在调用适配器发送通知(SubmitBroadcastNotification 过程)时,我提到了我订阅的标记名(OFFERS)。
- 在控制台中显示
Failed to send Notification Reason FPWSE0009E. No devices found
问题2:
WL.Server.CreateEventsource 这个程序什么时候被调用。
注意:已遵循有关推送通知配置的所有步骤,为基于事件的推送提供的示例代码工作正常。
编辑:
我已在下方附上 logcat,以了解下方日志片段中突出显示的错误。
07-18 18:19:19.253: D/CordovaLog(1081): file:///android_asset/www/default/worklight/cordova.js: 第 1061 行:processMessage 失败:堆栈:类型错误:无法读取 属性 'hideView' 未定义
07-18 18:19:19.253: D/CordovaLog(1081): 在 wlEnvInit (文件:///android_asset/www/default/js/main.js:77:78)
07-18 18:19:19.253: D/CordovaLog(1081): 在文件:///android_asset/www/default/worklight/worklight.js:7638:5
07-18 18:19:19.253: D/CordovaLog(1081): 在 Object.onSuccess (文件:///android_asset/www/default/worklight/worklight.js:7665:5)
07-18 18:19:19.253: D/CordovaLog(1081): 在 finalizeInit (file:///android_asset/www/default/worklight/worklight.js:6972:15)
07-18 18:19:19.253: D/CordovaLog(1081): 在对象处。 (文件:///android_asset/www/default/worklight/worklight.js:7812:7)
07-18 18:19:19.253: D/CordovaLog(1081): 在对象处。 (文件:///android_asset/www/default/worklight/wljq.js:1202:33)
07-18 18:19:19.253: D/CordovaLog(1081): 在文件:///android_asset/www/default/worklight/wljq.js:1047:30
07-18 18:19:19.253: D/CordovaLog(1081): 在 Object.resolveWith (文件:///android_asset/www/default/worklight/wljq.js:1158:7)
07-18 18:19:19.253: D/CordovaLog(1081): 在 Object.resolve (文件:///android_asset/www/default/worklight/wljq.js:1247:34)
07-18 18:19:19.253: D/CordovaLog(1081): 在 deviceIDSuccessCallback (file:///android_asset/www/default/worklight/worklight.js:7732:22)
07-18 18:19:19.253:I/Web 控制台(1081):processMessage 失败:堆栈:TypeError:无法读取未定义的 属性 'hideView'
07-18 18:19:19.253: I/Web 控制台 (1081): 在 wlEnvInit (文件:///android_asset/www/default/js/main.js:77:78)
07-18 18:19:19.253: I/Web 控制台 (1081): 在文件:///android_asset/www/default/worklight/worklight.js:7638:5
07-18 18:19:19.253: I/Web 控制台 (1081): 在 Object.onSuccess (文件:///android_asset/www/default/worklight/worklight.js:7665:5)
07-18 18:19:19.253: I/Web 控制台 (1081): 在 finalizeInit (file:///android_asset/www/default/worklight/worklight.js:6972:15)
07-18 18:19:19.253:I/Web 控制台(1081):在对象处。 (文件:///android_asset/www/default/worklight/worklight.js:7812:7)
07-18 18:19:19.253:I/Web 控制台(1081):在对象处。 (文件:///android_asset/www/default/worklight/wljq.js:1202:33)
07-18 18:19:19.253: I/Web 控制台 (1081): 在文件:///android_asset/www/default/worklight/wljq.js:1047:30
07-18 18:19:19.253: I/Web 控制台 (1081): 在 Object.resolveWith (文件:///android_asset/www/default/worklight/wljq.js:1158:7)
07-18 18:19:19.253: I/Web 控制台 (1081): 在 Object.resolve (文件:///android_asset/www/default/worklight/wljq.js:1247:34)
07-18 18:19:19.253: I/Web 控制台 (1081): 在 deviceIDSuccessCallback (file:///android_asset/www/default/worklight/worklight.js:7732:22) 在 file:///android_asset/www/default/worklight/cordova .js:1061
07-18 18:19:19.263: D/CordovaLog(1081): file:///android_asset/www/default/worklight/cordova.js: 第 1062 行:processMessage 失败:消息:S01 DeviceAuth365622402 s90e2f8ab-3e50-3564-921f- b4887579e4a2
07-18 18:19:19.263:I/Web 控制台(1081):processMessage 失败:消息:S01 DeviceAuth365622402 s90e2f8ab-3e50-3564-921f-b4887579e4a2 at file:///android_asset/www/default/worklight/cordova.js: 1062
07-18 18:19:19.313:E/NONE(1081):成功建立与 MBaaS 的连接
07-18 18:19:19.323:W/PluginManager(1081):线程警告:对 LoggerPlugin.log 的 exec() 调用阻塞了主线程 22 毫秒。插件应该使用 CordovaInterface.getThreadPool()。
07-18 18:19:19.383: D/NONE(1081): Ganesh doSubscribe featurefalse
07-18 18:19:19.443:W/PluginManager(1081):线程警告:对 LoggerPlugin.log 的 exec() 调用阻塞了主线程 19 毫秒。插件应该使用 CordovaInterface.getThreadPool()。
07-18 18:19:19.453:D/NONE(1081):已输入 Ganesh doSubscribe 功能
07-18 18:19:19.484:W/PluginManager(1081):线程警告:对 LoggerPlugin.log 的 exec() 调用阻塞了主线程 40 毫秒。插件应该使用 CordovaInterface.getThreadPool()。
07-18 18:19:19.543: E/NONE(1081): 无法订阅,通知令牌未在服务器上更新
07-18 18:19:19.563: D/dalvikvm(1081): GC_CONCURRENT 释放 426K,26% 释放 3050K/4080K,暂停 14ms+35ms,总计 195ms
如果您的应用程序基于标签通知示例,它不会使用 WL.Server.createEventSource
,因为 API 方法用于基于事件源的通知而不是基于标签的通知。
确保您遵循基于标签的通知的正确示例,可在此处找到:https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-7-0/notifications/push-notifications-hybrid-applications/tag-based-notifications/
接下来,不清楚你是在iOS上测试还是在Android上测试,是否设置正确。确保您有:https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-7-0/notifications/push-notifications-hybrid-applications/
现在,您需要确保遵循示例应用程序 (download link) 的实施步骤。查看示例中的 main.js 实施片段:
//---------------------------- Check if push support is available ----------------------
function isPushSupported() {
var isSupported = false;
if (WL.Client.Push){
isSupported = WL.Client.Push.isPushSupported();
}
WL.SimpleDialog.show("Tag Notifications", JSON.stringify(isSupported), [ {
text : 'Close',
handler : function() {}
}
]);
}
//---------------------------- Set up push notifications -------------------------------
if (WL.Client.Push) {
WL.Client.Push.onReadyToSubscribe = function() {
WL.SimpleDialog.show("Tag Notifications", "Ready to subscribe", [ {
text : 'Close',
handler : function() {}
}
]);
$('.subscribeToTagButton').removeAttr('disabled');
$('.unsubscribeFromTagButton').removeAttr('disabled');
};
}
// --------------------------------- Subscribe to tag ----------------------------------
function subscribeToSampleTag1() {
WL.Client.Push.subscribeTag("sample-tag1", {
onSuccess: subscribeTagSuccess,
onFailure: subscribeTagFailure
});
}
function subscribeToSampleTag2() {
WL.Client.Push.subscribeTag("sample-tag2", {
onSuccess: subscribeTagSuccess,
onFailure: subscribeTagFailure
});
}
function subscribeTagSuccess() {
WL.SimpleDialog.show("Tag Notifications", "Subscribed to tag", [ {
text : 'Close',
handler : function() {}
}
]);
}
function subscribeTagFailure() {
WL.SimpleDialog.show("Tag Notifications", "Failed subscribing to tag", [ {
text : 'Close',
handler : function() {}
}
]);
}
// ------------------------------- Check if subscribed ---------------------------------
function isSubscribedToTags() {
var subscribedTagsSample1 = WL.Client.Push.isTagSubscribed("sample-tag1");
var subscribedTagsSample2 = WL.Client.Push.isTagSubscribed("sample-tag2");
WL.SimpleDialog.show("Tag Notifications", 'sample-tag1: ' + subscribedTagsSample1 + '\n' + 'sample-tag2: ' + subscribedTagsSample2, [ {
text : 'Close',
handler : function() {}
}
]);
}
// ------------------------------- Unsubscribe from tag --------------------------------
function unsubscribeFromSampleTag1() {
WL.Client.Push.unsubscribeTag("sample-tag1", {
onSuccess: unsubscribeTagSuccess,
onFailure: unsubscribeTagFailure
});
}
function unsubscribeFromSampleTag2() {
WL.Client.Push.unsubscribeTag("sample-tag2", {
onSuccess: unsubscribeTagSuccess,
onFailure: unsubscribeTagFailure
});
}
function unsubscribeTagSuccess(response) {
WL.SimpleDialog.show("Tag Notifications", "Unsubscribe from tag", [ {
text : 'Close',
handler : function() {}
}
]);
}
function unsubscribeTagFailure(response) {
WL.SimpleDialog.show("Tag Notifications", "Failed subscribing from tag", [ {
text : 'Close',
handler : function() {}
}
]);
}
//------------------------------- Handle received notification ---------------------------------------
WL.Client.Push.onMessage = function (props, payload) {
WL.SimpleDialog.show("Tag Notifications", "Provider notification data: " + JSON.stringify(props), [ {
text : 'Close',
handler : function() {
WL.SimpleDialog.show("Tag Notifications", "Application notification data: " + JSON.stringify(payload), [ {
text : 'Close',
handler : function() {}
}]);
}
}]);
};
问题一:
我正在尝试使用 IBM worklight 实现基于标签的推送通知。正如培训 material 中所建议的那样,我在应用程序描述符文件中添加了标签。另外,我已经在 main.js
文件中订阅了那个特定的标记名。
遵循的步骤:
- 在应用程序中添加了标签-descriptor.xml,标签名称为 OFFERS。
- 在
WL.Client.Push.onReadyToSubscribe
函数中使用WL.Client.PushsubscribeTag("OFFERS", {onSuccess:doSubscribeSuccess , onFailure: doSubscribeFailure})
订阅了该标签。 - 已添加
WL.client.Push.onMessage(props,payload)
来处理收到的通知。 - 加载应用程序时,它会转到
main.js
(已附)中的doSubscribeMethod
,但不会调用回调方法 doSubscribeSuccess。 - 在调用适配器发送通知(SubmitBroadcastNotification 过程)时,我提到了我订阅的标记名(OFFERS)。
- 在控制台中显示
Failed to send Notification Reason FPWSE0009E. No devices found
问题2: WL.Server.CreateEventsource 这个程序什么时候被调用。
注意:已遵循有关推送通知配置的所有步骤,为基于事件的推送提供的示例代码工作正常。
编辑: 我已在下方附上 logcat,以了解下方日志片段中突出显示的错误。
07-18 18:19:19.253: D/CordovaLog(1081): file:///android_asset/www/default/worklight/cordova.js: 第 1061 行:processMessage 失败:堆栈:类型错误:无法读取 属性 'hideView' 未定义 07-18 18:19:19.253: D/CordovaLog(1081): 在 wlEnvInit (文件:///android_asset/www/default/js/main.js:77:78) 07-18 18:19:19.253: D/CordovaLog(1081): 在文件:///android_asset/www/default/worklight/worklight.js:7638:5 07-18 18:19:19.253: D/CordovaLog(1081): 在 Object.onSuccess (文件:///android_asset/www/default/worklight/worklight.js:7665:5) 07-18 18:19:19.253: D/CordovaLog(1081): 在 finalizeInit (file:///android_asset/www/default/worklight/worklight.js:6972:15) 07-18 18:19:19.253: D/CordovaLog(1081): 在对象处。 (文件:///android_asset/www/default/worklight/worklight.js:7812:7) 07-18 18:19:19.253: D/CordovaLog(1081): 在对象处。 (文件:///android_asset/www/default/worklight/wljq.js:1202:33) 07-18 18:19:19.253: D/CordovaLog(1081): 在文件:///android_asset/www/default/worklight/wljq.js:1047:30 07-18 18:19:19.253: D/CordovaLog(1081): 在 Object.resolveWith (文件:///android_asset/www/default/worklight/wljq.js:1158:7) 07-18 18:19:19.253: D/CordovaLog(1081): 在 Object.resolve (文件:///android_asset/www/default/worklight/wljq.js:1247:34) 07-18 18:19:19.253: D/CordovaLog(1081): 在 deviceIDSuccessCallback (file:///android_asset/www/default/worklight/worklight.js:7732:22) 07-18 18:19:19.253:I/Web 控制台(1081):processMessage 失败:堆栈:TypeError:无法读取未定义的 属性 'hideView' 07-18 18:19:19.253: I/Web 控制台 (1081): 在 wlEnvInit (文件:///android_asset/www/default/js/main.js:77:78) 07-18 18:19:19.253: I/Web 控制台 (1081): 在文件:///android_asset/www/default/worklight/worklight.js:7638:5 07-18 18:19:19.253: I/Web 控制台 (1081): 在 Object.onSuccess (文件:///android_asset/www/default/worklight/worklight.js:7665:5) 07-18 18:19:19.253: I/Web 控制台 (1081): 在 finalizeInit (file:///android_asset/www/default/worklight/worklight.js:6972:15) 07-18 18:19:19.253:I/Web 控制台(1081):在对象处。 (文件:///android_asset/www/default/worklight/worklight.js:7812:7) 07-18 18:19:19.253:I/Web 控制台(1081):在对象处。 (文件:///android_asset/www/default/worklight/wljq.js:1202:33) 07-18 18:19:19.253: I/Web 控制台 (1081): 在文件:///android_asset/www/default/worklight/wljq.js:1047:30 07-18 18:19:19.253: I/Web 控制台 (1081): 在 Object.resolveWith (文件:///android_asset/www/default/worklight/wljq.js:1158:7) 07-18 18:19:19.253: I/Web 控制台 (1081): 在 Object.resolve (文件:///android_asset/www/default/worklight/wljq.js:1247:34) 07-18 18:19:19.253: I/Web 控制台 (1081): 在 deviceIDSuccessCallback (file:///android_asset/www/default/worklight/worklight.js:7732:22) 在 file:///android_asset/www/default/worklight/cordova .js:1061 07-18 18:19:19.263: D/CordovaLog(1081): file:///android_asset/www/default/worklight/cordova.js: 第 1062 行:processMessage 失败:消息:S01 DeviceAuth365622402 s90e2f8ab-3e50-3564-921f- b4887579e4a2 07-18 18:19:19.263:I/Web 控制台(1081):processMessage 失败:消息:S01 DeviceAuth365622402 s90e2f8ab-3e50-3564-921f-b4887579e4a2 at file:///android_asset/www/default/worklight/cordova.js: 1062 07-18 18:19:19.313:E/NONE(1081):成功建立与 MBaaS 的连接 07-18 18:19:19.323:W/PluginManager(1081):线程警告:对 LoggerPlugin.log 的 exec() 调用阻塞了主线程 22 毫秒。插件应该使用 CordovaInterface.getThreadPool()。 07-18 18:19:19.383: D/NONE(1081): Ganesh doSubscribe featurefalse 07-18 18:19:19.443:W/PluginManager(1081):线程警告:对 LoggerPlugin.log 的 exec() 调用阻塞了主线程 19 毫秒。插件应该使用 CordovaInterface.getThreadPool()。 07-18 18:19:19.453:D/NONE(1081):已输入 Ganesh doSubscribe 功能 07-18 18:19:19.484:W/PluginManager(1081):线程警告:对 LoggerPlugin.log 的 exec() 调用阻塞了主线程 40 毫秒。插件应该使用 CordovaInterface.getThreadPool()。 07-18 18:19:19.543: E/NONE(1081): 无法订阅,通知令牌未在服务器上更新 07-18 18:19:19.563: D/dalvikvm(1081): GC_CONCURRENT 释放 426K,26% 释放 3050K/4080K,暂停 14ms+35ms,总计 195ms
如果您的应用程序基于标签通知示例,它不会使用 WL.Server.createEventSource
,因为 API 方法用于基于事件源的通知而不是基于标签的通知。
确保您遵循基于标签的通知的正确示例,可在此处找到:https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-7-0/notifications/push-notifications-hybrid-applications/tag-based-notifications/
接下来,不清楚你是在iOS上测试还是在Android上测试,是否设置正确。确保您有:https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-7-0/notifications/push-notifications-hybrid-applications/
现在,您需要确保遵循示例应用程序 (download link) 的实施步骤。查看示例中的 main.js 实施片段:
//---------------------------- Check if push support is available ----------------------
function isPushSupported() {
var isSupported = false;
if (WL.Client.Push){
isSupported = WL.Client.Push.isPushSupported();
}
WL.SimpleDialog.show("Tag Notifications", JSON.stringify(isSupported), [ {
text : 'Close',
handler : function() {}
}
]);
}
//---------------------------- Set up push notifications -------------------------------
if (WL.Client.Push) {
WL.Client.Push.onReadyToSubscribe = function() {
WL.SimpleDialog.show("Tag Notifications", "Ready to subscribe", [ {
text : 'Close',
handler : function() {}
}
]);
$('.subscribeToTagButton').removeAttr('disabled');
$('.unsubscribeFromTagButton').removeAttr('disabled');
};
}
// --------------------------------- Subscribe to tag ----------------------------------
function subscribeToSampleTag1() {
WL.Client.Push.subscribeTag("sample-tag1", {
onSuccess: subscribeTagSuccess,
onFailure: subscribeTagFailure
});
}
function subscribeToSampleTag2() {
WL.Client.Push.subscribeTag("sample-tag2", {
onSuccess: subscribeTagSuccess,
onFailure: subscribeTagFailure
});
}
function subscribeTagSuccess() {
WL.SimpleDialog.show("Tag Notifications", "Subscribed to tag", [ {
text : 'Close',
handler : function() {}
}
]);
}
function subscribeTagFailure() {
WL.SimpleDialog.show("Tag Notifications", "Failed subscribing to tag", [ {
text : 'Close',
handler : function() {}
}
]);
}
// ------------------------------- Check if subscribed ---------------------------------
function isSubscribedToTags() {
var subscribedTagsSample1 = WL.Client.Push.isTagSubscribed("sample-tag1");
var subscribedTagsSample2 = WL.Client.Push.isTagSubscribed("sample-tag2");
WL.SimpleDialog.show("Tag Notifications", 'sample-tag1: ' + subscribedTagsSample1 + '\n' + 'sample-tag2: ' + subscribedTagsSample2, [ {
text : 'Close',
handler : function() {}
}
]);
}
// ------------------------------- Unsubscribe from tag --------------------------------
function unsubscribeFromSampleTag1() {
WL.Client.Push.unsubscribeTag("sample-tag1", {
onSuccess: unsubscribeTagSuccess,
onFailure: unsubscribeTagFailure
});
}
function unsubscribeFromSampleTag2() {
WL.Client.Push.unsubscribeTag("sample-tag2", {
onSuccess: unsubscribeTagSuccess,
onFailure: unsubscribeTagFailure
});
}
function unsubscribeTagSuccess(response) {
WL.SimpleDialog.show("Tag Notifications", "Unsubscribe from tag", [ {
text : 'Close',
handler : function() {}
}
]);
}
function unsubscribeTagFailure(response) {
WL.SimpleDialog.show("Tag Notifications", "Failed subscribing from tag", [ {
text : 'Close',
handler : function() {}
}
]);
}
//------------------------------- Handle received notification ---------------------------------------
WL.Client.Push.onMessage = function (props, payload) {
WL.SimpleDialog.show("Tag Notifications", "Provider notification data: " + JSON.stringify(props), [ {
text : 'Close',
handler : function() {
WL.SimpleDialog.show("Tag Notifications", "Application notification data: " + JSON.stringify(payload), [ {
text : 'Close',
handler : function() {}
}]);
}
}]);
};