概要
以前、似た内容でGodot用iOS版 Firebase Analyticsのプラグインを作りました
今回はプッシュ通知を送りたかったのでFirebaseのCloud Messagingのほうのプラグインになります。
作成したプラグインはこちらです
https://github.com/funseek/godot-ios-firebase-message
プラグインの作成方法は上記のプラグインと流れはまったく同じです。
PlayFabでもプッシュ通知を送りたい
現在作成しているゲームではバックエンドにPlayFabを利用しています。
全員にプッシュ通知をする場合はFCM、何かのトリガーで個別にプッシュ通知を送りたい場合はPlayFab側で送信という想定です。
ですので、PlayFab側にもプッシュ通知で必要なトークンを登録してあげないといけないです。
PlayFabではそれ専用のAPIが用意されていますのでそれを利用します。
https://docs.microsoft.com/ja-jp/rest/api/playfab/client/platform-specific-methods/register-for-ios-push-notification?view=playfab-rest
トークンを登録すると400エラー
上記APIを実行すると以下のエラーが発生しました
Invalid parameter: Token Reason: iOS device tokens must be no more than 400 hexadecimal characters
FCMのSDKで取得できる、fcmTokenを渡したのですが、これはどうやらFCM側で発行されるトークンであり、ここで渡さなければいけないのは、APNSトークンのほうでした。そちらを渡すようにして無事解決
https://firebase.google.com/docs/cloud-messaging/ios/client#monitor-token-refresh
https://developer.apple.com/documentation/appkit/nsapplicationdelegate/1428766-application?language=objc
使い方
上記エラーなども踏まえてFCMトークンとAPNSトークンの両方を取得できるようにしました。
このライブラリはiOS版Firebase Analyticsも必要となります。
※何故かというと、Analytics側のライブラリでFirebaseの初期化をおこなっているからです
大きな流れは以下です。
- リポジトリをcloneしてビルドする(*.aが作成される)
- 作成されたライブラリをプロジェクトにコピーする(gdipファイルも)
- Godot側で必要な処理を実装する
- iOSプロジェクトをエクスポートする
- 関連ライブラリはCocoa Podsで管理しているので、Xcode側でpod installする
詳しくはREADMEに記載あるので、Godot側の処理だけ記載します。
if Engine.has_singleton("FirebaseMessage"):
var singleton = Engine.get_singleton("FirebaseMessage")
singleton.get_fcm_token() # FCMトークンの取得
singleton.get_apns_token() # APNSトークンの取得(PlayFab側にはこちらを送信する)
firebase_message.connect('did_receive_registration_token', self, '_did_receive_registration_token') # signalの受け取り設定
# signalの受け取り
func _did_receive_registration_token(fcm_token, apns_token):
print(fcm_token)
print(apns_token)
注意点としては、get_fcm_tokenとget_apns_tokenはdid_receive_registration_tokenが呼ばれてから設定されるので、その前に呼ぶとnullが返ります
まとめ
GodotはiOSのプラグインを作るのが若干面倒ですね。そのせいかAndroidはあってもiOSのプラグインがないというケースが多い気がします。
あと、PlayFabはゲーム専用mBaaSで非常に便利なのでおすすめです(登録数が10万ユーザーになるまでは無料で使えます)