コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Android で Chrome Custom Tabs を使用する方法

はじめに

基本的には上記サイト様が紹介してくださっている手順を踏めば
Android で Chrome Custom Tabs を使用できるようになりますが、
いくつか躓いた箇所があったため、備忘録として自分が踏んだ手順をまとめておきます

検証環境

  • Unity 2020.1.6f1

手順

f:id:baba_s:20201110143838p:plain

事前に Unity プロジェクトを Android に Switch Platform にしておきます

https://github.com/googlesamples/unity-jar-resolver

上記の GitHub リポジトリのページを開き、リポジトリを zip でダウンロードして、
ダウンロードした「unity-jar-resolver-master.zip」を展開して、
展開したフォルダ内の「external-dependency-manager-latest.unitypackage」を

f:id:baba_s:20201110123154p:plain

Unity プロジェクトにインポートします

f:id:baba_s:20201110143657p:plain

インポートが完了して上記のダイアログが表示されたら「No」を押します

f:id:baba_s:20201110143809p:plain

上記のダイアログが表示されたら「Disable Registry Addition」を押します

f:id:baba_s:20201110143906p:plain

Unity プロジェクトに「Editor」フォルダを作成して
「ResolveDependencies」スクリプトを作成します

using Google.JarResolver;
using UnityEditor;
using UnityEngine;

[InitializeOnLoad]
public static class ResolveDependencies
{
    static ResolveDependencies()
    {
        var support = PlayServicesSupport.CreateInstance
        (
            clientName: "GooglePlayGames",
            sdkPath: EditorPrefs.GetString( "AndroidSdkRoot" ),
            settingsDirectory: "ProjectSettings"
        );

        support.DependOn
        (
            group: "com.android.support",
            artifact: "customtabs",
            version: "23.0.0"
        );
    }
}

作成した「ResolveDependencies」スクリプトに上記のコードを記述します
Unity プロジェクトに戻ってコンパイルが完了して

f:id:baba_s:20201110144047p:plain

上記のダイアログが表示されたら「Disable」を押します

f:id:baba_s:20201110152950p:plain

Unity メニューの「Assets > External Dependency Manager > Android Resolver > Force Resolve」を選択して

f:id:baba_s:20201110144153p:plain

上記のダイアログが表示されたらプログレスバーが完了するまで待ちます

f:id:baba_s:20201110144214p:plain

プログレスバーが完了して完了ダイアログが表示されたら
Unity プロジェクトの「Plugins/Android」フォルダに
上記のファイルが追加されていることを確認します

f:id:baba_s:20201110144240p:plain

「Assets/Editor」フォルダと「Assets/ExternalDependencyManager」フォルダ内の
アセットは不要になるので

f:id:baba_s:20201110144246p:plain

削除します

using UnityEngine;

public static class ChromeCustomTabs
{
    public static void OpenURL( string url )
    {
#if UNITY_EDITOR
        Application.OpenURL( url );
#elif UNITY_ANDROID
        using ( var unityPlayer = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) )
        using ( var activity = unityPlayer.GetStatic<AndroidJavaObject>( "currentActivity" ) )
        using ( var intentBuilder = new AndroidJavaObject( "android.support.customtabs.CustomTabsIntent$Builder" ) )
        using ( var intent = intentBuilder.Call<AndroidJavaObject>( "build" ) )
        using ( var uriClass = new AndroidJavaClass( "android.net.Uri" ) )
        using ( var uri = uriClass.CallStatic<AndroidJavaObject>( "parse", url ) )
        {
            intent.Call( "launchUrl", activity, uri );
        }
#endif
    }
}

そして、上記のようなスクリプトを記述します
(参考:https://qiita.com/lucifuges/items/b17d602417a9a249689f#4-customtabsintent%E3%82%92c%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99

ChromeCustomTabs.OpenURL( "https://baba-s.hatenablog.com/" );

あとは、上記のようなコードを記述することで
Android で Chrome Custom Tabs を使用して Web ページを開くことができます

補足

  • Chrome Custom Tabs を閉じたかどうかは
    MonoBehaviour.OnApplicationPause で判定できます