使用 Worklight 在 Android 上启用推送通知

Posted

技术标签:

【中文标题】使用 Worklight 在 Android 上启用推送通知【英文标题】:Enabling push notifications on Android using Worklight 【发布时间】:2014-07-21 18:38:02 【问题描述】:

我在获取推送通知以在 android 上运行时遇到了一些问题。我已经使用生成的密钥将 pushSender 添加到 application-descriptor.xml 的 android 部分(我已经删除了我们的密钥值)。

<android version="1.0.5">
    <worklightSettings include="true"/>
    <pushSender key="our key" senderId="our sender"/>
    <security>
        <encryptWebResources enabled="true"/>
        <testWebResourcesChecksum enabled="true" ignoreFileExtensions="png, jpg, jpeg, gif, mp4, mp3"/>
        <publicSigningKey>our key</publicSigningKey>
    </security>
</android>

每次启动应用程序时,我都会收到消息“注册推送通知失败。应用程序将无法接收通知。

我想了一会儿,可能是因为我在我们的内部网络上测试,它需要访问外部世界,但即使它可以到达世界,我仍然收到消息。我尝试将securityTest参数添加到android标签,但没有任何区别。

在 authenticationconfig.xml 文件中,我在安全测试部分添加了一个移动安全测试:

    <mobileSecurityTest name="PushApp-securityTest">
        <testDeviceId provisioningType="none"/>
        <testUser realm="PushAppRealm"/>
    </mobileSecurityTest>

我的领域是这样设置的:

    <realm name="PushAppRealm" loginModule="PushAppLoginModule">
        <className>com.worklight.core.auth.ext.PersistentCookieAuthenticator</className>
    </realm>    

而登录模块是这样的:

    <loginModule name="PushAppLoginModule">
        <className>com.worklight.core.auth.ext.NonValidatingLoginModule</className>
    </loginModule>  

我真的不知道为什么它无法注册。我们正在运行 Worklight 5.0.6.2。

【问题讨论】:

查看我在以下问题中给出的设置。虽然使用 6.2 进行了测试,但对于 5.0.6.2 也是如此:***.com/questions/24818382/… @idan-adar 为此,您是否必须使用某种实际登录(即输入用户 ID/密码)?我们希望允许应用在没有登录的情况下接收推送通知,我认为 PersistenCookieAuthenticator 会允许这样做。我已经完成了设置 GCM 密钥的过程。我没有意识到我们需要使用浏览器密钥而不是服务器密钥,但即使使用浏览器密钥,我仍然会收到注册失败消息。 您可以显式注册设备,但一个好的公民(应用程序)会先与用户核实。 ... 我们不打算盲目地为推送通知设置用户。我们将检查他们是否已注册并给他们一个弹出窗口询问他们是否愿意接收通知。我输入的密钥可能有问题吗?我的印象是 PersistentCookieAuthenticator 会创建一个设备类型 ID 作为要注册的“用户”,因此不需要显式登录。我只是想知道关键,好像我从应用程序描述符中注释掉了 pushSender 但不删除任何推送通知的代码,应用程序启动正常。 您是否为 senderID 使用了正确的值?我收到了相同的错误消息,只是发现我使用的是“项目 ID”而不是“项目编号”。您需要在 senderID 字段中使用“项目编号”。 【参考方案1】:

来自cmets:

为此,您是否必须使用某种实际登录名(即 输入用户 ID/密码)?

如果您使用基于事件源的通知,则可以 - 需要登录。 你可以在这里阅读解释:receive GCM push without WLClient::connect()

听起来,对于您的这种特殊需求,您可以使用广播或基于标签的通知。您可以在this user documentation topic 中阅读有关这些类型的更多信息。该主题还提供了示例实现以供跟进。

【讨论】:

以上是关于使用 Worklight 在 Android 上启用推送通知的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight 6.0 - 无法在 avd 上使用适用于 android 环境的 dojo 工具包运行示例混合 Worklight 应用程序?

Worklight 6.0 - 如何使用 dojo 1.9 和 worklight 6.0 为 android 2.2 创建和部署 dojo 启用 worklight 混合应用程序

Worklight 6.2 Android 应用程序未在推送通知上启动

Worklight 6.1 - Android 推送通知到达时没有声音

如何为android应用程序制作worklight服务器

android binder深入分析之承上启下的native层