【Firebase 入門】 Dynamic Links とは

# Dynamic Links とは
[Dynamic Links](https://firebase.google.com/docs/dynamic-links?hl=ja) は、アプリのインストールの有無にかかわらず、複数のプラットフォームで機能するリンクです。iOS または Android で Dynamic Links  を開くと、ネイティブアプリのリンク先のコンテンツに直接移動します。

# ユースケース
- **ウェブユーザーをアプリユーザーにする**
Dynamic Links を開いたユーザーの iOS デバイスまたは Android デバイスにアプリがインストールされていない場合にインストールを促し、インストール完了後にアプリを起動してリンクを開く。

- **SNS、メール、SMS でのキャンペーン**
どのプラットフォームでも機能するリンクを使ってプロモーションの特典を提供する。iOS、Android、ウェブブラウザのいずれであっても、アプリをインストール済みかどうかにかかわらず、既存のユーザーも見込みユーザーも特典を利用できる。

# Android アプリでDynamic Links を利用する
こちらの[サンプルコード](https://github.com/firebase/quickstart-android/tree/master/dynamiclinks)を参考にして、 Dynamic Links を試してみましょう。

## FirebaseプロジェクトとAndroidアプリの準備
サンプルコードを入手する
GitHubからソースコードをローカル環境にクローンします。
今回は `dynamiclinks` ディレクトリのコードを使用します。

```
$ git clone https://github.com:firebase/quickstart-android && cd quickstart-android/dynamiclinks
```

### Firebaseプロジェクトを作成する
次にサンプルアプリケーションをデプロイするために [Firebase プロジェクトを作成](https://firebase.google.com/docs/projects/learn-more?hl=ja)します。

### Android プロジェクトに Firebase を追加する
作成したFirebaseプロジェクトにクローンした[Androidアプリを追加](https://firebase.google.com/docs/android/setup)します。

## Dynamic Links の設定
※ 以下の画像中で設定している値はグローバルで一意でなければならないので、実際に試す場合は別の値を使用してください。

### URL prefix を設定する
Firebase コンソールの [Dynamic Links] から `Add URL prefix` を選択し、Domain を設定します。あとはデフォルト値のまま、`Verify` と `Finish` します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351392/ea979dc3-6679-e994-f32a-05379d7a08ad.png" width=90%>

### Dynamic Links を作成する

続いて、`New Dynamic Link` を選択します。

1. Set up your short URL link
デフォルトで設定されている値を使用できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351392/4e8a0309-7139-7baa-2fa1-49fd2eb403f1.png" width=90%>

2. Set up your Dynamic Link
Deep link URL を設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351392/67994fbe-7df0-3f84-28cb-9a2edb9de799.png" width=90%>


3. Define link behavior for iOS
今回は iOS アプリは使用しないので、デフォルト値のままにします。

4. Define link behavior for Android
deep link が Android アプリで開かれたときの挙動を設定します。
今回は、別に用意している **オブジェクト認識アプリ** が起動されるように設定しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351392/a335eefa-0aa9-90c6-85dc-c77b2c9798cc.png" width=90%>

5. Campaign tracking, social tags and advanced options (optional)
デフォルト値のままにします。

### ソースコードの編集をする
Android Studio を起動し、app/build.gradle の、`dynamic_links_uri_prefix` の値を、Set up your short URL link で設定した Link preview の値に書き換えます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351392/37a5604c-9add-60ae-c07e-7068498df1e6.png" width=110%>

## アプリを起動して Dynamic Links の挙動を確認する
Android Studioでアプリを起動すると、Emulator で下のような画面が開きます。
Java の OPEN を選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351392/fd499c48-adec-f476-9905-739b60f0eab4.png" width=60%>

Send の下に deep link が生成されました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351392/3f89a147-926f-5ace-3932-6f88568fbfb0.png" width=60%>

生成された deep link をコピーし、同じ Emulator デバイス内のブラウザで開きます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351392/8d040e0f-18ca-eabd-b58f-688c63e2e8e0.png" width=60%>
Define link behavior for Android で設定したとおり、オブジェクト認識アプリが起動されました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351392/f93602c5-0420-1982-5153-19aeb1843c4d.png" width=60%>