如何在php中使用FCM HTTP v1 API

时间:2018-04-11 18:28:47

标签: php firebase firebase-cloud-messaging

我已将FCM与旧协议一起使用,但无法找到任何具体文档来使用新的FCM HTTP v1 API与php。

我已设法将Google API Client Library导入到我的项目中,但无法找到有关如何获取fcm消息所需范围的访问令牌的任何文档或教程。

3 个答案:

答案 0 :(得分:5)

也许有点晚,但这是如何检索要与FCM HTTP v1 API一起使用的誓言令牌。

  • 下载此Google library以在您的php代码中使用它。
  • Firebase console生成并下载新的私钥
  • 将此密钥以json格式存储在服务器上的安全位置。

如何使用私钥配置Google客户端

public function configureClient()
{
    $client = new Google_Client();
    try {
        $client->setAuthConfig("include_your_private_json_key_path_here");
        $client->addScope(Google_Service_FirebaseCloudMessaging::CLOUD_PLATFORM);

        // retrieve the saved oauth token if it exists, you can save it on your database or in a secure place on your server
        $savedTokenJson = $this->readFile();

        if ($savedTokenJson != null) {
            // the token exists, set it to the client and check if it's still valid
            $client->setAccessToken($savedTokenJson);
            if ($client->isAccessTokenExpired()) {
                // the token is expired, generate a new token and set it to the client
                $accessToken = $this->generateToken($client);
                $client->setAccessToken($accessToken);
            }
        } else {
            // the token doesn't exist, generate a new token and set it to the client
            $accessToken = $this->generateToken($client);
            $client->setAccessToken($accessToken);
        }

        $oauthToken = $accessToken["access_token"];

        // the client is configured, now you can send the push notification using the $oauthToken.

    } catch (Google_Exception $e) {
        // handle exception
    }
}

如何请求新的oauth令牌

private function generateToken($client)
{
    $client->fetchAccessTokenWithAssertion();
    $accessToken = $client->getAccessToken();

    // save the oauth token json on your database or in a secure place on your server
    $tokenJson = json_encode($accessToken);
    $this->saveFile($tokenJson);

    return $accessToken;
}

请注意,您应该使用saveFile()readFile()方法来存储和检索宣誓令牌json。遵循migration guide的有效负载结构。

答案 1 :(得分:1)

如果您愿意使用现有的库而不是自己实现它,那么您可以考虑查看今天已获得FCM支持的https://github.com/kreait/firebase-php/

https://firebase-php.readthedocs.io/en/latest/cloud-messaging.html

如果不适合您,您至少可以从源代码中使用PHP提取与FCM REST API的连接。简而言之,它是https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages的实现。

答案 2 :(得分:0)

按照作者的介绍,这是一个使用FCM HTTP v1 API的示例php项目:

回购:https://github.com/jeromegamez/firebase-php-examples
打包文档:https://firebase-php.readthedocs.io/en/latest/cloud-messaging.html
软件包回购:https://github.com/kreait/firebase-php