我们正在尝试运行推送通知的示例应用程序并进行一些修改,以使其发送广播通知,但它没有被发送。
我们也修改了PushBackendEmulator代码。模拟器成功调用submitBroadCastNotification过程,并返回以下结果:
服务器响应:: / -secure - {"结果":"通知发送给所有人 用户"" isSuccessful":真} /
但是,WL.Server.sendMessage
方法似乎没有发送消息并返回。在自由服务器上进行彻底搜索之后,我无法看到服务器端日志,除了自由服务器上的messages.log,当调用WL.Server.sendMessage
时显示以下内容。
ht.integration.js.JavaScriptIntegrationLibraryImplementation E. FWLSE0227E:无法发送通知。原因:FPWSE0009E:内部 服务器错误。找不到设备[项目工作灯]
以下是适配器代码:
function submitBroadcastNotification( notificationText) {
var notification = {};
notification.message = {};
notification.message.alert = notificationText;
//notification.target = {};
//notification.target.tagNames = ['test'];
WL.Logger.debug("broadcast: " + notification.message.alert );
var delayTimeOut = **WL.Server.sendMessage**("PushNotificationsApp", notification);
WL.Logger.debug("Return value from WL.Server.sendMessage :"+ delayTimeOut);
return {
result : "Notification sent to all users"
};
}
这是PushBackendEmulator代码:
public static void main(String [] args){
String serverUrl =
"http://208.124.245.78:9080/worklight";
String notificationText = "Hellofrombroadcastingnotifications";
String userId = "admin";
notificationText = notificationText.replace(" ", "%20");
Logger.debug("sending broadcast notification: " + notificationText);
URL url = new URL(serverUrl
+ "/invoke?
adapter=PushAdapter&procedure=submitBroadcastNotification¶meters=['" + userId + "','" + notificationText + "']");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(10000);
connection.setDoOutput(true);
Logger.debug("Connected to server");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String response = "";
String inputLine;
while ((inputLine = in.readLine()) != null)
response+= inputLine;
Logger.debug("response is:"+ response);
in.close();
Logger.debug("Server response :: " + response);
connection.disconnect();
答案 0 :(得分:0)
从PMR看你的应用程序,在我看来,你混合了基于事件源的通知和广播通知。
如果您想使用广播通知,这意味着您无法尝试强制将通知发送到任何特定的userId等,因为它不需要也不基于userIds。
默认情况下,所有设备都会自动订阅名为“push.ALL”的标签 您可以阅读有关广播通知API方法in the IBM Worklight Knowledge Center。
的更多信息这是您的应用程序的修改版本,在iOS和Android中进行了测试:https://www.dropbox.com/s/l2yk2pbvykrzfoh/broadcastNotificationsTest.zip?dl=0
基本上,我删除了与广播通知无关的任何内容:
最终结果是,在加载应用程序后,您就在应用程序内部(无需登录) 然后我在Studio>中右键单击了适配器文件夹。调用过程,并选择submitBroadcastNotification选项发送通知(“aaa”)。
在设备中,收到了通知。点击它(如果应用程序关闭)启动应用程序,然后触发公共\ js \ main.js中的WL.Client.Push.onMessage
API以显示包含已接收通知的有效负载和道具的警报。
这在iOS和Android都经过测试 在加载应用程序时,我可以在LogCat和Xcode控制台中看到令牌注册。
要在iOS中进行测试,您需要使用自己的pushSender密码更新application-descriptor.xml,并添加自己的apns-certificatae-sandbox.p12文件。
要在Android中进行测试,请确保您已在GCM控制台中生成浏览器键并在application-descriptor.xml中使用
对于这两者,请确保all requires ports and addresses并可在您的网络中访问