单击通知区域中的消息时未打开应用程序

Posted

技术标签:

【中文标题】单击通知区域中的消息时未打开应用程序【英文标题】:App not opened when clicking on message in notification area 【发布时间】:2014-10-08 14:30:15 【问题描述】:

我正在开发一个适用于推送通知的 Worklight 应用程序。我目前正在 android 上进行测试,并让适配器向应用程序发送推送通知。问题是:应用程序只在前台接收它。如果它在后台,它不会收到它,我在通知区域中显示一条消息后打开它。当我点击通知区域内的消息时,应用程序也没有打开。

我研究了 PushNotifications 示例,似乎我正在做同样的事情。我将 Android 清单文件中的权限等与示例中的权限等进行了交叉检查。但是,它似乎不起作用。以下是运行 PushNotifications 示例时的日志摘录。

10-08 09:58:48.227: V/GCMBroadcastReceiver(2771): onReceive: com.google.android.c2dm.intent.RECEIVE
10-08 09:58:48.227: V/GCMBroadcastReceiver(2771): GCM IntentService class: com.PushNotifications.GCMIntentService
10-08 09:58:48.227: V/GCMBaseIntentService(2771): Acquiring wakelock
10-08 09:58:48.237: V/GCMBaseIntentService(2771): Intent service name: GCMIntentService-DynamicSenderIds-4
10-08 09:58:48.237: D/GCMIntentService(2771): GCMIntentService.onMessage in GCMIntentService.java:101 :: WLGCMIntentService: Received a message from the GCM server
10-08 09:58:48.237: W/GCMIntentService(2771): GCMIntentService.onMessage in GCMIntentService.java:108 :: Unable to update badge while received push notification, becasue failed to parse badge number null, badge must be an integer number.
10-08 09:58:48.257: V/GCMBaseIntentService(2771): Releasing wakelock
10-08 09:58:48.257: D/GCMIntentService(2771): GCMIntentService.addToIntentQueue in GCMIntentService.java:123 :: WLGCMIntentService: App is not on foreground. Queue the intent for later re-sending when app is back on foreground.
10-08 09:58:48.277: D/push(2771): Push$1.onReceive in Push.java:91 :: Push: Queuing message for dispatch to javascript
10-08 09:58:48.277: D/GCMIntentService(2771): GCMIntentService.onUnhandled in GCMIntentService.java:164 :: WLGCMIntentService: Showing notification for unhandled Message(alert=Hoi-hoi, badge=1, sound=null, payload="alias":"myPush","custom":"data")
10-08 09:59:20.837: D/Whitelist(2771): Unlimited access to network resources
10-08 09:59:20.837: I/CordovaLog(2771): Changing log level to DEBUG(3)
10-08 09:59:20.837: D/CordovaActivity(2771): Resuming the App
10-08 09:59:20.837: D/CordovaActivity(2771): CB-3064: The errorUrl is null
10-08 09:59:20.877: W/EGL_emulation(2771): eglSurfaceAttrib not implemented
10-08 09:59:20.907: D/dalvikvm(2771): GC_FOR_ALLOC freed 810K, 27% free 4785K/6516K, paused 25ms, total 25ms
10-08 09:59:20.917: D/push(2771): Push.dispatchPending in Push.java:390 :: Dispatching to javascript Message(alert=Hoi-hoi, badge=1, sound=null, payload="alias":"myPush","custom":"data")
10-08 09:59:20.917: D/WLClient(2771): WLClient$ActivityListener.onActivityStarted in WLClient.java:1180 :: on activity started com.PushNotifications.PushNotifications
10-08 09:59:20.917: D/WLClient(2771): WLClient$ActivityListener.onActivityResumed in WLClient.java:1169 :: on activity resumed com.PushNotifications.PushNotifications . activity count = 1

我的几乎一样,除了下面的第三行 (D/push(2771): Push.dispatchPending) 丢失了。它似乎永远不会将排队的事件分派给应用程序。

