【问题标题】:Send push notification to multiple devices in single HTTP request with different data for each device using FCM & PHP使用 FCM 和 PHP 在单个 HTTP 请求中向多个设备发送推送通知,每个设备具有不同的数据
【发布时间】:2019-08-27 10:44:17
【问题描述】:

根据官方文档,我们可以使用主题或设备组向多个设备发送推送通知。但问题是它需要所有设备的通用消息和有效负载数据。

我想向所有设备发送不同的消息。

例如,以下用户应该在他们的 设备。

用户 Amit:您好 Amit,您的请求已获批准。

用户 Sandip:您好 Sandip,您的请求被拒绝了。

用户 Piyush:您好 Piyush,您的请求被拒绝。

等等...... 200-300 个用户。

是否可以使用 Firebase 云消息传递在单个 HTTP 请求中发送所有这些消息?

【问题讨论】:

    标签: php http firebase-cloud-messaging


    【解决方案1】:

    官方的 Admin SDKs 是可能的(参见https://firebase.google.com/docs/cloud-messaging/send-message#send_a_batch_of_messages),但不幸的是,REST API 文档不包含有关如何发送批处理请求的信息(但是,至少到目前为止我还没有找到它们) ,可能是因为它涉及创建一种特殊的多部分请求并且不容易设置。

    所以我建议使用 Admin SDK 来执行此操作。由于我不知道您过去是如何发送消息的,因此请注意,与“仅”发出 cURL 请求相比,使用 Admin SDK 会附带一些额外的设置(例如创建/下载服务帐户)。

    因此,如果您没有使用 PHP,那么使用官方 SDK 之一总是更明智的(请参阅https://firebase.google.com/docs/admin/setup/

    如果您确实选择坚持使用 PHP,https://github.com/kreait/firebase-php 有一个非官方的 PHP Admin SDK,它支持发送批处理消息。 (免责声明:我是该 SDK 的维护者)。

    您可以在 repo 或特别是 https://firebase-php.readthedocs.io/en/latest/cloud-messaging.html#send-multiple-messages-at-once 中阅读有关它的更多信息,但如果您决定尝试 PHP SDK,那么对于您的情况可能如下所示: p>

    use Kreait\Firebase\Factory;
    use Kreait\Firebase\Messaging\CloudMessage;
    use Kreait\Firebase\Messaging\Notification;
    use Kreait\Firebase\ServiceAccount;
    
    $serviceAccount = ServiceAccount::fromJsonFile('/path/to/service_account.json');
    
    $users = [
        ['name' => 'Amit', 'is_approved' => true, 'registration_token' => '...'],
        ['name' => 'Sandip', 'is_approved' => false, 'registration_token' => '...'],
        ['name' => 'Piyush', 'is_approved' => true, 'registration_token' => '...'],
        // ...
    ];
    
    $messages = [];
    
    foreach ($users as $user) {
        $statusText = $user['is_approved'] ? 'approved' : 'denied';
    
        $messages[] = CloudMessage::withTarget('token', $user['registration_token'])
            ->withNotification([
                'title' => "Your request was {$statusText}",
                'body' => "Hello {$user['name']}! Your request was {$statusText}.", 
            ]);
    }
    
    $messaging = (new Factory())
        ->withServiceAccount($serviceAccount)
        ->createMessaging();
    
    $sendReport = $messaging->sendAll($messages);
    
    echo 'Successful sends: '.$sendReport->successes()->count().PHP_EOL;
    echo 'Failed sends: '.$sendReport->failures()->count().PHP_EOL;
    

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多