我目前正在将 PHP 5.6 应用程序重建为 Java,预计将持续到 6 月之后。在那之前,我需要通过迁移推送通知来确保它们继续发送。
问题在于,解释使用 Google OAuth2 的用户身份验证服务的“Google App Engine PHP 5 标准环境文档”已于 1 月 30 日终止。对此我有两个问题:
通过gpt,我收到了以下来源。但是,我不确定如何获得
$refreshToken
,并且该源是否正常工作也存在不确定性。
function get_access_token($clientId, $clientSecret, $refreshToken) {
$url = 'https://accounts.google.com/o/oauth2/token';
$data = [
'client_id' => $clientId,
'client_secret' => $clientSecret,
'refresh_token' => $refreshToken,
'grant_type' => 'refresh_token',
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
if(array_key_exists('access_token', $result)) {
return $result['access_token'];
} else {
return null;
}
}
function send_notification_common($tokens, $message) {
$clientId = 'MyClientId';
$clientSecret = 'MyClientSecret';
$url = 'https://fcm.googleapis.com/v1/projects/gymgym-4ecef/messages:send';
$fields = array(
'message' => array(
'token' => $tokens,
'notification' => $message,
'data' => $message
)
);
$headers = array(
'Authorization: Bearer ' . get_access_token($clientId, $clientSecret, $refreshToken),
'Content-Type: application/json'
);
$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_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
return $result;
}
你能告诉我如何使用这个代码或者是否还有其他方法?
谢谢你。
此后,它被移至网址
http://localhost/?code=4/0adLIrYehJFAe5XYrzWOAvX9gdkRyB5gJk6pyAeXpgUSMbgV8eLCMjhDHHxN-85_YUyx5SA&scope=https://www.googleapis.com/auth/cloud-platform
。
我不知道之后我应该做什么
您需要使用以下命令安装 kreait/firebase-php 库:
composer require kreait/firebase-php
接下来,从 Firebase 下载 service-account.json 文件并将其放置在您的代码可访问的位置。
下载 service-account.json 文件:
转到 Firebase > 项目设置 > 服务帐户。 单击生成新私钥按钮。
获得文件后,您可以使用以下代码发送通知:
require_once('vendor/autoload.php');
use Kreait\Firebase\Factory;
use Kreait\Firebase\Messaging\CloudMessage;
use Kreait\Firebase\Messaging\Notification;
$serviceAccount = './service-account.json';
$factory = (new Factory)->withServiceAccount($serviceAccount);
$messaging = $factory->createMessaging();
$messageSend = CloudMessage::withTarget('token', $token)
->withNotification(Notification::create($title, $body));
$response = $messaging->send($messageSend);
if ($response) {
echo 'Message sent successfully!';
} else {
echo 'Error sending message: ' . $response->getError()->getMessage();
}
如果遇到任何问题(特别是使用 PHP 7.4 或更低版本时),请尝试安装以下库并再次检查:
composer require guzzlehttp/psr7