Appleの審査結果の中で、外部ブラウザを呼び出している場合にSafari Viewの使用を勧められることがあります。 これは、iOSのアプリ上でSafariと同様の挙動が行えるモジュールです。 今回はReactNativeアプリでSafariViewを使う方法をご紹介します。
react-native@0.63
今回はreact-native-safari-view
を使います。
SafariView
はiOS9
以降で利用可能です。yarn add react-native-safari-view
cd ios && pod install
使用方法はSafariView
のshow()
で表示したいWeb
ページのURL
を指定するだけです。
import React, { Component } from "react";
import { View, Button } from "react-native"
import SafariView from "react-native-safari-view";
class SafariViewSample extends Component {
constructor(props) {
super(props);
}
handlePressButton = () => {
// isAvailable()でSafariViewが利用可能かチェック
SafariView.isAvailable()
.then(SafariView.show({
// urlに表示させたいURLを指定
url: "https://www.google.com/"
}))
.catch(error => {
// エラー処理
// iOS8以前などのSafariViewを利用できないOSは
// ここでメッセージを表示する等で対応します。
console.log("Safari View not available");
});
}
render = () => {
return (
<View>
<Button title="Open Safari View" onPress={this.handlePressButton} />
</View>
);
}
}
react-native-webview
との違い外部のWEB
ページを表示させるライブラリとしてはreact-native-webview
というものが有名です。
あちらとの最大の違いは、コンポーネントであるか否かだと思います。
react-native-safari-view
がボタンを押す等の関数の実行結果としてSafariView.show()
を実行した結果SafariView
が表示されるのに対して、react-native-webview
はWebView
というコンポーネントをrender
の中に組み込んで描画します。
言い換えると、react-native-webview
はreact
のライフサイクルの中に組み込むことができます。
またreact-native-webview
にはinjectJavaScript
やpostMessage
といったプロパティが用意されており、「WebView
の中で特定のボタンを押した際のイベントをアプリで拾わせる」のようにアプリとWEBページの挙動を連動させることができます。
react-native-safari-view
には今のところ(2020/10/07現在)そういった機能は用意されていないので、SafariView
で入力した結果をアプリで直接受け取るということは基本的にできません。
今回はSafariView
をreact-native
製アプリで使用するためのライブラリであるreact-native-safari-view
を紹介しました。
有名どころだとreact-native-webview
を使うかもしれませんが、iOS
に限定すればこういったライブラリもあるため、使い分けだと思います。