Sinch In-App即时消息

时间:2016-03-03 04:45:47

标签: android sinch

Sinch In-App Instant Messaging与Sinch Managed Push完美搭配,但这一问题除外。

这是sistuation - 当我的应用程序是前台或后台时我使用GCM Listener接收消息并且我显示通知但是我的应用程序未运行时除外。

我插入调试日志语句以查看流程,似乎推送消息到达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 Code

            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回调。

来自Sinch Client的日志语句:

03-03 22:07:44.213 17381-17381 / com.ontyme E / SinchClient:mUserAgent.startBroadcastListener()

03-03 22:07:45.271 17381-17381 / com.ontyme E / MessageClient:onIncomingMessage:NativeMessage [id = 2059913a-27ac-4105-a797-764f09af66d2,nativeAddress = -1321533856]

其他人是否遇到过这个问题?

1 个答案:

答案 0 :(得分:1)

很抱歉,Sinch Managed Push没有任何问题。这是我最后的小错字导致了这个问题。当应用程序未运行时,我在app中的receipentid没有正确初始化,这就是为什么在onIncomingMessage中忽略所有消息的原因。

Managed Push现在可以无缝地为我工作。