我正在尝试Android手机和平板电脑的推送通知,我们正在使用IBM Worklight(see blog post)提供的示例代码。
我们已在Google GCM注册并获得了项目ID和API密钥;这些代码适用于平板电脑,但是当我用手机运行同样的时候,订阅会返回false,任何人都可以请测试这里给出的代码,让我们知道我们做错了什么是因为它无法在多个设备上运行。
来自第一台设备的LogCat - 运行Android v3.2的平板电脑 工作正常。
08-06 17:48:35.110: V/webview(11093): singleCursorHandlerTouchEvent -getEditableSupport FASLE
08-06 17:48:40.930: V/webview(11093): singleCursorHandlerTouchEvent -getEditableSupport FASLE
08-06 17:48:40.950: D/PushApplication(11093): Request [http://172.20.10.8:8080/apps/services/api/PushApplication/android/notifications]
08-06 17:48:41.470: D/PushApplication(11093): response [http://172.20.10.8:8080/apps/services/api/PushApplication/android/notifications] success: /*-secure-
08-06 17:48:41.470: D/PushApplication(11093): {"errors":[],"isSuccessful":true,"warnings":[],"info":[]}*/
08-06 17:48:41.470: V/(11093): ResourceHandle
08-06 17:48:41.520: D/dalvikvm(11093): GC_CONCURRENT freed 331K, 6% free 7957K/8455K, paused 3ms+4ms
08-06 17:48:44.710: V/(11093): ResourceHandle
08-06 17:49:02.820: V/GCMBroadcastReceiver(11093): onReceive: com.google.android.c2dm.intent.RECEIVE
08-06 17:49:02.820: V/GCMBroadcastReceiver(11093): GCM IntentService class: com.PushApplication.GCMIntentService
08-06 17:49:02.820: V/GCMBaseIntentService(11093): Acquiring wakelock
08-06 17:49:02.830: V/GCMBaseIntentService(11093): Intent service name: GCMIntentService-804999789155-4
08-06 17:49:02.830: D/WLDroidGap(11093): Received a message from the GCM server
08-06 17:49:02.830: V/GCMBaseIntentService(11093): Releasing wakelock
08-06 17:49:02.840: D/WLDroidGap(11093): Queuing message for dispatch to javascript
08-06 17:49:02.840: D/WLDroidGap(11093): Dispatching to javascript Message(alert=got a new message, badge=1, sound=sound.mp3, payload={
08-06 17:49:02.840: D/WLDroidGap(11093): "alias": "myPush",
08-06 17:49:02.840: D/WLDroidGap(11093): "foo": "bar"
08-06 17:49:02.840: D/WLDroidGap(11093): })
08-06 17:49:02.840: D/PushApplication(11093): WL.Client.Push received notification for alias myPush
来自第二台设备的LogCat - 运行Android v4.0.4的平板电脑 订阅按钮已停用
01-01 10:02:31.740: V/webview(8635): singleCursorHandlerTouchEvent -getEditableSupport FASLE
01-01 10:02:31.840: V/GCMBroadcastReceiver(8635): onReceive: com.google.android.gcm.intent.RETRY
01-01 10:02:31.840: V/GCMBroadcastReceiver(8635): GCM IntentService class: com.PushApplication.GCMIntentService
01-01 10:02:31.840: V/GCMBaseIntentService(8635): Acquiring wakelock
01-01 10:02:31.850: V/GCMBaseIntentService(8635): Intent service name: GCMIntentService-804999789155-2
01-01 10:02:31.850: E/GCMBaseIntentService(8635): Received invalid token: 1101110000000111011000111110100011101100101100011101100111100011
我们已从示例代码中删除了禁用,这样我们就可以检查平板电脑2是否已订阅,以下日志清楚地显示设备未订阅。
01-01 10:27:13.440: V/webview(9400): NO_FAST_DRAW = false
01-01 10:27:13.640: V/webview(9400): singleCursorHandlerTouchEvent -getEditableSupport FASLE
01-01 10:27:13.660: E/PushApplication(9400): Can't subscribe, notification token is not updated on the server
01-01 10:27:20.840: V/GCMBroadcastReceiver(9400): onReceive: com.google.android.gcm.intent.RETRY
01-01 10:27:20.840: V/GCMBroadcastReceiver(9400): GCM IntentService class: com.PushApplication.GCMIntentService
01-01 10:27:20.840: V/GCMBaseIntentService(9400): Acquiring wakelock
01-01 10:27:20.860: V/GCMBaseIntentService(9400): Intent service name: GCMIntentService-804999789155-6
01-01 10:27:20.860: V/GCMRegistrar(9400): Registering app com.PushApplication of senders 804999789155
01-01 10:27:20.870: V/GCMBaseIntentService(9400): Releasing wakelock
01-01 10:27:23.340: V/GCMBroadcastReceiver(9400): onReceive: com.google.android.c2dm.intent.REGISTRATION
01-01 10:27:23.340: V/GCMBroadcastReceiver(9400): GCM IntentService class: com.PushApplication.GCMIntentService
01-01 10:27:23.340: V/GCMBaseIntentService(9400): Acquiring wakelock
01-01 10:27:23.340: V/GCMBaseIntentService(9400): Intent service name: GCMIntentService-804999789155-7
01-01 10:27:23.340: D/GCMBaseIntentService(9400): handleRegistration: registrationId = null, error = SERVICE_NOT_AVAILABLE, unregistered = null
01-01 10:27:23.340: D/GCMBaseIntentService(9400): Registration error: SERVICE_NOT_AVAILABLE
答案 0 :(得分:1)
请检查您的互联网连接,因为您在第二台设备的日志中看到的错误是:
01-01 10:27:23.340: V/GCMBaseIntentService(9400): Intent service name: GCMIntentService-804999789155-7
01-01 10:27:23.340: D/GCMBaseIntentService(9400): handleRegistration: registrationId = null, error = SERVICE_NOT_AVAILABLE, unregistered = null
01-01 10:27:23.340: D/GCMBaseIntentService(9400): Registration error: SERVICE_NOT_AVAILABLE
这意味着您的应用无法注册GCM服务以获取令牌,因为GCM服务似乎不可用,因此错误SERVICE_NOT_AVAILABLE可能是因为您的互联网连接问题或GCM可能在您尝试时无法使用这个。所以再试几次。
另请注意,现在您正在另一台设备上运行您的应用程序,这意味着您需要再次进行订阅,即使您以同一用户身份登录(如在第一台设备上)。所以isSubscribed()正确返回false 。
订阅呼叫本质上意味着将此特定设备上的登录用户订阅到给定的事件源。由于您尚未订阅此第二个设备(即使在第一个设备上订阅了相同的用户),isSubscribed()返回false。