Blog スタッフブログ

Laravel システム開発

[Laravel]FCMのPush通知の送信

システム開発担当のTFです。

やり方

  • Firebaseにプロジェクトを登録し、秘密鍵を生成し取得する
  • Google API Client のライブラリを入れる
  • 秘密鍵の情報を、.envからconfig設定を行う
  • 送信したいメッセージに合わせて整形し、プッシュ通知の処理を作成

参考

  FCM メッセージについて

サンプル

FCM
	プロジェクト
		プロジェクトの設定
			サービスアカウント
				Firebase Admin SDK
					新しい秘密鍵を生成
						.json
							のファイルがダウンロードされる
// Google API Client
composer require google/apiclient:^2.15.0
// エラー等で落ちた場合下記でする( 時間かかる )
	
	// タイムアウト変更
	composer config --global process-timeout 2000
	
	composer require google/apiclient:^2.15.0 --prefer-source --ignore-platform-reqs
# FCM認証情報( 取得した秘密鍵内の情報を設定する )
FCM_TYPE=""
FCM_PROJECT_ID=""
FCM_PROJECT_NAME=""
FCM_PRIVATE_KEY_ID=""
FCM_PRIVATE_KEY=""
FCM_CLIENT_EMAIL=""
FCM_CLIENT_ID=""
FCM_AUTH_URI=""
FCM_TOKEN_URI=""
FCM_AUTH_PROVIDER_X509_CERT_URL=""
FCM_CLIENT_X509_CERT_URL=""

# FCMエンドポイント
FCM_PUSH_API="https://fcm.googleapis.com/v1/projects/${FCM_PROJECT_NAME}/messages:send"
<?php

return [
    'auth' => [
        'type' => env('FCM_TYPE'),
        'project_id' => env('FCM_PROJECT_ID'),
        'private_key_id' => env('FCM_PRIVATE_KEY_ID'),
        'private_key' => env('FCM_PRIVATE_KEY'),
        'client_email' => env('FCM_CLIENT_EMAIL'),
        'client_id' => env('FCM_CLIENT_ID'),
        'auth_uri' => env('FCM_AUTH_URI'),
        'token_uri' => env('FCM_TOKEN_URI'),
        'auth_provider_x509_cert_url' => env('FCM_AUTH_PROVIDER_X509_CERT_URL'),
        'client_x509_cert_url' => env('FCM_CLIENT_X509_CERT_URL'),
    ],
    'push_api' => env('FCM_PUSH_API'),
];

<?php

namespace App\Http\Controllers;

use Google_Client;

class TestController extends Controller
{
	public function sendPush($token, $title, $body, $kind, $id)
	{
		// Google API Client
		$googleClient = new Google_Client;
		
		$googleClient->useApplicationDefaultCredentials();
		$googleClient->setAuthConfig( config('firebase.auth') );
		$googleClient->addScope( 'https://www.googleapis.com/auth/firebase.messaging' );
		
		// FCM認証
		$httpClient = $googleClient->authorize();

		// メッセージ
		$data = [
			'message' => [
				'token' => $token,
				'notification' => [
					'title' => $title,
					'body' => $body,
				],
				'data' => [
					'title' => $title,
					'body' => $body,
					'kind' => $kind,
					'id' => $id,
				],
			]
		];

		// FCMにPOST
		$httpClient->post( config('firebase.push_api'), ['json' => $data] );
	}
}