【Unity】ディープリンク実装
目次
概要
Webページで、 AppStoreとかGooglePlayStoreのアイコンがあってタップすると
- アプリがインストール済みならアプリ起動
- 未インストールならストアへ飛ばされる
みたいなやつ見かけないですか?
あれを簡易的にC#だけでアプリ上で実装するためのコードです。
このスマホアプリやWebページからアプリに飛ぶことを「ディープリンク」とか「ディープリンキング」と呼ぶらしいです。
詳しく知りたい方は調べてみてください。
きっかけ
この機能を実装しようと思ってネットで色々調べても、難しそうなやつしか出てこなかった
- AndroidならUnity上でJavaを書く
- iOSならObjective-Cを書く
みたいなやつしかなかった。
どっちもハードルが高そうだったので「C#だけでなんとかならんのか?」
と悩み考え出したコードです。
(凄そうに聞こえますが、大したことはやってませんw)
※間違っている可能性がございます、ご使用される際は注意してご利用ください。
コード
using System.Collections; using UnityEngine; /// <summary> /// ディープリンク用テストクラス /// </summary> public class Test : MonoBehaviour { private const string urlScheme = "line://"; // 開きたいアプリのURLスキーム // アプリのストアへのリンク(ブラウザで検索したやつで大丈夫だった) #if UNITY_EDITOR private const string storeUrl = "https://play.google.com/store/apps/details?id=jp.naver.line.android&hl=ja"; // エディターではGooglePlayへのリンク #elif UNITY_IOS // --- iOS用のストアへのリンク private const string storeUrl = "https://apps.apple.com/jp/app/line/id443904275"; #elif UNITY_ANDROID // --- Android用のストアへのリンク private const string storeUrl = "https://play.google.com/store/apps/details?id=jp.naver.line.android&hl=ja"; #endif /// <summary> /// 別アプリへの遷移処理(これを呼び出す) /// </summary> public void TransitionAnotherApp() { // URLスキームを元に別アプリへ遷移 Application.OpenURL(urlScheme); // 上記に反応がない場合は一定時間後にストアへ飛ばす StartCoroutine("TransitionStore"); } /// <summary> /// ストアへ飛ばすためのコルーチン用関数 /// </summary> private IEnumerator TransitionStore() { yield return new WaitForSeconds(1f); Application.OpenURL(storeUrl); } /// <summary> /// アプリが起動しているかの /// </summary> /// <param name="pause">アプリケーションが起動しているか?</param> private void OnApplicationPause(bool pause) { // アプリに復帰したらストアを開くコルーチンを止める。 if (!pause) { StopCoroutine("TransitionStore"); } } }
コードの説明
サンプルコードはLINEを例に作っています。
ざっくり説明すると
- LINEがインストールされていれば開く
- インストールされていなければ、OSに対応したストアを開く
※iOS・AndroidともにUnityで作ったテスト用のアプリは起動しました。
LINEのURLスキームについて
最後に
今回はアプリを開く側の解説だったので、今度は開かれる側の設定を紹介できればと思います。
間違いや、「もっとこうした方が良い」などご意見がありましたら、
気軽にコメントしてください。