[iOS] iOSアプリでFirebase Dynamic Linksを受け取る

2018.07.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。モバイルアプリサービス部の平屋です。

本記事では、iOSアプリでFirebase Dynamic Linksを受け取るための実装を紹介します。

検証環境

  • macOS High Sierra Version 10.13.5
  • Xcode Version 9.4.1 (9F2000)

事前準備

Firebaseコンソールでの作業

  • Firebaseコンソールを開く
  • iOSアプリを作成する
  • GoogleService-Info.plistファイルをダウンロードする

ローカルでの作業

Info.plistファイルを追加する

コンソールからダウンロードしたGoogleService-Info.plistファイルをXcodeプロジェクトに追加します。

Firebase SDKを追加する

CocoaPodsで追加します。

target 'FirebaseDynamicLinksSample' do
  pod 'Firebase/Core'
  pod 'Firebase/DynamicLinks'
end

FirebaseApp共有インスタンスを構成する

AppDelegateapplication(_:didFinishLaunchingWithOptions:)内に処理を追加します。

import UIKit
import Firebase
import FirebaseDynamicLinks

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    // ...

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure()
        return true
    }
}

ダイナミックリンクの作成

ドメインの追加

  • Firebase コンソールDynamic Linksのページを開く
  • 「はじめる」をクリックしてサブドメインを指定し、続行をクリックする

ダイナミックリンクの作成

  • Firebase コンソールDynamic Linksのページを開く
  • 「新しいダイナミックリンク」をクリックし、画面の指示に従ってダイナミックリンクを作成する

正しく構成されているかの確認

  • 以下の形式のURLにアクセスする
    • https://<Your Subdomain>.page.link/apple-app-site-association
      • 例:https://sample.page.link/apple-app-site-association
  • jsonファイルが表示されるのでappsの中に対象のアプリが存在することを確認する
{
    "applinks": {
        "apps": [],
        "details": [{
            "appID": "XXXXXXXXXX.com.example.FirebaseDynamicLinksSample",
            "paths": [
                "NOT /_/*",
                "/*"
            ]
        }]
    }
}

Associated Domainsを追加する

  • Xcode プロジェクト > CapabilitiesでAssociated Domainsを有効にし、以下の形式の値を追加する
    • applinks:<Your Subdomain>.page.link
      • 例:applinks:sample.page.link

Dynamic Linksをハンドリングする処理を追加する

Dynamic Linksの長いURLは以下の形式になります。

  • https://<Your Subdomain>.page.link/?link=<DeepLinkURL>&isi=<AppStoreID>&ibi=<BundleID>

以下の実装をアプリに追加すれば、上記URLの中の<DeepLinkURL>部分を取得できます。

class AppDelegate: UIResponder, UIApplicationDelegate {
    // ...

    func application(_ application: UIApplication,
                     continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
        guard
            userActivity.activityType == NSUserActivityTypeBrowsingWeb,
            let webpageURL = userActivity.webpageURL else {
                return false
        }
        return DynamicLinks.dynamicLinks().handleUniversalLink(webpageURL) { dynamiclink, error in
            guard let url = dynamiclink!.url else { return }

            // ディープリンク URLを使用する処理...
            print("url:", url)
        }
    }
}

さいごに

本記事では、iOSアプリでFirebase Dynamic Linksを受け取るための実装を紹介しました。

少し実装を追加するだけで対応できるので良いなぁと思いました。これからiOSアプリでDynamic Linksをさわってみようとしてる方の参考になれば幸いです!

参考資料