Уведомление Firebase - разница отправки в сегмент пользователя и отправки в тему

Мне поручили использовать Firebase для реализации push-уведомлений, но я в этом новичок.

Глядя на документацию:

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

Я не могу сказать, при каких обстоятельствах я должен использовать send to user segment или send to a topic.

Может кто-нибудь, пожалуйста, дайте мне пример, когда использовать тот или другой и указать разницу? Спасибо вперед :)




Ответы (3)


Использовать пользовательские сегменты

  • Обычно для отправки push-уведомлений на определенный и ограниченный набор устройств.
  • Доставка сообщений почти мгновенная (по моему опыту). Кроме того, я не наблюдал троттлинга, как это было ранее с GCM.

Используйте темы

  • Механизм темы или публикации/подписки используется для сравнительно большей аудитории, а тип информации является общедоступным. Например, погода и новости.
  • Темы имеют задержку (доставка сообщений может быть ограничена)
person Pravin Sonawane    schedule 29.11.2016

Пользовательские сегменты

  • Вы можете отправлять уведомления сегментам пользователей только через консоль Firebase. (см. здесь).
  • Ограничено конкретными целями (из документов, на которые вы ссылаетесь):
    #P2#
  • Как уже упоминалось в документе, на который вы ссылались:
    # P3#

Темы

  • Управление токеном/устройством не обязательно требуется.
  • Неограниченное количество подписчиков.
  • Можно отправлять в темы с помощью FCM API.
  • Можно легко подписаться/отписаться через клиентское приложение.

ИМХО, если вы хотите, чтобы все было быстро и просто, используйте функцию обмена сообщениями в темах.

person AL.    schedule 29.11.2016
comment
Я всегда использую тематические сообщения, потому что это экономит много времени. Как только пользователь входит в систему, я подписываю пользователя на его идентификатор пользователя, и всякий раз, когда мне нужно отправить push-уведомление этому пользователю с сервера, я просто отправляю сообщение с его идентификатором пользователя. Я надеюсь, что это идеально rt? - person Praveena; 07.01.2019
comment
Использование тем @Praveena зависит от предпочтений. Я не вижу никаких проблем для вашего варианта использования. Так что я думаю, что все в порядке. Просто обратите внимание, что темы являются общедоступными и на них могут подписаться любые другие токены. - person AL.; 08.01.2019
comment
На самом деле это topics are public and that any other tokens may subscribe to it. очень важно, и я пропустил это. Большое спасибо - person Praveena; 08.01.2019

сначала вам нужно сохранить токены для каждого отдельного устройства, на которое вы хотите отправить уведомление, я сохранил их в вызове таблицы «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); это сработало просто отлично для меня.

person Jorge Febres    schedule 13.07.2017