我正在 IBM Worklight 6.3 上开发一个应用程序,该应用程序使用推送通知。该应用程序使用 IBM Websphere 应用程序服务器 8.5.5.0。以下是我们必须使推送通知正常工作的详细信息。
- 对于 android 代码,添加了 google 服务器 key 作为 API key 和项目编号作为发件人 ID。我也尝试过使用谷歌浏览器 key ,尽管 IBM 声明要使用服务器 key ,但之前很少有帖子建议这样做。
对于安卓 list ,
<uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <permission android:name="com.POCMobileApp.permission.C2D_MESSAGE" android:protectionLevel="signature"/> <uses-permission android:name="com.POCMobileApp.permission.C2D_MESSAGE"/> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> <service android:name="com.POCMobileApp.GCMIntentService"/> <receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <!-- Receive the actual message --> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <category android:name="com.POCMobileApp"/> </intent-filter> <!-- Receive the registration id --> <intent-filter> <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> <category android:name="com.POCMobileApp"/> </intent-filter> </receiver>
GCMIntentService 类已声明为扩展
package com.POCMobileApp; public class GCMIntentService extends com.worklight.androidgap.push.GCMIntentService { }</code>
定义了一个可以提交通知的适配器过程
function sendBroadcastNotification(notificationText) { WL.Logger.info("Notification text -> " + notificationText); var notificationOptions = {}; notificationOptions.message = {}; notificationOptions.message.alert = notificationText; notificationOptions.settings = {}; notificationOptions.settings.gcm = {}; notificationOptions.settings.gcm.payload = {"custom":"data"}; try { var timeOut = WL.Server.sendMessage("POCMobileApp", notificationOptions); } catch(e) { WL.Logger.info("Error encountered -> " + e); } return { result : "Notification sent to all users." }; }
WL.Client.Push.onMessage 函数的客户端实现
我正在调用适配器程序作为
https://myServername:9443/myApplication/invoke?adapter=PushNotificationAdapter&procedure=sendBroadcastNotification¶meters=%5B"test+notification"%5D
下面返回
/*-secure-
{"result":"Notification sent to all users.","isSuccessful":true}*/
调用程序时没有错误,但订阅的设备上没有收到通知。从设备的 logcat 痕迹中,我了解到设备已与 GCM 服务器建立连接并且注册成功。以下是痕迹:
12-10 21:40:09.151: V/GCMBroadcastReceiver(18771): onReceive: com.google.android.c2dm.intent.REGISTRATION 12-10 21:40:09.151: V/GCMBroadcastReceiver(18771): GCM IntentService class: com.POCMobileApp.GCMIntentService 12-10 21:40:09.151: V/GCMBaseIntentService(18771): Acquiring wakelock 12-10 21:40:09.156: V/GCMBaseIntentService(18771): Intent service name: GCMIntentService-DynamicSenderIds-2 12-10 21:40:09.161: D/GCMBaseIntentService(18771): handleRegistration: registrationId = APA91bH-QI_73vpf5sqvuvdkqha9QFNzvKa5FZGhGh--taYs9I9WCEZMwUFTz837eJXTfF3I8NMFr7jDBIYlgUrgXreoUUAYej62VmFZZoRofLBSOc6f9rKnkvXsOR3GafwsrZnIjNWp, error = null, unregistered = null 12-10 21:40:09.161: D/GCMRegistrar(18771): resetting backoff for com.POCMobileApp 12-10 21:40:09.161: V/GCMRegistrar(18771): Saving regId on app version 1 12-10 21:40:09.166: D/GCMIntentService(18771): GCMIntentService.onRegistered in GCMIntentService.java:81 :: WLGCMIntentService: Registered at the GCM server with registration id APA91bH-QI_73vpf5sqvuvdkqha9QFNzvKa5FZGhGh--
你能告诉我哪里出错了吗?我还不清楚调用 WL.Server.sendMessage (在适配器级别)将如何与 GCM 服务器建立连接,有人可以澄清一下吗?
编辑
我注意到每次调用适配器时,SystemErr.log 中都会出现以下错误
[12/14/15 12:33:44:452 EST] 00000074 SystemErr R java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key could not piggyback configprofile due to invalid or incomplete headers sent from client [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at java.util.ResourceBundle.getObject(ResourceBundle.java:404) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at java.util.ResourceBundle.getString(ResourceBundle.java:364) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.worklight.common.i18n.MessageFormatter.format(MessageFormatter.java:111) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.worklight.common.i18n.MessageFormatter.format(MessageFormatter.java:89) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.worklight.common.log.WorklightServerLogger.warn(WorklightServerLogger.java:64) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.worklight.gadgets.serving.ClientConfigProfileServlet.piggybackConfigProfile(ClientConfigProfileServlet.java:238) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.worklight.gadgets.serving.InvokeProcServlet.service(InvokeProcServlet.java:82) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1227) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:776) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:458) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.worklight.core.auth.impl.AuthenticationFilter$1.execute(AuthenticationFilter.java:217) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:76) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:222) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:928) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1025) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3761) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:976) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:283) [12/14/15 12:33:44:452 EST] 00000074 SystemErr R at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determineNextChannel(SSLConnectionLink.java:1048) [12/14/15 12:33:44:453 EST] 00000074 SystemErr R at com.ibm.ws.ssl.channel.impl.SSLConnectionLink$MyReadCompletedCallback.complete(SSLConnectionLink.java:642) [12/14/15 12:33:44:453 EST] 00000074 SystemErr R at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1784) [12/14/15 12:33:44:453 EST] 00000074 SystemErr R at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) [12/14/15 12:33:44:453 EST] 00000074 SystemErr R at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) [12/14/15 12:33:44:453 EST] 00000074 SystemErr R at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) [12/14/15 12:33:44:453 EST] 00000074 SystemErr R at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) [12/14/15 12:33:44:453 EST] 00000074 SystemErr R at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) [12/14/15 12:33:44:453 EST] 00000074 SystemErr R at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) [12/14/15 12:33:44:453 EST] 00000074 SystemErr R at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) [12/14/15 12:33:44:453 EST] 00000074 SystemErr R at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1862)
可以关联吗?是否有可能消息没有形成并传输到 GCM?
谢谢。
最佳答案
用户不会发布评论中的答案...这里是:
Broadcast notification functionality is now working. We have made below changes to make it work - 1. Opened network ports. 2. Removed security test only for the android project. Also app server restart was a must for any change to reflect.
关于android - 通过 GCM 的 Worklight 6.3 推送通知无法到达 Android 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34258000/