3
votes

I am developing an application on IBM Worklight 6.3 and application uses push notification. The application uses IBM Websphere application server 8.5.5.0. Below are the details which we have to make push notification work.

  1. For android code, have added google server key as API key and project number as sender id. I have also tried with google browser key as few earlier posts have suggested though IBM states server key to be used.
  2. For android manifest,

    <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 class has been declared to extend

    package com.POCMobileApp;
    public class GCMIntentService extends com.worklight.androidgap.push.GCMIntentService {
    
    }</code>
    
  4. An adapter procedure is defined which can submit the notification

    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. Client side implementation of functions WL.Client.Push.onMessage

I am invoking the adapter procedure as

https://myServername:9443/myApplication/invoke?adapter=PushNotificationAdapter&procedure=sendBroadcastNotification&parameters=%5B"test+notification"%5D

and that returns below

/*-secure-
{"result":"Notification sent to all users.","isSuccessful":true}*/

There is no error while invoking the procedure but there is no notification received on the subscribed devices. From logcat traces of devices, i understand that device has established a connection with GCM server and registration is successful. Below are the traces :

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--

Can you please suggest where am i going wrong ? Also which is not clear to me how calling WL.Server.sendMessage (which is at adapter level) will establish connection with GCM server, can someone clarify ?

EDIT

I have noticed that every time the adapter is invoked the below error appears in 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)

Can it be related ? Is there a possibility that message is not getting formed and transmitted to GCM ?

Thanks.

1
Hi i think now you can check weather your call reached GCM or not via Google developers console "API Request chart" . if it hasent reached the GCM server then the push notiifiction is not reaching GCM at all so the problem is in your worklight server side.Kawinesh SK
Please see this post for more details stackoverflow.com/questions/29808360/…Kawinesh SK
Questions: 1) Have you modified the GCMIntentService class in any way? Have you overridden methods ? 2) Update the post to include your client side Push handling logic.Vivin K
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.Mrinmoy Kar
@MrinmoyKar, can you write this as an answer to question instead of a comment?Idan Adar

1 Answers

0
votes

The user will not post the answer from the comments... here it is:

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.