【问题标题】:Generic Android notification handler通用 Android 通知处理程序
【发布时间】:2018-02-21 12:13:46
【问题描述】:

我正在我的 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 是在 Firebase 控制台上注册 Android 应用时的 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 决定并在 onesignal 上初始化设备并发送推送通知。我认为我不需要在 android 应用上设置 OneSignal。是对的吗? 如果我从 android 应用程序中删除 OneSignal。我应该使用什么来处理通过的通知。

背后的原因是,目前我们正在使用 OneSignal,并且将来如果我们更改提供者,我们不必在应用端做任何事情。

请问有什么通用的方法来处理android上的通知。

感谢您的帮助。 回复

【问题讨论】:

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


    【解决方案1】:

    是的,您不需要在客户端上使用 onesignal。你可以删除它。 Onesignal文件说 - 实现与 GCM/FCM (Google)、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/FCM GCM Docs

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

    【讨论】:

    • 这就是我需要澄清的。完美的乌代。将实施 FCM,这是更好的选择。
    • 是的,@BRDroid 现在有了 FCM,您可以做得更好。发送到频道(您可以创建)或设备组。即使使用仪表板,您也可以获得其他分析。是的,您可以在客户端上实施 FCM,无论您使用什么服务(基于 GCM/FCM),您的应用程序都可以正常工作。希望我已经回答了您的询问。如果觉得有帮助,请点赞
    • 关于渠道如何处理或如何运作?是Android应该做的事情还是firebase或API或OneSignal。我不太明白 Channels 是如何工作的。这是题外话,但您对此的理解将非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多