【发布时间】:2018-01-15 12:12:54
【问题描述】:
我正在开发的应用程序有两个使用 GCM 推送通知的服务(Pushwoosh 和 Helpshift)。我正在尝试实现 Pushwoosh 文档中显示的功能,以允许两个系统都运行; https://docs.pushwoosh.com/v1.0/docs/gcm-integration-legacy。然而,我的 Android 知识让我无法了解我如何将收到的捆绑包实际路由到相关处理程序。该项目是在 Unity 中完成的,但这属于 Android 领域。
这是我创建的GcmListenerService 类,与示例非常相似;
import android.os.Bundle;
import android.content.Intent;
import android.util.Log;
import com.google.android.gms.gcm.*;
import android.content.ComponentName;
public class GCMListenerRouterService extends GcmListenerService
{
public GCMListenerRouterService()
{
super();
Log.i("Unity", "GCMListener - Constuctor");
}
private void dispatchMessage(String component, Bundle data)
{
Log.i("Unity", "GCMListener - dispatchMessage: " + (data != null ? data.toString() : "<null>") + " component: " + component);
Intent intent = new Intent();
intent.putExtras(data);
intent.setAction("com.google.android.c2dm.intent.RECEIVE");
intent.setComponent(new ComponentName(getPackageName(), component));
GcmReceiver.startWakefulService(getApplicationContext(), intent);
}
@Override
public void onMessageReceived(String from, Bundle data)
{
Log.i("Unity", "GCMListener - onMessageReceived: " + (data != null ? data.toString() : "<null>") + " from: " + from);
// Base GCM listener service removes this extra before calling onMessageReceived
// Need to set it again to pass intent to another service
//data.putString("from", from);
//if (TextUtils.equals(from, getString(R.string.PUSHWOOSH_PROJECT_ID)))
//{
// dispatchMessage(PushGcmIntentService.class.getName(), data);
//}
//else if (TextUtils.equals(from, getString(R.string.PRIVATE_PROJECT_ID)))
//{
// dispatchMessage(PrivateGCMListenerService.class.getName(), data);
//}
}
}
我能够确认推送通知来自正确的消息服务,并且我可以确定推送通知是来自一个插件还是另一个插件。如何将这些捆绑对象路由到正确的处理程序?我看不懂下面的示例代码;
if (TextUtils.equals(from, getString(R.string.PUSHWOOSH_PROJECT_ID)))
{
dispatchMessage(PushGcmIntentService.class.getName(), data);
}
else if (TextUtils.equals(from, getString(R.string.PRIVATE_PROJECT_ID)))
{
dispatchMessage(PrivateGCMListenerService.class.getName(), data);
}
我很欣赏这是示例代码,但我在 Android 文档中找不到与 dispatchMessage 具有相同签名的任何函数。我是否需要为所需的每种不同类型的消息创建意图服务?
我知道对于 Helpshift,我需要调用带有签名 handlePush(Context context, Bundle data) 的函数,但我不确定 Context 对象是什么。对于 Pushwoosh,我不确定处理程序是什么。当我谈论两个特定的服务时,我假设此设置是接收和处理消息的标准方法。
【问题讨论】:
标签: java android push-notification google-cloud-messaging gcmlistenerservice