更改身份验证的安全测试时,Android 设备未收到推送通知
Push notifications are not received in an Android device when changing the security test for the authentication
我正在开发一个混合应用程序,并且正在为 Android 设备实施 MobileFirst Platform "Getting Started" 页面示例代码中提供的推送通知程序。如教程中所述,设备和用户订阅推送通知服务只能在身份验证后进行。在 authenticationConfig.xml 文件中使用以下安全测试时,它工作正常:
案例 1:
<securityTests>
<mobileSecurityTest name="PushApplication-strong-mobile-securityTest">
<testUser realm="PushAppRealm"/>
<testDeviceId provisioningType="none"/>
</mobileSecurityTest>
</securityTests>
<realms>
<realm loginModule="PushAppLoginModule" name="PushAppRealm">
<className>com.worklight.core.auth.ext.FormBasedAuthenticator</className>
</realm>
</realms>
<loginModules>
<loginModule name="PushAppLoginModule">
<className>com.worklight.core.auth.ext.NonValidatingLoginModule</className>
</loginModule>
</loginModules>
然而,应用程序已经在使用 SingleStepAuthRealm 进行身份验证,因此在 authenticationConfig.xml 文件中使用以下安全测试时,我们面临一个问题:
<securityTests>
<mobileSecurityTest name="PushApplication-strong-mobile-securityTest">
<testUser realm="SingleStepAuthRealm"/>
<testDeviceId provisioningType="none"/>
</mobileSecurityTest>
</securityTests>
<realms>
<realm loginModule="AuthLoginModule" name="SingleStepAuthRealm">
<className>com.worklight.integration.auth.AdapterAuthenticator</className>
<parameter name="login-function" value="SingleStepAuthAdapter.onAuthRequired"/>
<parameter name="logout-function" value="SingleStepAuthAdapter.onLogout"/>
</realm>
</realms>
<loginModules>
<loginModule name="AuthLoginModule">
<className>com.worklight.core.auth.ext.NonValidatingLoginModule</className>
</loginModule>
</loginModules>
在这种情况下,订阅是正确完成的。我们可以在服务器中看到用户和设备已订阅。甚至,当我们在 PushAdapter 中调用 submitNotification(userId, notificationText) 时,对 WL.Server.notifyAllDevices(userSubscription, notification) 的调用也成功完成,结果是通知已发送给用户。此外,如果我们调用 WL.Server.getUserNotificationSubscription 和 getDeviceSubscriptions() 方法,则会收到有关订阅用户和设备的正确信息。
我们面临的问题是订阅的设备永远不会收到推送通知。尽管没有发生错误,但该消息永远不会发送到推送通知调解器。
authenticationConfig.xml 中用于在推送通知之前对用户进行身份验证的安全测试是否有所不同?
非常感谢
最后,我再次从环境节点添加了安全测试,它可以很好地接收推送通知。使用的领域不会影响推送通知的接收。
我正在开发一个混合应用程序,并且正在为 Android 设备实施 MobileFirst Platform "Getting Started" 页面示例代码中提供的推送通知程序。如教程中所述,设备和用户订阅推送通知服务只能在身份验证后进行。在 authenticationConfig.xml 文件中使用以下安全测试时,它工作正常:
案例 1:
<securityTests>
<mobileSecurityTest name="PushApplication-strong-mobile-securityTest">
<testUser realm="PushAppRealm"/>
<testDeviceId provisioningType="none"/>
</mobileSecurityTest>
</securityTests>
<realms>
<realm loginModule="PushAppLoginModule" name="PushAppRealm">
<className>com.worklight.core.auth.ext.FormBasedAuthenticator</className>
</realm>
</realms>
<loginModules>
<loginModule name="PushAppLoginModule">
<className>com.worklight.core.auth.ext.NonValidatingLoginModule</className>
</loginModule>
</loginModules>
然而,应用程序已经在使用 SingleStepAuthRealm 进行身份验证,因此在 authenticationConfig.xml 文件中使用以下安全测试时,我们面临一个问题:
<securityTests>
<mobileSecurityTest name="PushApplication-strong-mobile-securityTest">
<testUser realm="SingleStepAuthRealm"/>
<testDeviceId provisioningType="none"/>
</mobileSecurityTest>
</securityTests>
<realms>
<realm loginModule="AuthLoginModule" name="SingleStepAuthRealm">
<className>com.worklight.integration.auth.AdapterAuthenticator</className>
<parameter name="login-function" value="SingleStepAuthAdapter.onAuthRequired"/>
<parameter name="logout-function" value="SingleStepAuthAdapter.onLogout"/>
</realm>
</realms>
<loginModules>
<loginModule name="AuthLoginModule">
<className>com.worklight.core.auth.ext.NonValidatingLoginModule</className>
</loginModule>
</loginModules>
在这种情况下,订阅是正确完成的。我们可以在服务器中看到用户和设备已订阅。甚至,当我们在 PushAdapter 中调用 submitNotification(userId, notificationText) 时,对 WL.Server.notifyAllDevices(userSubscription, notification) 的调用也成功完成,结果是通知已发送给用户。此外,如果我们调用 WL.Server.getUserNotificationSubscription 和 getDeviceSubscriptions() 方法,则会收到有关订阅用户和设备的正确信息。
我们面临的问题是订阅的设备永远不会收到推送通知。尽管没有发生错误,但该消息永远不会发送到推送通知调解器。
authenticationConfig.xml 中用于在推送通知之前对用户进行身份验证的安全测试是否有所不同?
非常感谢
最后,我再次从环境节点添加了安全测试,它可以很好地接收推送通知。使用的领域不会影响推送通知的接收。