Причина, по которой вы не можете заставить работать как Carnival, так и Smooch, заключается в том, что обе библиотеки регистрируют свои собственные GcmListenerService, а в Android первый GcmListenerService, определенный в вашем манифесте, будет получать все сообщения GCM.
У меня есть решение для вас, основанное главным образом на следующей статье SO: Несколько прослушивателей GCM с использованием GcmListenerService
Лучшим решением было бы иметь только одну реализацию GcmListenerService и обрабатывать сообщения для обоих.
Чтобы указать свой собственный GcmListenerService, следуйте инструкциям из Документация по облачным сообщениям Google. а>.
Smooch предоставляет инструменты, необходимые для отключения их внутренней регистрации GCM, когда у вас есть собственная.
Для этого просто вызовите setGoogleCloudMessagingAutoRegistrationEnabled
при инициализации Smooch:
Settings settings = new Settings("<your_app_token>");
settings.setGoogleCloudMessagingAutoRegistrationEnabled(false);
Smooch.init(this, settings);
А в своем GcmRegistrationIntentService
позвоните Smooch.setGoogleCloudMessagingToken(token);
со своим токеном.
Как только это будет завершено, вы сможете передать сообщение GCM любому получателю GCM, который вам нужен.
@Override
public void onMessageReceived(String from, Bundle data) {
final String smoochNotification = data.getString("smoochNotification");
if (smoochNotification != null && smoochNotification.equals("true")) {
data.putString("from", from);
Intent intent = new Intent();
intent.putExtras(data);
intent.setAction("com.google.android.c2dm.intent.RECEIVE");
intent.setComponent(new ComponentName(getPackageName(), "io.smooch.core.GcmService"));
GcmReceiver.startWakefulService(getApplicationContext(), intent);
}
}
ИЗМЕНИТЬ
Начиная с Smooch версии 3.2.0, теперь вы можете более легко активировать уведомление Smooch, вызвав GcmService.triggerSmoochGcm
в вашем onMessageReceived.
@Override
public void onMessageReceived(String from, Bundle data) {
final String smoochNotification = data.getString("smoochNotification");
if (smoochNotification != null && smoochNotification.equals("true")) {
GcmService.triggerSmoochGcm(data, this);
}
}
person
Julian Garritano
schedule
11.04.2016