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]
Кто-нибудь еще сталкивался вопрос?
Как вы реализуете весь sinchClient? это с подходом, который у нас есть в примерах приложений со службой? Как только приложение станет активным/запущенным, вы должны убедиться, что клиент synch он начал, когда вы его запускаете, когда вы впервые входите в систему и подключаете всех слушателей и т. Д. Из вашего кода вы не можете сказать, уже настроен ли клиент , – cjensen
@cjensen Я отредактировал свое оригинальное сообщение с фрагментами кода. – ATO
От вас журнал выглядит как onIncomingMessage вызывается, может быть, он сбой, потому что вы пытаетесь получить доступ к пользовательскому интерфейсу здесь? – cjensen