3
3

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.

【Unity】必要最低限でアプリ宣伝用のストアリンクをiOS,Androidとで1つにした話

Posted at

前置き

  • 今まではtwitterで宣伝用URLをこんな感じで、OS別にリンクを貼っていた

  • 文字数もスペースも取るし、1つのリンクでそれぞれOS別に挙動が変わると嬉しいかも(以下のようなイメージ)

    • Android
       
    • iOS
  • ついでにインストール済ならアプリを起動して欲しい!(以下のようなイメージ)

  • そんな時、Firebase Dynamic Linksという無料で使える神サービスがあったので、それを使って、上記のような振る舞いをUnityで実装するやり方を本記事では紹介させていただいてます

最終結果

対応手順

前提

  • Dynamic Linkからパラメータを受け取って、アプリ側で何かするということはしない
    (DeepLinkは活用しない)

全体の流れ

  1. FirebaseでDynamic Linkの設定を定義する

Firebaseでプロジェクトを作成(作成済ならスルー)

  1. consoleへ移動
    1. https://console.firebase.google.com/u/0/?hl=ja
  2. プロジェクトを追加

    1. プロジェクト名:アプリ名
    2. Google アナリティクス:無効(Dynamic Linkだけ使いたい場合)
    3. 作成!

アプリ追加(追加済なら、8の追加設定だけ確認)

  1. サイドメニューからプロジェクトの概要をクリック

  2. +アプリを追加から追加

  3. Unity選ぶと、iOS/Android一気に追加できるので、Unity選択

  4. いずれも登録する感じで設定

  5. 設定ファイルは、本記事の利用範囲内なら、ダウンロードはスルーでOK

  6. SDKも、本記事の利用範囲内なら、ダウンロードはスルーでOK

  7. 無事登録完了

  8. 各アプリの設定から、追加で設定

    1. iOSでApp Store IDと、チームIDを設定

    2. Android側は特になし

Dynamic Links

Firebaseセットアップ

  1. サイドメニューのエンゲージからDynamic Linksを選択

  2. 始める

  3. ドメインは無料の範囲でよければ、xxxxx.page.linkで、URL接頭辞の追加→終了

  4. 新しいダイナミック リンクから追加

  5. 短縮URLのリンク設定はそのままでも好きに変えても(任意)

  6. ダイナミック リンクの設定はPCで開かれた場合のURLを入力(内容は任意)

    • ※ 例として、スクショではホームページのリンクを設定
    • ※ ただし、このやり方はアプリにDeepLinkが渡されて何かするということをしない前提でのお手軽な設定の仕方となってます。もしDeepLinkも活用しつつ、iOS/Android以外のプラットフォームにも対応するのであれば、ダイナミック リンク URL を手動で構築する方法もあり、oflのパラメータを利用するような形にすると、ちゃんと対応できそうです
  7. リンク動作の定義は、インストールされていればアプリ開いて、未インストールならストアページ表示する感じに設定

    • iOS
    • Android
  8. キャンペーン トラッキング、ソーシャルタグ、詳細オプションはスルーしてもOKだが、iOSでpreview画面をスキップしたい場合は、アプリのプレビュー ページをスキップする(推奨されません)にチェックする

    • preview ページというのは動かしてみるとわかりますが、iOSでのみm以下のようにストア画面 or アプリ画面の前に表示される画面です。ただ、スキップするにすると、インストール時に直接アプリに遷移せず、ストア画面に飛ぶようになります(以前は飛んだが、どこかのタイミングで仕様が変わったみたい)
  9. 許可するドメインを設定

    1. 警告が出てるので、そこから設定

    2. 以下をとりあえず設定
      • 3で指定したドメイン:xxxxx.page.link
        • これはリダイレクトする際に通ってるみたいで、指定しておかないとエラーになってしまう
      • Apple Storeのドメイン:apps.apple.com
      • Play Storeのドメイン:play.google.com
      • 6で指定したドメイン:xxxxxxxxxx

    3. もしアプリのIDを指定したいとか、6で指定したドメインに/含む場合は、正規表現で追加登録ができるので、そちらから登録
      • 正規表現の参考値
        • ^https{0,1}://apps.apple.com([/#?].*){0,1}$
        • ^https{0,1}://play.google.com([/#?].*){0,1}$

Unity側のセットアップ

  • 本記事の利用の範囲ないであれば、未セットアップでOK
    • もし、Dynamic Linkのパラメータ等をアプリ側で受け取って、そこの先で処理したいことがあるのであれば、セットアップは必要そうだが、宣伝用にストアへの促し、アプリの起動の分岐だけであれば、Firebase側の設定だけで事足りる
    • そのため、SDKもimportしなくてOK

Xcode側の設定

  • Unity側は特に不要でしたが、iOSの対応として、Xcodeの追加設定だけ必要
  • Unity-iPhoneのProjectでSigning & Capabilities > Associated Domainsapplinks:xxxxx.page.link(※)を追加
    • ※Firebaseセットアップの3で追加したドメイン
  • 設定後にビルドとかすると、Apple Developer側のIdentifiersのCapabilitiesの方は勝手に更新してくれてそう

PostProcessBuildで書く場合

  • ビルドごとに毎回Xcodeを操作するのはイケテないので、自動化するなら以下のような感じで書けました
PostProcessBuild.cs
using UnityEditor;
using UnityEditor.Callbacks;

#if UNITY_IOS
using UnityEditor.iOS.Xcode;

namespace yt.E2.Editor
{
    public static class PostProcessBuild
    {
        private const string cDomain = "xxxxx.page.link";  // ★ここは設定した独自のドメインにする

        [PostProcessBuild]
        public static void OnPostProcessBuild(BuildTarget target, string path)
        {
            AddAssociatedDomains(path);
        }

        private static void AddAssociatedDomains(string path)
        {
            var pbxPath = PBXProject.GetPBXProjectPath(path);
            var pbx = new PBXProject();
            pbx.ReadFromFile(pbxPath);
            var entitlements = new ProjectCapabilityManager(
                pbxPath,
                "Entitlements.entitlements",
                targetGuid: pbx.GetUnityMainTargetGuid());
            entitlements.AddAssociatedDomains(new string[] { "applinks:" + cDomain });
            entitlements.WriteToFile();
        }
    }
}
#endif

結果

  • 生成されたURL

  • Androidで未インストールの場合
     

  • iOSで未インストールの場合
     

  • iOSでインストール済の場合

  • PCの場合

感想

  • Dynamic Links便利!
  • 無料でここまでやらせてくれるなんて神!
  • やりたいことはできたが、短縮URLというのもあり、(前提知らなかったり)見る人によってはリンク踏むの躊躇うかも?ともちょっと思ったりもした。
    分かりやすさを追求するなら、OS別にリンク貼るのも悪くないのかなとも思った
  • まぁでもURL短くしたい時もあるよね!という場面もあるかと思うので、やって良かった!

参考

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?