32
18

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 5 years have passed since last update.

Firebaseを活用してUniversal Linksで他人にデータを渡す

Posted at

活用した状況

checka!というiOSアプリを開発しています。このアプリはTrelloのような、グループで使えるチェックリスト管理アプリです。このなかで、自分のグループに知人を招待するためにはID文字列を渡す必要がありました。その際にUniversal Linksを使えば簡単に実現できることはわかっていたのですが、

  • バックエンドを用意したくない
  • ドメインもめんどくさいからとりたくない
  • FirebaseHostingやAmazonS3のドメインそのままの感じは嫌だ

という感じでした。そのときにFirebase Dynamic Linksを使えば簡単に、しかもドメインもそれなりのもので実現することができた話です。

TL;DR

  • Dynamic Linksのドメインは *.page.link なのでそれなりのドメインにできる
  • アプリがインストールされている場合はアプリが開かれ、インストールされていない場合のリダイレクト先を設定できる
  • バックエンドいらずでお手軽Universal Linksができる

事前準備

Firebase側

Firebaseのセットアップを行ってください。下記が公式リファレンスなのでこれに従ってやれば詰まることはないかと思います。

https://firebase.google.com/docs/guides/?hl=ja

iOS側

Associated Domainsの設定が必要です。2つやることがあります。

1. AppIDにAssociated Domainsの設定をする

Apple Developerのサイトに行って、対象のApp IDを開いて下記のようにAssociated DomainsをEnabledにしてください。

スクリーンショット 2019-02-11 16.50.32.png

2. XcodeからCapabilitiesでAssociatedDomainsの設定をする

この部分で、AssociatedDomainsをONにしておいてください。Dynamic Linksの設定が終わったら追加で記入します。

スクリーンショット 2019-02-11 16.54.03.png

Dynamic Linksの設定

利用開始

Firebaseのコンソールを開き、対象のプロジェクトを選択して、左側のメニューから「Dynamic Links」を開いてください。この画面はころころ変わりそうな気もするのであれですが、下の画像のような内容が出てると思うので、「始める」を押してください。

スクリーンショット 2019-02-11 16.58.48.png

サブドメインの設定

サブドメインの設定を求められるのでいい感じのサブドメインを決めましょう。checka!の場合は、 checka.page.link です。そのままですね。この部分は早いものがちだと思うので、取られていたら仕方ないという感じですね。

スクリーンショット 2019-02-11 17.01.26.png

Dynamic Linkの作成

新規作成

こんな感じの画面になっていると思うので、「新しいダイナミックリンク」を押してください。

スクリーンショット 2019-02-11 17.04.14.png

パスの設定

Dynamic Linksは短縮URLの作成ができるので、今回の用途的には少し違和感があるかもしれません。URL接頭辞として、すきな文字列を入力しましょう。checka!のグループ参加の場合は /join_group しました。ちなみに、2019/02/11現在ではパスを切ることはできませんので、/group/join にはできませんでした、残念。

スクリーンショット 2019-02-11 17.12.27.png

ディープリンクの設定

今回は使わないので、ディープリンクURLはAppStoreのURLを入れて、リンク名もアプリ名を入れておきましょう。

スクリーンショット 2019-02-11 17.14.53.png

iOS用の設定

下の「ディープリンクをiOSアプリで開く」にチェックを付けて、セレクトボックスから対象のアプリを開きましょう。ここで選択されたアプリのbundleIDが、端末にインストールされているアプリのbunldeIDと異なっていると、Universal Linksによるアプリ起動ができないのでご注意ください。また、AppStoreIDやTeamIDの入力が必要になります。AppStoreIDは、checka!だとhttps://itunes.apple.com/jp/app/id1451433619 の数字の部分、TeamIDはAppleDevelopterのAppIDのPrefixの部分です。

スクリーンショット 2019-02-11 17.16.59.png

選択すると、下記のような項目がでてきます。ここでは、アプリがインストールされていない場合の挙動を設定できます。自分は上の「アプリのAppStoreページ」を選択しましたが、必要であればカスタムURLの設定を行うことができるようです。

スクリーンショット 2019-02-11 17.20.38.png

Android用の設定

Androidでも利用する場合は設定を行う必要があります。今回は割愛します。

詳細オプション

checka! では、一番下のチェックボックスにはチェックを入れています。ここのチェックを入れていない場合、インストールされていない端末で開くと、Firebase側の画面に一度アクセスして、そこにボタンがあり、そのボタンを押すとAppStoreへアクセスすることになってしまい、自分としては微妙でした。よって、チェックをいれています。

スクリーンショット 2019-02-11 17.26.33.png

完了

ここまででDynamic Linksの設定は完了です。ここまでやれば、https://[your subdomain].page.link/apple-app-site-association にアクセスすると、Universal Linksに必要な設定項目がJSONとして返却されているかと思います。

アプリの設定

Associated DomainsのAppLinks設定

先程のXcodeのCapabilitiesの設定を開き、Associated Domainsの項目の+を押して、applinks:[your subdomain].page.linkを追加しましょう。これがないとアプリで起動できません。

試す

Dynamic Linksで設定した項目に応じたURL https://[your subdomain].page.link/[your path] に、今までの設定がされたアプリをインストールした端末でアクセスしてみましょう。アプリが起動するはずです。

ハンドリング

Dynamic LinksのページにはSDKを使ってハンドリングしていますが、今回は不要です。 AppDelegate.swift で下記のような感じでハンドリングできます。

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
            let incomingURL = userActivity.webpageURL else {
                return false
        }

        // incomingURLをゴニョゴニョする

        return true
    }

checka!では

https://checka.page.link/join_group?id=[id] でアクセスされた場合、パラメータに渡されたidを入力した状態でグループ参加の画面を開いくようにしています。ちなみに、この機能は2019/02/11審査に出したので、執筆時点ではまだリリースされていません。

おわりに

自分としてはとても楽をして、ユーザー体験を高めることができたのでとてもありがたかったです。よければTwitterフォローしてください。

Twitter: @_mogaming

32
18
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
32
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?