1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Godot用 iOS版 Firebase Cloud Messagingのプラグインを作った

Posted at

概要

以前、似た内容で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の初期化をおこなっているからです

大きな流れは以下です。

  1. リポジトリをcloneしてビルドする(*.aが作成される)
  2. 作成されたライブラリをプロジェクトにコピーする(gdipファイルも)
  3. Godot側で必要な処理を実装する
  4. iOSプロジェクトをエクスポートする
  5. 関連ライブラリは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万ユーザーになるまでは無料で使えます)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?