メインコンテンツへスキップ

Linking

Linking は、アプリへの受信リンクとアプリからの送信リンクの両方を操作するための汎用的なインターフェースを提供します。

すべてのリンク (URL) には URL スキームがあり、一部のウェブサイトは https:// または http:// で始まり、その http が URL スキームです。これを略してスキームと呼びましょう。

https の他にも、mailto スキームもおそらくご存じでしょう。mailto スキームのリンクを開くと、オペレーティングシステムはインストールされているメールアプリケーションを開きます。同様に、電話をかけたり SMS を送信したりするためのスキームもあります。組み込みの URL スキームについては、以下をご覧ください。

mailto スキームを使用するのと同様に、カスタム URL スキームを使用することで他のアプリケーションにリンクすることも可能です。例えば、Slack から マジックリンク メールを受け取った場合、Slack を起動 ボタンは、slack://secret/magic-login/other-secret のような href を持つアンカータグです。Slack の場合と同様に、カスタムスキームを処理したいことをオペレーティングシステムに伝えることができます。Slack アプリが開くと、それ自体を開くために使用された URL を受け取ります。これはしばしばディープリンクと呼ばれます。アプリにディープリンクを取得する方法については、以下をご覧ください。

カスタム URL スキームだけがモバイルでアプリケーションを開く唯一の方法ではありません。例えば、モバイルで開かれるリンクを誰かにメールで送りたい場合、カスタム URL スキームを使用することは理想的ではありません。なぜなら、ユーザーがデスクトップでメールを開く可能性があり、その場合リンクは機能しないからです。代わりに、https://www.myapp.io/records/1234546 のような標準の https リンクを使用する必要があります。モバイルでは、これらのリンクはアプリを開くように設定できます。Android ではこの機能は ディープリンク と呼ばれ、iOS では ユニバーサルリンク として知られています。

組み込みの URL スキーム

冒頭で述べたように、すべてのプラットフォームに存在するコア機能のための URL スキームがいくつかあります。以下は網羅的なリストではありませんが、最も一般的に使用されるスキームをカバーしています。

スキーム説明iOSAndroid
mailtoメールアプリを開く 例:mailto: hello@world.dev
tel電話アプリを開く 例:tel:+123456789
smsSMSアプリを開く 例:sms:+123456789
https / httpウェブブラウザアプリを開く 例:https://expo.dev

アプリでディープリンクを有効にする場合は、以下のガイドをお読みください。

情報

Android でディープリンクのサポートを追加する方法については、「アプリコンテンツのディープリンクの有効化 - ディープリンク用のインテントフィルタの追加」を参照してください。

MainActivity の既存のインスタンスでインテントを受信したい場合は、AndroidManifest.xml で MainActivity の launchModesingleTask に設定できます。詳細については、<activity> のドキュメントを参照してください。

xml
<activity
android:name=".MainActivity"
android:launchMode="singleTask">

アプリを開く URL を処理する方法は 2 つあります。

1. アプリがすでに開いている場合、アプリはフォアグラウンドになり、Linking 'url' イベントが発行されます

これらのイベントは、Linking.addEventListener('url', callback) で処理できます。リンクされた URL を持つ callback({url}) が呼び出されます。

2. アプリがまだ開いていない場合、アプリが開き、URL が initialURL として渡されます

これらのイベントは Linking.getInitialURL() で処理できます。これは、URL がある場合はその URL を解決する Promise を返します。


カスタム設定を開く

インテントを送信 (Android)

リファレンス

Methods

addEventListener()

tsx
static addEventListener(
type: 'url',
handler: (event: {url: string}) => void,
): EmitterSubscription;

url イベントタイプをリッスンし、ハンドラを提供することで、Linking の変更にハンドラを追加します。


canOpenURL()

tsx
static canOpenURL(url: string): Promise<boolean>;

インストールされているアプリが特定の URL を処理できるかどうかを判断します。

このメソッドは Promise オブジェクトを返します。指定された URL が処理できるかどうかが判断されると、Promise は解決され、最初のパラメータは開くことができるかどうかになります。

URL を開くことができるかどうかをチェックできなかった場合、または Android 11 (SDK 30) をターゲットにしていて AndroidManifest.xml に関連するインテントクエリを指定しなかった場合、Android では Promise は拒否されます。同様に iOS では、Info.plist 内の LSApplicationQueriesSchemes キーに特定のスキームを追加しなかった場合 (下記参照)、Promise は拒否されます。

パラメータ

名前説明
url
必須
string開くURL。

Web URL の場合、プロトコル ("http://", "https://") は適切に設定する必要があります!

警告

このメソッドには iOS 9 以降で制限があります。Apple の公式ドキュメントより

  • お使いのアプリが以前のバージョンの iOS とリンクされているが、iOS 9.0 以降で実行されている場合、このメソッドを最大 50 回まで呼び出すことができます。この制限に達すると、それ以降の呼び出しは常に false に解決されます。ユーザーがアプリを再インストールまたはアップグレードした場合、iOS は制限をリセットします。
  • iOS 9 からは、アプリは Info.plist 内に LSApplicationQueriesSchemes キーを提供する必要があります。さもないと canOpenURL() は常に false に解決されます。
情報

Android 11 (SDK 30) をターゲットにする場合、AndroidManifest.xml で処理したいスキームのインテントを指定する必要があります。一般的なインテントのリストはこちらで確認できます。

例えば、https スキームを処理するには、以下をマニフェストに追加する必要があります。

<manifest ...>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https"/>
</intent>
</queries>
</manifest>

getInitialURL()

tsx
static getInitialURL(): Promise<string | null>;

アプリの起動がアプリリンクによってトリガーされた場合、リンクのURLを返しますが、そうでなければnullを返します。

情報

Android でディープリンクをサポートするには、https://developer.android.com/training/app-indexing/deep-linking.html#handling-intents を参照してください。

ヒント

リモート JS デバッグがアクティブな場合、getInitialURLnull を返すことがあります。渡されるようにデバッガを無効にしてください。


openSettings()

tsx
static openSettings(): Promise<void>;

設定アプリを開き、もしあればアプリのカスタム設定を表示します。


openURL()

tsx
static openURL(url: string): Promise<any>;

指定された url を、インストールされているいずれかのアプリで開こうとします。

場所(例: Androidでは「geo:37.484847,-122.148386」、iOSでは「https://maps.apple.com/?ll=37.484847,-122.148386」)、連絡先、またはインストールされているアプリで開くことができるその他のURLなど、他のURLを使用できます。

このメソッドは Promise オブジェクトを返します。ユーザーがオープンダイアログを確認するか、URL が自動的に開かれた場合、Promise は解決されます。ユーザーがオープンダイアログをキャンセルするか、URL に登録されたアプリケーションがない場合、Promise は拒否されます。

パラメータ

名前説明
url
必須
string開くURL。

システムが指定された URL の開く方法を知らない場合、このメソッドは失敗します。非 HTTP(S) URL を渡す場合は、まず canOpenURL() をチェックするのが最善です。Web URL の場合、プロトコル ("http://""https://") は適切に設定する必要があります!

警告

このメソッドはシミュレータでは異なる動作をする場合があります。例えば、iOSシミュレータではダイヤラアプリへのアクセスがないため、"tel:"リンクは処理できません。


sendIntent()
Android

tsx
static sendIntent(
action: string,
extras?: Array<{key: string; value: string | number | boolean}>,
): Promise<void>;

extras 付きで Android インテントを起動します。

パラメータ

名前
action
必須
string
extrasArray<{key: string, value: string | number | boolean}>