前提
- Androidでプッシュ通知をしようと思ったら、Firebase Cloud Messaging を使う必要がある。
- UnityでFirebase Cloud Messagingを使おうと思ったら、PlayServicesResolverと上手に付き合う必要がある。
- PlayServicesResolverはapplicationIdentifierが変わるとResolveし直す必要がある。
- バッチビルドで開発版/ストア版を切り替える時、applicationIdentifierを書き換えた直後に、明示的にResolveしたい。
解決法
BatchBuild.cs
// 強制的にResolve
GooglePlayServices.PlayServicesResolver.ResolveSync(true);
- これで強制的にResolveされる模様。
- どこにもドキュメントはないが、試しに使ってみたところ問題なさそう。(Unity2017.4.34とFirebase Unity SDK 5.7.0の場合)
- 使う場合は自己責任で!
おまけ(Resolveを走らせたくない)
- iOSの通知は従来の方法を使いたい。
- 特にFirebaseの何かを使うわけじゃない。
- Firebase Unity SDKはAndroid版だけ入れる手段がない。
- iOSのビルド時、(大抵)ビルドが終わったタイミングでResolveが走ってしまう。
- 大きな実害はないが、ログを汚してエラーを探しにくくなるし、ビルド時間がもったいない。
BatchBuild.cs
// iOSでは使わないので、自動Resolveを抑止
GooglePlayServices.PlayServicesResolver.UnlinkAutoResolution();
- これもドキュメントされてないが、余計なResolveが走らなくなったことは確認。
- もっとも、こちらは普段からAutoResolve設定をオフにしておくだけでいいのかもしれない。