IBM worklight 中基于标签的推送通知示例

Tag based Push notification example in IBM worklight

问题一: 我正在尝试使用 IBM worklight 实现基于标签的推送通知。正如培训 material 中所建议的那样,我在应用程序描述符文件中添加了标签。另外,我已经在 main.js 文件中订阅了那个特定的标记名。

遵循的步骤:

  1. 在应用程序中添加了标签-descriptor.xml,标签名称为 OFFERS。
  2. WL.Client.Push.onReadyToSubscribe 函数中使用 WL.Client.PushsubscribeTag("OFFERS", {onSuccess:doSubscribeSuccess , onFailure: doSubscribeFailure}) 订阅了该标签。
  3. 已添加 WL.client.Push.onMessage(props,payload) 来处理收到的通知。
  4. 加载应用程序时,它会转到 main.js(已附)中的 doSubscribeMethod,但不会调用回调方法 doSubscribeSuccess。
  5. 在调用适配器发送通知(SubmitBroadcastNotification 过程)时,我提到了我订阅的标记名(OFFERS)。
  6. 在控制台中显示 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() {}
              }]);      
        }
    }]);
};