Open6

expo GoにできてSafariにできない事は何なのかメモ

okuokuokuoku

https://docs.expo.dev/versions/v44.0.0

上から全部見るしかないな。。広告とかサインイン系、ストアレビュー等はまぁそもそもWebでは別ルートでやる物なので省略。

WebAssemblyアプリのターゲットとして役に立ちそうか?

元々yuniframeではWebターゲットとネイティブアプリターゲットの両方を想定してはいるものの、iOSのネイティブアプリは環境構築が非常に面倒というかMacが必須なので、その点をどうにかしたい気持ちがある。

expo GoならApp StoreからアプリをDLしてくれば誰でも使えるので、mac不要でリッチなWebAssemblyアプリケーションをiOS上で動作させられるんではないかと。

ReactNativeアプリ内でWebAssemblyを使うには react-native-react-bridge のような方法があり、

https://github.com/inokawa/react-native-react-bridge

RNのJavaScript実装であるHermesもasm.jsの実装が入ったりと多少のやる気を見せている。

https://github.com/facebook/hermes/issues/429

(iOSでは、そもそもJavaScriptの実行にJavaScriptCoreを直接使うはずなので、そこで直接WASMが実行できるはずではある。)

okuokuokuoku

プラットフォームインテグレーションとローカルストレージ

この辺は明かに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

okuokuokuoku

センサ類

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
okuokuokuoku

触覚

ExpoにはTaptic engineを使う方法が提供されている。ゲームパッドの振動等は扱えないので結局ネイティブは必要な気もするけど。

  • GestureHandler
  • Haptics
okuokuokuoku

ストレージ

Safari上のPWAストレージは基本的に信用できないため、ストレージ関連APIが存在するメリットは大きいように見える。ただ、WebViewとReactNative本体が文字列でしか通信できないため、あまり巨大なファイルを扱うのには向いていない。

  • AsyncStorage
  • DocumentPicker
  • FileSystem
  • SecureStore
  • ImagePicker
okuokuokuoku

オーディオ/ビデオ機能

PWAでも <video><audio> はあるが、 VideoThumbnails のような機能性は存在しない。

  • Audio
  • VideoThumbnails
  • Video