へなちょこプログラマ blog

ゲーム制作・プログラミング・趣味について記載するブログ

【Unity】ディープリンク実装

目次

概要

Webページで、 AppStoreとかGooglePlayStoreのアイコンがあってタップすると

  • アプリがインストール済みならアプリ起動
  • 未インストールならストアへ飛ばされる

みたいなやつ見かけないですか?

あれを簡易的にC#だけでアプリ上で実装するためのコードです。

このスマホアプリやWebページからアプリに飛ぶことを「ディープリンク」とか「ディープリンキング」と呼ぶらしいです。
詳しく知りたい方は調べてみてください。

きっかけ

この機能を実装しようと思ってネットで色々調べても、難しそうなやつしか出てこなかった

みたいなやつしかなかった。

どっちもハードルが高そうだったので「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");
        }
    }
}

ゲームを動かす技術と発想 R

ゲームを動かす技術と発想 R

コードの説明

サンプルコードはLINEを例に作っています。

ざっくり説明すると

  1. LINEがインストールされていれば開く
  2. インストールされていなければ、OSに対応したストアを開く

iOSAndroidともにUnityで作ったテスト用のアプリは起動しました。

LINEのURLスキームについて

developers.line.biz

最後に

今回はアプリを開く側の解説だったので、今度は開かれる側の設定を紹介できればと思います。

間違いや、「もっとこうした方が良い」などご意見がありましたら、
気軽にコメントしてください。