今回は、React Native で URL からアプリの特定のページを開くことができるディープリンクを設定する方法についてです。
参考にさせていただいた記事はこちらから。
[React Native] URL Schemeを使用する – Qiita
https://qiita.com/sekitaka_1214/items/5fcc7845fc7db30a491f
まず、ディープリンクの URL を考えます。
今回は myapp://open を使用することにしました。
次に、Android、iOS に設定を追加します。
Android は、AndroidManifest.xml の <Activity> タグ内に下記を追加します。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="open"
android:scheme="myapp" />
</intent-filter>
iOS では、Info.plist に下記を追加します。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>myapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
次に、AppDelegate.m に下記を追加します。
#import <React/RCTLinkingManager.h>
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
return [RCTLinkingManager application:application openURL:url options:options];
}
Android、iOS での設定は以上です。
最後に、React Native の設定です。
アプリが起動した際に一番最初に読み込まれるページのコンポーネントにコードを追加していきます。
サンプルコードは下記のとおりです。
import React, { Component } from 'react';
import { View, Linking } from 'react-native';
class App extends Component {
constructor(props) {
super(props);
this.state = {
url: null,
}
/**
* URL を取得する
*/
this.handleOpenURL = event => {
if (event.url) {
this.openFromUrlScheme(event.url)
}
}
/**
* URL を state に保存
*/
this.openFromUrlScheme = url => {
this.setState({ url: url });
}
}
componentDidMount() {
// アプリがURLから起動したかを検知
this.urlScheme = Linking.addEventListener('url', this.handleOpenURL)
Linking.getInitialURL().then((url) => {
this.openFromUrlScheme(url);
});
}
componentWillUnmount () {
this.setState({ url: null });
if (this.urlScheme) {
this.urlScheme.remove();
}
}
render() {
return (
<View>
......
</View>
);
}
}
export default App;
とりあえず、ディープリンクからアプリが起動した場合は、その URL を取得して、state に保存するという処理を行っています。
なお、render() については省略していますので、任意の View を追加してください。
あとは、URL が取得出来たら特定のページに遷移させたり、指定した処理を実行させたりするなど、任意の処理を追加してください。
以上、React Native でディープリンクからアプリを開く機能を実装する方法についてです。
ご参考になれば幸いです。