通用Android通知处理程序

时间:2018-02-21 12:13:46

标签: android push-notification google-cloud-messaging onesignal android-push-notification

我正在Android应用程序中实现推送通知。我们正在使用OneSignal发送推送通知。我们有一个API可以跟踪所有设备和API决定哪些 设备发送推送通知。

API请求OneSignal和OneSignal向设备发送通知。

从Android我使用以下代码获取设备令牌,该代码保存在API上,并使用它发送推送通知。

public String getGCMTokenForPushNotification(){
    String token = "";
    try {
        InstanceID instanceID = InstanceID.getInstance(this);

        token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
                GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
        Log.i(TAG, "GCM Registration Token: " + token);
        return token;
    }catch (Exception e) {
        Log.d(TAG, "Failed to complete token refresh", e);
    }
    return token;
}

R.string.gcm_defaultSenderId是在Android应用程序注册时firebase架构上的SENDER ID。

截至目前,我已使用

在Android应用程序上设置了OneSignal
 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        OneSignal.startInit(this)
                .setNotificationOpenedHandler(new ExampleNotificationOpenedHandler())
                .init();
        }

https://documentation.onesignal.com/docs/android-sdk-setup

如果API正在决定并在信号上初始化设备并发送推送通知。我不认为我会在Android应用程序上要求OneSignal设置。是对的吗? 如果我从Android应用程序中删除OneSignal。我应该用什么来处理通知。

背后的原因是,截至目前我们正在使用OneSignal,将来如果我们更改提供商,我们就不必在应用程序端做任何事情。

是否有任何geniric方法来处理Android上的通知。

感谢您的帮助。 [R

1 个答案:

答案 0 :(得分:5)

是的,您不需要在客户端使用信号。你可以删除它。 Onesignal文件说 - 为GCM / FCM(谷歌),APNS(Apple)

实施可靠的接口

所以基本上它使用GCM / FCM,理想情况下,如果你没有复杂的场景,你可以直接使用GCM / FCM。

回答您的问题,您可以使用以下内容接收推送通知,因为它最终来自Google云端

GCM docs to receive notification message仔细阅读文档,你会得到它。

以下方法可为您提供信息

@Override
public void onMessageReceived(String from, Bundle data) {
    String message = data.getString("message");
    Log.d(TAG, "From: " + from);
    Log.d(TAG, "Message: " + message);

    if (from.startsWith("/topics/")) {
        // message received from some topic.
    } else {
        // normal downstream message.
    }

    // ...
}

如果您希望直接进行GCM Docs

,也可以使用以下文档实施GCM / FCM

但您现在应该使用FCM,因为GCM现已弃用。所以,你走了 FCM docs