我正在尝试从 FCM Legacy API 迁移到 FCM V1 API。我设法使用 FCM V1 API 完美地向设备令牌发送通知,但我不知道如何为用户订阅主题。
我为此使用 googleapis IID API
https://iid.googleapis.com/iid/v1/<DEVICE TOKEN HERE>/rel/topics/<TOPIC NAME HERE>
。
早期在 Legacy API 中,我们有服务器密钥,我用它来发送这样的标头
{Authorization: key=<SERVER KEY>}
,但在 HTTP V1 API 之后,我们不再有服务器密钥。
我尝试过的事情:
{Authorization: Bearer <API TOKEN HERE>}
,我使用它来向设备令牌发送推送通知,因为它是使用 google API PHP 客户端生成的。{Authorization: key=<API KEY HERE>}
一样在授权中发送API密钥,但没有成功。使用上述方式响应时收到 401 未经授权的错误。
如果我遗漏了什么或做错了什么,有人可以指导我吗?
我使用 PHP 作为后端。
在标题中将
access_token_auth
设置为 true
。
例如。
发布 https://iid.googleapis.com/iid/v1/`DEVICE_TOKEN`/rel/topics/`TOPIC_NAME`
授权:不记名
API_TOKEN_HERE
access_token_auth:true
FCM HTTP V1 主题订阅/取消订阅 通过 Curl/ PHP 你可以使用这个
function manageTopicSubscription($type, $deviceTokens, $topic, $accessToken) {
if($type == "add")
$url = "https://iid.googleapis.com/iid/v1:batchAdd";
else // remove
$url = "https://iid.googleapis.com/iid/v1:batchRemove";
$headers = [
'Authorization: Bearer ' . $accessToken,
'Content-Type: application/json',
'access_token_auth: true'
];
$data = [
'to' => "/topics/".$topic,
'registration_tokens' => $deviceTokens // array, ["fsa...", "fffd..."]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$result = curl_exec($ch);
curl_close($ch);
return json_decode($result, true);
}
通话功能 订阅
manageTopicSubscription("add", $deviceTokens, "topicName", $accessToken);
取消订阅
manageTopicSubscription("remove", $deviceTokens, "topicName", $accessToken);