【问题标题】:Firebase Notification - send to user segment vs send to topic differenceFirebase 通知 - 发送到用户段与发送到主题差异
【发布时间】:2016-11-29 00:24:59
【问题描述】:

我被分配了一项使用 Firebase 来实现推送通知的任务,但我对此有点陌生。

查看文档:

https://firebase.google.com/docs/notifications/android/console-audience

我不知道在什么情况下应该使用send to user segmentsend to a topic

谁能给我一些例子,什么时候使用其中一种并指出区别?提前谢谢:)

【问题讨论】:

    标签: firebase push-notification firebase-cloud-messaging firebase-notifications


    【解决方案1】:

    用户细分

    • 您只能通过Firebase Console 向用户细分发送通知。 (见here)。
    • 仅限于特定目标(来自您链接的docs):

      选择消息目标。该对话框会显示更多选项,以根据您选择App/App VersionDevice Language还是Users in Audience来优化目标。 p>

    • 正如您在链接的doc 中已经提到的:

      您可以定位预定义的用户细分或在 Firebase Analytics 中创建的自定义audiences

    主题

    • 不一定需要令牌/设备管理。
    • 订阅者数量不限。
    • 可以使用 FCM API 发送到主题。
    • 可以通过客户端应用轻松订阅/取消订阅。

    恕我直言,如果您希望事情快速简单,请使用主题消息传递。

    【讨论】:

    • 我总是使用主题消息传递,因为它可以节省大量时间。用户登录后,我立即为用户订阅他的用户 ID,并且每当我必须从服务器向该用户发送推送通知时,我只需发布消息他的用户 ID。我希望这是完美的 rt?
    • @Praveena 主题的使用是一个偏好问题。我没有看到您的用例有任何问题。所以我觉得没问题。请注意,主题是 public 并且任何其他令牌都可以订阅它。
    • 其实这是topics are public and that any other tokens may subscribe to it. 非常重要,我错过了。非常感谢
    【解决方案2】:

    使用用户细分

    • 通常将推送通知发送到特定且有限的一组设备。
    • 消息传递几乎是即时的(根据我的经验)。此外,我没有观察到像之前的 GCM 那样的节流。

    使用主题

    • 主题或发布/订阅机制用于相对较大的受众并且信息类型是公开的。例如天气和新闻。
    • 主题有延迟(消息传递可能会受到限制)

    【讨论】:

      【解决方案3】:

      首先,您必须为要向其发送通知的每个设备保存令牌,我已将它们保存在名为“FCM_TOKEN”的表中,然后检索令牌(我正在使用 PDO)并使用 while 循环发送它们像这样:

      while($row=$statement->fetch(PDO::FETCH_BOTH))
                  {
                      $key = $row['Fcm_Token'];
                      $headers = array(
                      'Authorization:key=' .$server_key,
                      'Content-Type:application/json');
                      $fields = array('to'=>$key,
                          'notification'=>array('title'=>$titulo, 'body'=>$mensaje,
                              'click_action'=>'com.example.witch.gtslsac_app_1_TARGET_NOTIFICATION'
                              )); 
                              $playload=json_encode($fields);
                  $curl_session = curl_init();
                  curl_setopt($curl_session, CURLOPT_URL, $path_to_fcm);
                  curl_setopt($curl_session, CURLOPT_POST, true);
                  curl_setopt($curl_session, CURLOPT_HTTPHEADER, $headers);
                  curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true);
                  curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, false);
                  curl_setopt($curl_session, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
                  curl_setopt($curl_session, CURLOPT_POSTFIELDS, $playload);
      
                  $result = curl_exec($curl_session);
                  echo $result;   
                  }   
      

      不要忘记关闭会话 curl_close($curl_session); 这对我来说效果很好。

      【讨论】:

        猜你喜欢
        • 2021-04-20
        • 2017-07-12
        • 1970-01-01
        • 2017-08-28
        • 2017-04-26
        • 1970-01-01
        • 2019-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多