2016-03-03 62 views
0

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]

任何人所面临的问题?

+0

你是如何实现整个sinchClient的?它是否与我们在具有服务的示例应用程序中使用的方法一致?只要应用程序变为活动/启动状态,您应该确保刚刚启动的sinch客户端,就像您第一次登录并挂接所有侦听器时启动的那样。从代码aboeve中,我无法确定您是否已经设置了客户端。 – cjensen

+0

@cjensen我用代码片段编辑了我原来的帖子。 – ATO

+0

从你的日志看起来像onIncomingMessage被调用,它可能是因为你试图访问UI在这里崩溃? – cjensen

回答

1

对不起,伙计们,Sinch托管推送没有问题。这是我最后造成这个问题的小错字。当应用程序未运行时,应用程序中的receipentid未正确初始化,这就是为什么所有消息都在onIncomingMessage中被忽略的原因。

托管推送现在可以无缝工作。