无法扩展 GCMIntentService 以修改原生 Android 客户端的通知视图 [Worklight 7.0 + Android]
Posted
技术标签:
【中文标题】无法扩展 GCMIntentService 以修改原生 Android 客户端的通知视图 [Worklight 7.0 + Android]【英文标题】:Cannot extend GCMIntentService to modify notification view for native Android client [ Worklight 7.0 + Android ] 【发布时间】:2016-02-10 19:47:27 【问题描述】:我需要修改 android 推送通知的视图。 worklight 将收到的通知实现到
com.worklight.wlclient.push.GCMIntentService
如果 Manifest 使用其他类而不是准备的类,则将原生 Android 与 Worklight 服务器集成并处理通信的库 worklight-android.jar 会触发异常
com.worklight.wlclient.push.GCMIntentService
需要修改通知视图的样子:
Modified notification view
并尝试扩展它并将新引用放入清单中,如下所示:
<service android:name="com.xxx.xxxx.xxxxxxx.ClassExtendedGCMIntentService" />
例外情况如下:
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: java.lang.RuntimeException: Your manifest is not allowed to work with push. Android Manifest Error: Missing intent service in manifest: com.worklight.wlclient.push.GCMIntentService
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at com.worklight.wlclient.api.WLPush.<init>(WLPush.java:185)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at com.worklight.wlclient.api.WLClient.getPush(WLClient.java:995)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at com.xxx.xxxxx.Splash.onCreate(Splash.java:92)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at android.app.Activity.performCreate(Activity.java:6500)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at android.app.ActivityThread.access$1000(ActivityThread.java:198)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at android.os.Looper.loop(Looper.java:145)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6837)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at java.lang.reflect.Method.invoke(Native Method)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
02-10 20:30:09.047 16652-16652/com.xxx.xxxxx W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
【问题讨论】:
你现在能做到吗?我面临同样的问题。你能帮忙吗? 【参考方案1】:此时,对于合并了 Worklight/MobileFirst Android SDK 的纯原生 Android 应用程序,您的要求不可用。您可以提交增强请求 (RFE) here。
在混合应用程序的情况下,您的要求可以通过扩展 GCMIntentService 类来实现。更多详细信息可以在以下链接中找到:
Inbox Style notifications with IBM Worklight
Multi Line Android Push Notifications with IBM MobileFirst
【讨论】:
这不是问题,扩展 GCMIntentService 是解决方案,但是如何在使用 Worklight Native API 的 Native 应用程序中做到这一点?您提供的解决方案适用于混合应用程序。 编辑了解决本机 Worklight API 的答案 让我重新表述一下,有 2 种类型的应用程序要与 Worklight 服务器集成并使用它的 API。 1- 从 Worklight 工作室生成的混合应用程序。 2-您正常生成的纯本机应用程序,没有从 Worklight Studio 自动生成[它是纯本机的,不是 WebViews 或核心 Cordova]。这 2 种类型有 2 种不同的 PushNotification 实现。 对。 1) 要覆盖 Worklight Studio 生成的混合应用程序中的默认推送行为,如博客中所述覆盖 GCMIntentService 类将有所帮助。 2) 目前没有选项可以对包含 Worklight/MobileFirst 本机 Android SDK(不是 webviews 或核心 Cordova)的纯本机 Android 应用程序执行相同操作。您可以提交增强请求 (RFE)以上是关于无法扩展 GCMIntentService 以修改原生 Android 客户端的通知视图 [Worklight 7.0 + Android]的主要内容,如果未能解决你的问题,请参考以下文章
在 gcmintentservice.java 中使用 onresume 函数
如何将 C2DM 消息显示为推送通知(在 GCMIntentService 类的 onMessage() 函数中接收)