経緯
GCMのAPIキー取りに行こうと思ったらFCMの方が新しいよ!こっちとったほうがいいよ(強制)という感じでFirebaseを使うかーと思い立ったため.
実際に検索してみると動作してるライブラリがあまり見つからず困っていたところ
Google Firebase Support · Issue #29 · xamarin/XamarinComponents · GitHub
を発見.ビルドして動かしてみることを決意.
追記: 2016/10/01
nugetパッケージがもうビルドされてリポジトリの中にあったので,それ使えばいいと思います.自分でビルド試してみたい方は以下の記事をお読みください.
おことわり
完全に備忘録に近いのでだいぶ不親切な感じですが,自分も完全に理解できたわけではないので...もうちょっと理解が深まったらQiitaとかにまとめます.
動作環境は
* Mac OSX El Capitan 10.11.6
* Xamarin Studio Community 6.0.2
Macでしか確認してませんが,多分Windowsでもコマンドに違いはあれど問題なくトレースできると思います(まともなWindows環境持ってないのどうなんだという)
公式リポジトリにもfirebaseのブランチは存在するが,実際にはFirebase関連のファイルが存在していない.
そのためforkリポジトリをベースに作業を行う.
git clone git@github.com:SotoiGhost/GoogleApisForiOSComponents.git
cd GoogleApisForiOSComponents
git checkout firebase
READMEに沿ってBuildを進めていく.CocoaPodsはbrewなどで入れるのが良いだろう.
cd Google.Core
sh ../build.sh --target libs
環境によってはここでエラーが出るかと思う.エラー文としては
The UTC time represented when the offset is applied must be between year 0 and 10,000.
Parameter name: offset
といったものである.これはnugetのバグだそうなので,公式リポジトリのIssueにあるように
cd Google.Core
rm ../tools/nuget.exe
curl -Lsfo ../tools/nuget.exe "https://dist.nuget.org/win-x86-commandline/v2.8.6/nuget.exe"
sh ../build.sh --target externals
とすればnugetに関するエラーが取れるはずである.
Firebaseのnupkg化
今回の目的はFCM(Firebase Cloud Messaging)を使うことなので,FCMを使えるようにビルドを行う.Firebase.ClouldMessagingは
* Firebase.InstanceID
* Firebase.Analytics
に依存している.そのためまず初めにFirebase.InstanceIDからビルドを行う.
他のプロジェクトで使い回しがしやすいようにそれぞれのプロジェクトをnupkg化する.
cd Firebase.InstanceID
sh ../build.sh --target nuget
この二行で Firebase.InstanceID/output 下に${パッケージ名}.nupkgが生成される.あとはこのnupkgをローカルのリポジトリに格納し,
nugetリポジトリの参照先をローカルに向けるだけで使用することができる.
同様にFirebase.Analytics, Firebase.ClouldMessagingのnupkg化を行い,ローカルのnugetリポジトリに格納する.
これで大まかな準備は完了である.
localのnugetパッケージを設定する - Qiita
Xamarinのプロジェクトで使ってみる
実際にXamarin.iOSのプロジェクトにnugetで追加を行う. GoogleService-Info.plist はビルドアクションをBundleResourceに設定すること.
これで完了ではなく,最後にビルドオプションを加える必要がある.
iOSのプロジェクトのプロジェクトオプション->iOS BuildのAdditional mtouch argumentsに
-gcc_flags "-ObjC"
を記入する.これがないとこんなエラー
で頭を悩ませることになる.
アプリの実装だったり証明書など
公式のドキュメントを追えばどうにかなるが,
FirebaseのPush通知をiOSで使ってみる - Qiita
SwiftでFirebaseを使ってNotificationを送ってみた(が、色々詰まった話) - Qiita
が非常に分かりやすくまとまっているので参考にするといいかもしれない.
実装はFirebaseのquick-startをほぼ丸写しで動いた(丸写しで動きそうなライブラリを探してたらここに行き着いた
その他
実際ビルドも面倒だったが,動かしてみるとトークンが取れないなどの別の障害が出てきて苦労したこと,またその解決法を書こうにもどれが効いてきたのかが実際のところ見当がついていない.
実際のプロダクトに導入する際に確かめてみようと思う.
これを出すために何時間かけてしまったんだ...