Sinch应用内即时消息传递与Sinch托管推送完全吻合,但除了这一个问题。Sinch应用内即时消息传递
这是sistuation - 当我的应用程序是前台或背景,并且我显示通知但我的应用程序未运行时使用GCM侦听器时收到消息。
我插入了调试日志语句以查看流程,看起来推送消息到达GCM侦听器并发送到我的服务,但它永远不会中继到消息客户端侦听器。这只发生在应用程序未运行或关闭时。
当应用程序运行后台或前台时,我正在执行以下操作,并且在onIncomingMessage中获取回调,但在应用程序未运行时相同的代码无法运行。
Sinch客户端初始化代码:
public void startSinchClient(String username) {
try {
sinchClient = Sinch.getSinchClientBuilder().context(this).userId(username).applicationKey(ApplicationConstants.SINCH_SANDBOX_API_KEY)
.applicationSecret(ApplicationConstants.SINCH_SANDBOX_API_SECRET).environmentHost(ApplicationConstants.SINCH_SANDBOX_API_URL).build();
sinchClient.setSupportMessaging(true);
sinchClient.setSupportManagedPush(true);
sinchClient.checkManifest();
sinchClient.addSinchClientListener(this);
if (messageClientListener == null) {
messageClientListener = new MyMessageClientListener();
}
sinchClient.getMessageClient().addMessageClientListener(messageClientListener);
Log.e("SinchMessageService", "Login successful.");
} catch (MissingGCMException missingGCM) {
Log.e("SinchMessageService", missingGCM.getMessage());
}
}
OnBind代码
if (!isSinchClientStarted()) {
startSinchClient(currentUserId);
sinchClient.start();
}
在RelayRemotePushNotificationCode:
public NotificationResult relayRemotePushNotificationPayload(Intent intent) {
if (currentUserId.isEmpty()) {
Log.e("SinchMessageService", "UserID not available.Please login again.");
return null;
} else if (!isSinchClientStarted()) {
startSinchClient(currentUserId);
sinchClient.start();
}
Log.d("SinchService", "relayRemotePushNotificationPayload");
NotificationResult notificationResult = sinchClient.relayRemotePushNotificationPayload(intent);
if (notificationResult.isMessage()) {
sinchClient.startListeningOnActiveConnection();
}
return notificationResult;
}
在MessageClientListener:
public void onIncomingMessage(MessageClient client, final Message message) {
if (message.getRecipientIds().get(0).equals(ApplicationConstants.userInfo.getEmail())) {
sinchClient.stopListeningOnActiveConnection();
....
上述代码适用于所有场景。我的意思是当应用程序在前台以及后台运行时。只有当我杀了应用程序永远不会得到onIncomingMessage回调。 )mUserAgent.startBroadcastListener(
03-03 22:从客户端Sinch
登录的语句:
03-03 22:07:44.213 17381-17381/com.ontyme E/SinchClient: 07:45.271 17381-17381/com.ontyme E/MessageClient:onIncomingMessage:NativeMessage [ID = 2059913a-27ac-4105-a797-764f09af66d2,nativeAddress = -1321533856]
任何人所面临的问题?
你是如何实现整个sinchClient的?它是否与我们在具有服务的示例应用程序中使用的方法一致?只要应用程序变为活动/启动状态,您应该确保刚刚启动的sinch客户端,就像您第一次登录并挂接所有侦听器时启动的那样。从代码aboeve中,我无法确定您是否已经设置了客户端。 – cjensen
@cjensen我用代码片段编辑了我原来的帖子。 – ATO
从你的日志看起来像onIncomingMessage被调用,它可能是因为你试图访问UI在这里崩溃? – cjensen