expo GoにできてSafariにできない事は何なのかメモ
上から全部見るしかないな。。広告とかサインイン系、ストアレビュー等はまぁそもそもWebでは別ルートでやる物なので省略。
WebAssemblyアプリのターゲットとして役に立ちそうか?
元々yuniframeではWebターゲットとネイティブアプリターゲットの両方を想定してはいるものの、iOSのネイティブアプリは環境構築が非常に面倒というかMacが必須なので、その点をどうにかしたい気持ちがある。
expo GoならApp StoreからアプリをDLしてくれば誰でも使えるので、mac不要でリッチなWebAssemblyアプリケーションをiOS上で動作させられるんではないかと。
ReactNativeアプリ内でWebAssemblyを使うには react-native-react-bridge
のような方法があり、
RNのJavaScript実装であるHermesもasm.jsの実装が入ったりと多少のやる気を見せている。
(iOSでは、そもそもJavaScriptの実行にJavaScriptCoreを直接使うはずなので、そこで直接WASMが実行できるはずではある。)
プラットフォームインテグレーションとローカルストレージ
この辺は明かにSafariのPWAではできない領分。PWAには真のフルスクリーンがなく、orientation lockもできない。
割と専用のパーミッションが必要なものも多いので、ExpoにあってもExpo Goではできないみたいなケースもありそうではある。
-
BackgroundFetch -- ★ Expo goでは使えないと思う
-
Battery
-
Camera -- ★ 動作させられず
-
KeepAwake -- バックグラウンドで見えないようにvideoを再生するみたいな裏技はあるけど。。
-
Notifications
-
Print
-
SafeAreaContext
-
ScreenOrientation -- ロックする裏技があった気がするけど自然な方法は無い。
-
Sharing
-
StatusBar
-
Clipboard -- ★ これは比較が必要
-
Cellular
-
NetInfo
-
Network
センサ類
Expo GoというかReactNativeは、キーボードやマウスのネイティブサポートが無い。 ...もっともSafariもpointer lockとかできない点は同じ。タッチパネルは Pressable として提供されているものの、Webと機能性にあんまり違いはない。
基本的なセンサ
Safariでは、デバイスの物理姿勢を取ることはできるものの、 Magnetometer のような絶対姿勢を取る方法がない。 Geolocationsにheadingがある が、これは動いている場合にのみ有効。
- Accelerometer
- Barometer
- DeviceMotion
- Gyroscope
- Magnetometer
歩数計と位置
WebにはGeolocationがあるが歩数計は今のところ無い。ネイティブの歩数計でも、Androidだとゼロスタートだったりする等あんまり使いやすいものでもない。iOSの歩数計は履歴が取れる。
- Pedometer
- Location
高度な認識タスク
OS側のバーコードスキャナや顔認識が使えるのは明確にメリットと言えそう。
- BarCodeScanner
- FaceDetector
触覚
ExpoにはTaptic engineを使う方法が提供されている。ゲームパッドの振動等は扱えないので結局ネイティブは必要な気もするけど。
- GestureHandler
- Haptics
ストレージ
Safari上のPWAストレージは基本的に信用できないため、ストレージ関連APIが存在するメリットは大きいように見える。ただ、WebViewとReactNative本体が文字列でしか通信できないため、あまり巨大なファイルを扱うのには向いていない。
- AsyncStorage
- DocumentPicker
- FileSystem
- SecureStore
- ImagePicker
オーディオ/ビデオ機能
PWAでも <video>
や <audio>
はあるが、 VideoThumbnails のような機能性は存在しない。
- Audio
- VideoThumbnails
- Video