Expoを36から37にアップグレードして仕様が変更されて苦労した2つの事

TL, DR

  • Deep Linkの仕様が変更されて36まではmyapp://user/profileだったのがmyapp:///user/profile/が1つ多くなったのでWebからアプリに遷移させる場合既存のpathのままだとアプリが立ち上がるだけで該当ページに遷移しないので注意して下さい。
  • ExpoのFacebook Authの仕様が変更されてapp.jsonにfacebookDisplayNamefacebookAppIdfacebookSchemeを記述しで下さい。なお開発環境では動かずビルドしてstandaloneモードで動作確認する必要があります。

これ最初Expoを37にアップグレードして2,3日くらいしてから同僚に

アプリがWebからアプリに飛ばないんだけど?

と言われて初めて気付きました。確かにアプリは立ち上がるけどページ遷移しない。なんでだ・・・?ディープリンク周りのコードはいじってない。思い当たるのはExpoのアップグレード。しかしExpoのchangelogをパッとみてもbreaking changeにディープリンクに関する仕様変更はない。しかしbug fixにいくつか怪しい変更があった。結論から書くとこれが該当の変更プルリク。
https://github.com/expo/expo/pull/6781/files
linking.mdを見ると、うーん、確かに/が1つ増えてますね。。。いや、めちゃめちゃでかい変更やん!!!Expoを37にアップグレードする際はディープリンクのパスをmyapp://からmyapp:///に変更することをお忘れなく。

Facebookログインしようとするとアプリがクラッシュする

僕もこれ今日解決したばっかです。まあ、ちゃんと変更を追えって話なんですが変更のプルリクはこれ。
https://github.com/expo/expo/pull/7931/files
読んでいくと途中にこんな記述が。

- In the Expo Client, all of your Facebook API calls will be made with Expo's Facebook App ID. This means you will not see any related ad info in your Facebook developer page while running your project in the Expo Client.  
- To use your app's own Facebook App ID (and thus see any related ad info in your Facebook developer page), you'll need to [build a standalone app](../../distribution/building-standalone-apps/).  

どうやら開発環境ではFacebookのAPIにリクエストを送るときにExpoのFacebook AppIDが送られてしまうらしい。つまり開発環境ではFacebookログインはできないのでビルドしてstandaloneモードで動作確認する必要があるっぽい。ちなみに筆者はこれに気がつかず開発環境でFacebookログインをしようとして

Possible Unhandled Promise Rejection (id: 0):  
[Error: Unsuccessful debug_token response from Facebook: {"error":{"message":"(#100) The App_id in the input_token did not match the Viewing App","type":"OAuthException","code":100,"fbtrace_id":"********"}}]  

というエラーをひたすら返却された。。。ドキュメントにある通りapp.jsonでfacebookSchemeとfacebookAppIdとfacebookDisplayNameを記述してビルドしてstandaloneモードで動くか確かめましょう。

結論

Expo意外と仕様変更があるので変更をちゃんとGitHubをみて追いましょう。質問のある方はコメントでお願いします。