根据官方文档,我们可以使用主题或设备组将推送通知发送到多个设备。但是问题在于,所有设备都需要一个通用消息和有效载荷数据。
我想向所有设备发送不同的消息。
例如,下面的用户应该在其下面收到以下消息 设备。
用户权限:您好,您的请求已获批准。
用户Sandip:您好,Sandip,您的请求被拒绝了。
用户Piyush:您好,Piyush,您的请求被拒绝了。
以此类推.....到200-300个用户。
是否可以使用Firebase Cloud Messaging在单个HTTP请求中发送所有这些消息?
答案 0 :(得分:0)
可以使用正式的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,则https://github.com/kreait/firebase-php上有一个用于PHP的非正式Admin SDK,它支持发送批处理消息。 (免责声明:我是该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;
我希望这会有所帮助!