UnityのバックエンドをPlayFabに任せてみようと試みていたのですが、iOSのプッシュ通知設定が難しすぎたので備忘録です。
pemファイルのアップロードができない
PlayFabのプッシュ通知設定手順については、公式や紹介ブログがあるので詳細は割愛しますが、pemファイルをアップロードする段階で以下のようなエラーが発生してしまいます。
Invalid parameter: Reason: cannot be empty

pemの発行には問題無さそうで、まるでエラーの検討がつきません。
解決策
ぐぐってみると以下のフォーラムを発見。
https://community.playfab.com/questions/36895/instruction-on-using-admin-api-to-set-up-ios-push.html
一言で言うと、「管理画面のUIはバグってて使い物にならないから、AdminAPIを使え」とのことでした。
そしてこのAdmin API、pemファイルの中身をいい感じに整形してリクエストパラメータに乗っける、という癖の強い仕様になっています。
リクエストパラメータの設定方法
以下フォーラム記事を翻訳したリクエストパラメータの設定手順です。
-
テキストエディタを使ってPEMファイルを開きます。2つの文字列のセクションがあり、1つは証明書、もう1つは秘密鍵です。
-
証明書のテキストを別の空のテキストファイルにコピーします。また、"-----BEGIN CERTIFICATE-----"と"-----END CERTIFICATE-----"のマーカーも必ずコピーしてください。そして、テキストエディタのreplaceメソッドを使って、すべての改行を「\n」に正確に変換して、1行の文字列にしてください。これはどのPlayFab公式ドキュメントにも記載されていません(えっ)
-
秘密鍵部分も同様に繰り返します。鍵のテキストの改行をすべて変換します。
-
PlayFab APIを呼び出すことができる環境(Postman、.NET Coreのコンソールアプリ、またはUnityのEditorスクリプト)で、SetupPushNotificationを呼び出します。
5 リクエストの "Key "プロパティに証明書の文字列を設定します。
6 Credentialプロパティに秘密鍵の文字列を設定します。
APIのインタフェースは公式を参照。
https://docs.microsoft.com/ja-jp/rest/api/playfab/admin/title-wide-data-management/setuppushnotification?view=playfab-rest
分からなさすぎる
この人はどうやってこの解決策にたどり着けたのか謎です。すごい。。。
おかげで無事にiOSのプッシュ通知設定ができました。