android - 通过 GCM 的 Worklight 6.3 推送通知无法到达 Android 设备

标签 android push-notification google-cloud-messaging ibm-mobilefirst

我正在 IBM Worklight 6.3 上开发一个应用程序,该应用程序使用推送通知。该应用程序使用 IBM Websphere 应用程序服务器 8.5.5.0。以下是我们必须使推送通知正常工作的详细信息。

  1. 对于 android 代码,添加了 google 服务器 key 作为 API key 和项目编号作为发件人 ID。我也尝试过使用谷歌浏览器 key ,尽管 IBM 声明要使用服务器 key ,但之前很少有帖子建议这样做。
  2. 对于安卓 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> 
    
  3. GCMIntentService 类已声明为扩展

    package com.POCMobileApp;
    public class GCMIntentService extends com.worklight.androidgap.push.GCMIntentService {
    
    }</code>
    
  4. 定义了一个可以提交通知的适配器过程

    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."
    };
    }
    
  5. WL.Client.Push.onMessage 函数的客户端实现

我正在调用适配器程序作为

https://myServername:9443/myApplication/invoke?adapter=PushNotificationAdapter&procedure=sendBroadcastNotification&parameters=%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/

相关文章:

android - 您将以哪种方式设计设备之间的这种相互通信

android - Open GL ES - GLM 库和 Android Studio

iphone - iPhone 推送通知问题

ios - 拒绝来电推送后无法处理取消VOIP推送

android - 使用 WakefulBroadcastReceiver 的 Firebase 集成

java - 项目选定监听器上的 Android 导航菜单未触发

android - 如何更改 ListView 中选定项的背景颜色?

push-notification - 设置 webhook 结果为 'Unauthorized WebHook callback channel' 。一切都应该没问题

android - Android 中的程序化广播接收器与静态广播接收器

ios - 如何在锁屏通知中心显示之前拦截 iOS 推送通知?