Android Mobilefirst PushNotification:在服务器上使用wl_anonymousUserRealm时,应用程序在单击通知时未调用onReceive方法

Android Mobilefirst PushNotification:在服务器上使用wl_anonymousUserRealm时,应用程序在单击通知时未调用onReceive方法,android,google-cloud-messaging,ibm-mobilefirst,Android,Google Cloud Messaging,Ibm Mobilefirst,我正在开发IBM Mobilefirst原生android应用程序。我已经编写了启用推送通知的代码。我收到通知,但我这里有个问题 在应用程序启动时,我调用以下代码 final WLClient client = WLClient.getInstance(); push = client.getPush(); ResponseListener listener = new ResponseListener(ResponseListener.AUTHENTICI

我正在开发IBM Mobilefirst原生android应用程序。我已经编写了启用推送通知的代码。我收到通知,但我这里有个问题

在应用程序启动时,我调用以下代码

final WLClient client = WLClient.getInstance();
            push = client.getPush();
       ResponseListener listener = new ResponseListener(ResponseListener.AUTHENTICITY_CONNECT);    
        client.getPush().setOnReadyToSubscribeListener(listener); 
        challengeHandler = new AndroidChallengeHandler(realm);   
        client.registerChallengeHandler(challengeHandler);       
        WLRequestOptions options=new WLRequestOptions();
        options.setAppUserId("sample");
        client.connect(listener,options);
当我第一次启动应用程序时,上面的所有代码都被执行,侦听器调用下面的方法

 @Override
        public void onReadyToSubscribe() {
            WLClient.getInstance().getPush().registerEventSourceCallback(pushAliasName, "PushAdapter","PushEventSource", this);
        }
在执行此侦听器之后,我将调用subscribe方法。订阅推送成功

在服务器端,我调用这个过程来发送推送通知,它到达了电话

现在,当我的应用程序转到后台时,我收到一个通知。我单击通知,应用程序重新启动,并且从不调用已注册接口的OnReceive方法

单击通知后,它将重新启动应用程序并再次调用onReadyToSubscribe(),并且它从不调用OnReceive方法。我应该怎么做才能调用onReceive()方法,并且在单击通知时不应该重新启动应用程序(如果应用程序已经在后台?

我的服务器端安全测试如下

<customSecurityTest name="AuthSecurityTest">
        <test realm="wl_antiXSRFRealm" step="1"/>
        <test realm="wl_authenticityRealm" step="1"/>
        <test realm="wl_remoteDisableRealm" step="1"/>
         <test realm="wl_anonymousUserRealm" isInternalUserID="true" step="1"/>
        <test realm="wl_deviceAutoProvisioningRealm" step="2" isInternalDeviceID="true"/>
        </customSecurityTest> 

useridentity没有绑定到安全测试,但我将它放在apps applicationdescriptor中。因此,它从不调用连接上的质询处理程序所需的凭据


在这里,我认为这可能是MFP在7.1版本安全测试中提供的示例代码中的问题,该示例代码具有useridentity领域,但在我的情况下,我使用的不是自定义useridentity领域,而是默认的wl_anonymousUserRealm。这就是问题所在,因为当我尝试使用示例代码时,它在所有场景中都可以正常工作。但是对于wl_anonymousUserRealm,我有这个问题。

onReadyToSubscribe()方法在每次应用程序连接到服务器时(即使已经订阅推送)都会被调用,这是预期的,也是设计的

onReadyToSubscribe()是在客户端触发的回调,表示客户端和服务器之间的令牌交换已完成。这是必需的,因为中介器向应用程序发出的令牌可以更改。这使得服务器必须始终使用最新的令牌保持更新。否则,推送通知将失败,并出现无效令牌错误

当客户机连接到服务器时,他们比较令牌-客户机显示它现在拥有的令牌,服务器显示它存储的令牌。发生三种情况:

1) 在新注册中,服务器没有令牌。在这里,客户机将从中介机获得的信息传递给服务器,服务器将其持久化并发出成功消息。客户端触发onReadyToSubscribe()回调以指示推送握手已完成,客户端现在可以订阅别名或标记

2) 客户端已从中介接收到新令牌。这与服务器已有的不匹配。客户机将新令牌传递给服务器,服务器使用新令牌更新其记录并让客户机知道。onReadyToSubscribe()回调在客户端触发,表示握手成功。早期订阅记录保留

3) 如果令牌匹配,则onReadyToSubscribe()激发,表示推送握手已完成(无需更改)

onReadyToSubscribe()方法将在每次应用程序连接到服务器时调用(即使已订阅推送),这是预期的,也是设计的

onReadyToSubscribe()是在客户端触发的回调,表示客户端和服务器之间的令牌交换已完成。这是必需的,因为中介器向应用程序发出的令牌可以更改。这使得服务器必须始终使用最新的令牌保持更新。否则,推送通知将失败,并出现无效令牌错误

当客户机连接到服务器时,他们比较令牌-客户机显示它现在拥有的令牌,服务器显示它存储的令牌。发生三种情况:

1) 在新注册中,服务器没有令牌。在这里,客户机将从中介机获得的信息传递给服务器,服务器将其持久化并发出成功消息。客户端触发onReadyToSubscribe()回调以指示推送握手已完成,客户端现在可以订阅别名或标记

2) 客户端已从中介接收到新令牌。这与服务器已有的不匹配。客户机将新令牌传递给服务器,服务器使用新令牌更新其记录并让客户机知道。onReadyToSubscribe()回调在客户端触发,表示握手成功。早期订阅记录保留


3) 如果令牌匹配,则onReadyToSubscribe()将触发,表示推送握手已完成(无需更改)

感谢Vivin的建议。 这里是MFP在7.1版本安全测试中提供的示例代码中的问题,该代码具有useridentity领域,但在我的示例中,我没有使用自定义useridentity领域,而是使用默认的wl_anonymousUserRealm

实际问题是wl_anonymousUserRealm每次都会生成一个新的随机用户ID。因此,每当我的应用程序被重新启动时,我的用户ID就会被更改,并且我不会在接收时获得推送,因为它认为有其他用户登录到该应用程序

现在,因为我无法更改wl_anonymousUserRealm,所以我使用deviceid发送推送。请检查下面的链接(适配器代码如下)。

检查下面链接中的示例客户端代码。
谢谢维文的建议。 这里是MFP在7.1版本安全测试中提供的示例代码中的问题,该代码具有useridentity领域,但在我的示例中,我没有使用自定义useridentity领域,而是使用默认的wl_anonymousUserRealm

实际问题是wl_anonymousUserRealm每次都会生成一个新的随机用户ID。因此,每当我的应用程序被重新启动时,我的用户ID就会被更改,并且我不会在接收时得到推送,因为它认为