2016-03-03 2 views
0

Sinch In-App Instant Messaging работает отлично с Sinch Managed Push, но кроме этой одной проблемы.Sinch In-App Instant Messaging

Это синусизация - я получаю сообщения, используя GCM Listener, когда мое приложение является передним или фоновым, и я показываю уведомление, но только в том случае, когда мое приложение не работает.

Я вставил операторы отладочной логики, чтобы увидеть поток, и кажется, что push-сообщение поступает в приемник GCM и также отправляется на мою службу, но оно никогда не передается ресиверу клиенту-клиенту сообщения. Это происходит только тогда, когда приложение не работает или закрыто.

Я делаю следующее, когда приложение работает на фоне или переднем плане, и я получаю обратный вызов в onIncomingMessage, но тот же код не работает, когда приложение не работает.

Sinch Client Initialization Код:

  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.

заявления Вход от клиента Sinch:

03-03 22: 07: 44,213 17381-17381/com.ontyme Е/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]

Кто-нибудь еще сталкивался вопрос?

+0

Как вы реализуете весь sinchClient? это с подходом, который у нас есть в примерах приложений со службой? Как только приложение станет активным/запущенным, вы должны убедиться, что клиент synch он начал, когда вы его запускаете, когда вы впервые входите в систему и подключаете всех слушателей и т. Д. Из вашего кода вы не можете сказать, уже настроен ли клиент , – cjensen

+0

@cjensen Я отредактировал свое оригинальное сообщение с фрагментами кода. – ATO

+0

От вас журнал выглядит как onIncomingMessage вызывается, может быть, он сбой, потому что вы пытаетесь получить доступ к пользовательскому интерфейсу здесь? – cjensen

ответ

1

Извините, ребята, нет проблем с Sinch Managed Push. Это была небольшая опечатка на моем конце, которая вызывала эту проблему. Мой приемник в приложении не был правильно инициализирован, когда приложение не запускалось, поэтому все сообщения игнорировались в onIncomingMessage.

Managed Push работает для меня сейчас.

Смежные вопросы