我可能缺少什么?

Worklight 版本为 6.2.0.00-20140922-2259。

【问题讨论】:

在 Studio 中创建应用程序后是否重命名了 res\values\strings.xml 中的应用程序? 另外,请务必提及您的 Worklight Studio 版本和内部版本号。 我已经用版本号更新了问题。您是指strings.xml 中的app_name 吗?我没有改变它。它是从我在应用程序描述符中的显示名称中复制的(我想)。但是,它与应用程序 ID 不同。如果您的意思是 wlAppIdTitle,则默认值为“App ID”(就像推送示例应用程序一样)。 经过一些实验,我得出结论,它确实与 res/values/strings.xml 中的 app_name 和 push_notification_title 有关。我将这些设置为我的项目的原始名称(第一次迭代 10+),突然之间它可以正常工作了。但是,这意味着我被应用程序的旧内部名称所困扰。有没有办法改变它? 开发团队已经在调查类似的报告,所以我的建议是打开 PMR 以便在修复可用时接收。 【参考方案1】:

更新: 这实际上按预期工作。以下是技术说明:

res\values\strings.xml 中的app_name 值在内部用于创建 Intent 对象。因此,当应用关闭并且 GCMIntentService 收到消息时,它会创建一个动作为 <packagename>.<app_name> 的意图,并将其发送到通知服务以在通知栏中显示通知。

这是在 AndroidManifest.xml 中使用的意图名称,用于指示应用必须在点击通知时启动:

<activity android:name=".PushNotifications" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden|screenSize" android:launchMode="singleTask" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="sensor"> 
    ....
    <intent-filter> 
        <action android:name="com.PushNotifications.PushNotifications.NOTIFICATION"/>  
        <category android:name="android.intent.category.DEFAULT"/> 
    </intent-filter> 

所以现在如果app_name 更改为任何其他字符串,Intent 将在内部创建为com.PushNotifications.&lt;new_name&gt;。 但是 AndroidManifest.xml 仍然有例如com.PushNotifications.PushNotifications(在示例应用程序的情况下),因此应用程序不会启动,因为意图操作不同。

要以不同的名称显示应用程序,请按以下步骤操作:

    在 strings.xml 中,添加一个额外的 new_name_value

    在 AndroidManifest.xml 中,用新的字符串名称修改标签

    <application android:label="@string/app_new_name" android:icon="@drawable/icon"> 
    <activity android:name=".PushNotifications" android:label="@string/app_new_name"...
    

来自cmets:似乎如果在Android的res\values\strings.xml中更改应用程序名称,点击传入通知后应用程序将无法启动。

开发团队目前正在调查一份类似的报告,因此我的建议是打开一个 PMR,以便对您的 Worklight 版本也进行调查。

目前唯一可用的解决方法是将应用程序名称改回最初为应用程序创建的名称,

或者,创建一个新的应用程序,但这次使用所需的名称,而不是在应用程序创建后更改它。

【讨论】:

谢谢,Idan,我确认它有效。但是,使用 strings.xml 中的 UI 字符串(旨在包含面向用户的翻译字符串,允许使用空格和任何字符)作为意图的标识符似乎不是一个很好的设计选择。 我会确保通过这个看看是否有更好的路径 Idan,附带说明:是否有计划在不久的将来(下半年)支持 BB10 的推送消息? 这超出了我的薪酬等级。

以上是关于单击通知区域中的消息时未打开应用程序的主要内容,如果未能解决你的问题,请参考以下文章

苹果13pro浏览器消息怎么关闭

应用程序未运行时未调用本地通知的 UNUserNotificationCenterDelegate didReceive 响应

通过推送通知打开应用程序时未注册后退按钮处理程序

打开应用程序并锁定屏幕时未收到 Ionic FCM 推送通知,除非被点击

单击时未打开avaudioPlayer音频(swift4)

IBM Worklight 6.0.0.1 - 点击通知时未打开启用推送的应用程序