1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

REST APIを使用したFirebase DynamicLinks の作成

Last updated at Posted at 2022-02-06

FirebaseのコンソールでDynamicLinksを作成する記事はたくさんあるが、APIを使用してDynamicLinksを作成する記事があまりないような気がした。これからDynamicLinksをAPIを使用して作成する人の参考になったら良いなと思う。たくさんの記事があるので「DynamicLinksとは」などという基本情報は割愛する。

使用言語

PHP

こんな想定

iOSやAndroidのアプリを使用したサービスで、クリックしたらアプリの具体的なページに飛ぶリンクを作りたい。
例えば、シューズの広告のQRコードを読み取れば、アプリ内のシューズの購入ページに飛ぶリンクが欲しい。アプリを持っていない人は、AppleストアやGoogle Playストアに飛ばされ、インストールが終わるとアプリのシューズの購入ページに飛ぶことができるリンクを作りたい。など。

ドキュメント

今回は、DynamicLinksのショートリンクを作成する。
まずは、ドキュメントを読む前にコンソールで実際にDynamicLinksを使用して、DynamicLinksの動きや設定イメージを掴むべきである。


イメージを掴んだところでドキュメントは以下の二つを使用する。

コード例

以下AndroidとiOSどちらもアプリがある場合を想定する。
どちらかのみの場合は、パラーメーターを減らすと良い。
https://google.comに飛ぶダイナミックリンクを作成する。

必要な情報

① DynamicLinksのURL接頭辞
② FirebaseのWEB APIキー
③ Androidのパッケージ名
④ iOS BundleId
⑤ iOS AppleStoreId

その情報はどこにあるの?

① DynamicLinksのURL接頭辞
coetto-stg_-Dynamic_Links-_Firebase_コンソール.png

Firebaseのプロジェクトの設定を確認
coetto-stg_-概要-_Firebase_コンソール.png

② FirebaseのWEB APIキー 
③ Androidのパッケージ名
coetto-stg_-プロジェクトの設定-_Firebase_コンソール.png

④ iOS BundleId
⑤ iOS AppleStoreId
coetto-stg_-プロジェクトの設定-_Firebase_コンソール.png

これらは、.envファイルに記述する。以下は.envファイルに記述した環境変数をconfigファイルを通して使用している。

DynamicLinksClientのクラスを作成

<?php

namespace App\Model\Firebase\DynamicLinks;

use GuzzleHttp\Client;
use Psr\Http\Message\ResponseInterface;

class DynamicLinksClient
{
    private string $endpoint;
    private string $domainUriPrefix;
    private string $androidPackageName;
    private string $iosBundleId;
    private string $iosAppStoreId;

    public function __construct()
    {
        $this->endpoint = 'https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key='.config('services.firebase.api_key');
        $this->domainUriPrefix = config('services.firebase.domain_uri_prefix');
        $this->androidPackageName = config('services.firebase.android_package_name');
        $this->iosBundleId = config('services.firebase.ios_bundle_id');
        $this->iosAppStoreId = config('services.firebase.ios_app_store_id');
    }

    public function getShortLink(string $urlParameter): ResponseInterface
    {
        $httpClient = new Client();

        return $httpClient->request('POST', $this->endpoint, $this->params($urlParameter));
    }

    private function params(string $urlParameter): array
    {
        return [
            'json' => [
                'dynamicLinkInfo' => [
                    'domainUriPrefix' => $this->domainUriPrefix,
                    'link' => $urlParameter,
                    'androidInfo' => [
                        'androidPackageName' => $this->androidPackageName,
                    ],
                    'iosInfo' => [
                        'iosBundleId' => $this->iosBundleId,
                        'iosAppStoreId' => $this->iosAppStoreId,
                    ],
                    'navigationInfo' => [
                        'enableForcedRedirect' => true, //オプション
                    ],
                ],
                'suffix' => [
                    'option' => 'SHORT',  //4文字のショートリンクになる
                ],
            ],
        ];
    }
}

上記のオプションのパラメーターを入れることで、下の画像のような画面をとばしてアプリに直接遷移させることができる。
「アプリで開く」を実現する、Firebase_Dynamic_Linksの実装と運用Tips_-_ログミーTech.png

DynamicLinksClientのクラスを使用してショートリンクを作成する

$dynamicLinksClient = new DynamicLinksClient();
$response = $dynamicLinksClient->getShortLink('https://google.com');
$decodedResponse = json_decode($response->getBody()->getContents(), true);
$decodedResponse['shortLink'];  //→https://example.page.link/WXYZ

ダイナミックリンクはhttps://example.page.link/WXYZでこれをクリックするとhttps://google.comが開く。

全てドキュメントに書いてあるが、私みたいな初心者はそのドキュメントを解読するのに時間がかかった。
慣れるとドキュメントを読みながら実装を進めることができるが、この記事がDynamicLinksの実装イメージを持ちたい人の助けになれば嬉しい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?