【PHP】FCM HTTP APIをHTTP v1 APIに対応する

対応方法はご丁寧にGoogle様が教えてくれているのですが、PHPでの対応方法が試行錯誤だったので忘備録的に記事にしました。

https://firebase.google.com/docs/cloud-messaging/migrate-v1?hl=ja

結論以下のようにする

Google API Clientを使用するので。

composer require google/apiclient

phpコードは以下の通り。

require '/your_vendor_path/vendor/autoload.php';
							putenv('GOOGLE_APPLICATION_CREDENTIALS=/your_path_to_json/');
$myProjectID = 'your_project_ID';

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/firebase.messaging');
$httpClient = $client->authorize();

// プッシュ通知準備
$base_url = "https://fcm.googleapis.com/v1/projects/".$myProjectID."/messages:send";

$data = [
	'message' => [
                // 通知相手のトークン(これは、DB等に格納しているはず)
		'token' =>'push_to_Token',
		'notification' => [
			'title' =>  "タイトルメッセージ",
			'body' => "通知本文",
		],
		'android' => [
			'priority' => 'high',
		],
		'apns' => [
			'headers' => [
				'apns-priority' => '10',
			],
			'payload' => [
				'aps' => [
					'badge' => 1,
				],
			],
		],
	],
];
$result = $httpClient->post($base_url, ['json' => $data]);

解説

Google API クライアントライブラリを含む Composer でインストールしたライブラリを利用できるようにしておく。

require '/your_vendor_path/vendor/autoload.php';

サービスアカウントの認証情報ファイルへのパスを環境変数に設定する。firebaseコンソールからダウンロードできるので、任意の場所に配置しておく。

putenv('GOOGLE_APPLICATION_CREDENTIALS=/your_path_to_json/');

Google_Client()でGoogle APIクライアントを作成し、useApplicationDefaultCredentials()で、上記で指定したJSON認証情報ファイルを使用して認証を行う。

$myProjectID = 'your_project_ID';

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/firebase.messaging');
$httpClient = $client->authorize();

プッシュ通知を送信するための API エンドポイント URL を指定する。

$base_url = "https://fcm.googleapis.com/v1/projects/".$myProjectID."/messages:send";

通知データ部分

$data = [
	'message' => [
		'token' => 'push_to_Token',
		'notification' => [
			'title' =>  "タイトルメッセージ",
			'body' => "通知本文",
		],
		'android' => [
			'priority' => 'high',
		],
		'apns' => [
			'headers' => [
				'apns-priority' => '10',
			],
			'payload' => [
				'aps' => [
					'badge' => 1, 
				],
			],
		],
	],
];