【问题标题】:Send notification from the server to user segment who installed the app从服务器向安装应用程序的用户群发送通知
【发布时间】:2017-05-10 20:15:57
【问题描述】:

在 Firebase 控制台中,我看到了使用应用“com.example”(其中 com.example 是应用名称)向用户细分发送通知的选项。

如图所示:

但是如何使用 FCM REST API 从服务器端进行操作:

https://fcm.googleapis.com/fcm/send

【问题讨论】:

  • 你找到方法了吗?

标签: android firebase firebase-cloud-messaging


【解决方案1】:

我找到了解决方案 您可以为您的应用订阅特定主题,例如您的 FirebaseInstanceIdService 类中的应用包名称,以便您可以发送数据消息,如

 {
  "to" : "/topics/your_package_name",
  "data" : {
    "key1" : "value 1",
    "key2": "value 2",
   ...
  }
}

这是在 FirebaseInstanceIdService 类中为您的应用订阅主题的代码

     public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService
    {
        private final String TAG="your_tag";
        @Override
        public void onTokenRefresh() {


        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        FirebaseMessaging.getInstance().subscribeToTopic("your_app_package_name");
        }
}

它对我有用

【讨论】:

    【解决方案2】:

    根据操作系统订阅您的用户

    主题:android 用户的“android”

    主题:iOS 用户的“iOS”

    (或任何你想要的名字)

    然后发送到那个主题...

    【讨论】:

      【解决方案3】:

      不幸的是,它是not possible to send messages to User Segments using the FCM REST API

      作为替代方案,您必须使用send messages to multiple devices 的其他方法,例如简单地使用registration_ids 参数和主题消息传递(我认为这对您的用例来说是最可取的)。

      这里是有关如何发送此using PostmancURL 的示例。

      【讨论】:

      • 我不能让我的会员订阅主题。安装该应用程序的人将开始收到通知 -
      • 我明白了@SanthoshYedidi - 你应该继续使用registration_ids。如果您有超过一千个用户,则必须发出批量请求,每个请求最多有 1000 个注册令牌。
      • 很老的答案,但供将来参考:无需用户交互即可完成主题订阅。只需通过 http 向 https://iid.googleapis.com/iid/v1/[REGISTRATIONTOKEN]/rel/topics/[TOPIC] 发送 POST(使用您的服务器密钥授权)。
      • @Brian 这篇文章是关于在 Firebase 中使用本机用户细分的。但是,如果您知道实际的细分和必须订阅它的用户,请确保使用主题是一种解决方法。
      • @AL.:我在回复 santhosh 说他不能要求他的成员订阅主题,我认为这意味着 Santhosh 认为主题订阅必须在客户端完成。
      【解决方案4】:

      使用以下参数对https://fcm.googleapis.com/fcm/send进行后调用:-

      标题:-

      Content-Type--application/json

      Authorization--key={你的服务器密钥}

      正文:-

      {
          "data": {
              "my_custom_key" : "my_custom_value",
      
              "message" : "notification message"
           },
          "registration_ids": ["device_token1,device_token2,.........."]
      }
      

      编辑:-

      基本上你需要做的是,每当你需要发送通知时,你必须从你的服务器端调用这个 POST 方法,你的应用程序会自动在 OnMessageReceived 中得到一个调用。你可以这样处理:-

       @Override
          public void onMessageReceived(RemoteMessage remoteMessage) {
              super.onMessageReceived(remoteMessage);
              // TODO: Handle FCM messages here.
              // If the application is in the foreground handle both data and notification messages here.
              // Also if you intend on generating your own notifications as a result of a received FCM
              // message, here is where that should be initiated.
              Log.d(TAG, "From: " + remoteMessage.getFrom());
      
              Map<String, String> data=remoteMessage.getData();
              Log.d(TAG, "From: " + data.toString());
              String value=data.get("my_custom_key");
              Log.d(TAG, "From: " + value);
              String msg=data.get("message");
              Log.d(TAG, "From: " + msg);
      
              sendNotification(msg,value,remoteMessage.getSentTime());
          }
      

      【讨论】:

      • "registration_ids": ["device_token1,device_token2,.........."]:我想发送给任何安装了该应用程序的用户。请参阅更新的问题。从使用用户段选项的firebase控制台我可以在不需要设备令牌的情况下发送。因为我的通知是通用的
      • 当用户安装您的应用程序时,会生成一个刷新令牌。将此令牌发送到您的服务器,这是设备令牌
      • 您可以将令牌保存在您的服务器中
      • 从 Firebase 控制台,您只能在应用处于前台时向用户发送通知。要在后台或应用关闭时发送通知,您需要有一个 post call
      • 是的,这就是 android 部分。但我正在寻找如何从服务器端发送到用户段。我已经实现了前台部分。正在收到通知。但直到现在我使用firebase控制台。现在我想转移到我想发送通知的服务器
      【解决方案5】:

      您实际上需要向主题发送消息..所有订阅主题的成员都会收到您的消息..

      只需查看链接..

      https://developers.google.com/cloud-messaging/topic-messaging

      【讨论】:

      • 我不能让我的会员订阅主题。安装该应用程序的人将开始收到通知
      • 询问 FCM 并回复 GCM。不相关的答案
      • @SanthoshYedidi 在用户安装应用程序时调用订阅主题方法,以便他们自动订阅主题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      相关资源
      最近更新 更多