繁体   English   中英

使用FCM和PHP在单个HTTP请求中将推送通知发送到多个设备,每个设备具有不同的数据

[英]Send push notification to multiple devices in single HTTP request with different data for each device using FCM & PHP

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

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

例如,下面的用户应该在他们的设备上收到以下消息。

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

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

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

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

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

官方Admin SDK可以使用(请参阅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,对PHP在一个非官方的联系SDK https://github.com/kreait/firebase-php是支持发送一批消息。 (免责声明:我是该SDK的维护者)。

您可以在回购中或在https://firebase-php.readthedocs.io/en/latest/cloud-messaging.html#send-multiple-messages-at-once上了解有关此内容的更多信息,但这可能是这样如果您决定尝试使用PHP SDK,则可能会遇到以下情况:

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;

我希望这有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM