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



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

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

例如,以下用户应在其 设备。

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

用户桑迪普:您好桑迪普,您的请求被拒绝了。

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

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

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

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

所以我建议使用管理员 SDK 来做到这一点。由于我不知道您过去是如何发送消息的,因此请注意,与"仅"发出 cURL 请求相比,使用 Admin SDK 需要一些额外的设置(例如创建/下载服务帐户)。

因此,如果您不必使用 PHP,那么使用官方 SDK 之一总是更明智(见 https://firebase.google.com/docs/admin/setup/)

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

您可以在存储库中或 https://firebase-php.readthedocs.io/en/latest/cloud-messaging.html#send-multiple-messages-at-once 中阅读有关它的更多信息,但是如果您决定尝试使用 PHP SDK,以下是您的情况:

use KreaitFirebaseFactory;
use KreaitFirebaseMessagingCloudMessage;
use KreaitFirebaseMessagingNotification;
use KreaitFirebaseServiceAccount;
$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;

我希望这有帮助!

相关内容

  • 没有找到相关文章