首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用FCM & PHP在单个HTTP请求中向多个设备发送推送通知,每个设备的数据不同

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

Stack Overflow用户
提问于 2019-08-27 10:44:17
回答 1查看 910关注 0票数 2

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

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

例如,下面的用户应该在他们的设备上收到以下消息。 用户Amit: Hello,您的请求被批准了。 用户Sandip: Hello,您的请求被拒绝。 用户Piyush:你好Piyush,您的请求被拒绝了。 等等……给200-300名用户。

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

EN

回答 1

Stack Overflow用户

发布于 2019-08-27 15:40:51

使用正式的Admin (请参阅messages)是可能的,但是遗憾的是,REST文档没有包含关于如何发送批处理请求的信息(至少到目前为止我还没有找到它们),这可能是因为它涉及创建一种特殊的多部分请求,并且设置起来不容易。

因此,我建议使用Admin来做这件事。由于我不知道您过去是如何发送消息的,请注意,使用Admin提供了一些额外的设置(例如,创建/下载服务帐户),而不是发出“仅”cURL请求。

因此,如果您不需要使用PHP,那么使用一个正式的SDK总是更明智的(参见https://firebase.google.com/docs/admin/setup/)

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

您可以在回购中或在https://firebase-php.readthedocs.io/en/latest/cloud-messaging.html#send-multiple-messages-at-once上阅读更多关于PHP的内容,但是如果您决定尝试PHP,您可能会看到下面的内容:

代码语言:javascript
运行
复制
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;

我希望这能帮到你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57672974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档