LoginSignup
2

More than 3 years have passed since last update.

Ionic × FCMでiOSのPUSH配信ができなかった時の解決策メモ

Last updated at Posted at 2019-04-17

この記事について

Ionic を用いたアプリ開発をしており、PUSH配信に FirebaseCloudMessaging を使用しているのですが、iOSへのPUSH配信が出来なかったのでその時の解決方法です。

実装時の環境

  • Ionic : 3.9.4
  • Cordova: 8.0.0
  • cordova-plugin-firebase: 2.0.5
  • Java11 (APIサーバー)
  • Firebase Admin SDK

現象

Ionic側

import { Firebase } from "@ionic-native/firebase/ngx";

export class Sample {
  constructor(private firebase: Firebase) {}

public sample() {
    // 通知許可の設定
    this.firebase.hasPermission().then( data => {
      console.log("data.isEnabled:" + data.isEnabled)
      if(data.isEnabled != true) {
        this.firebase.grantPermission().then( () => {
          console.log("grantPermission:")
        }).catch((error) => {
          console.log("grantPermission Error:" + JSON.stringify(error))
        })
      }
    })
}

上記のコードで トークン の取得は正常に行えてるように見えました。

APIサーバー側

Firebase Admin SDK を用いて、
PUSH配信を行おうとすると、下記の例外が発生しました。

com.google.firebase.messaging.FirebaseMessagingException: Request contains an invalid argument.
    at com.google.firebase.messaging.FirebaseMessaging.handleSendHttpError(FirebaseMessaging.java:291)
    at com.google.firebase.messaging.FirebaseMessaging.access$600(FirebaseMessaging.java:55)
    at com.google.firebase.messaging.FirebaseMessaging$1.execute(FirebaseMessaging.java:260)
    at com.google.firebase.messaging.FirebaseMessaging$1.execute(FirebaseMessaging.java:240)
    at com.google.firebase.internal.CallableOperation.call(CallableOperation.java:36)

Caused by: com.google.api.client.http.HttpResponseException: 400 Bad Request
{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
        "errorCode": "INVALID_ARGUMENT"
      },
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.ApnsError",
        "statusCode": 400,
        "reason": "BadDeviceToken"
      },
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "field": "message.token",
            "description": "Invalid registration token"
          }
        ]
      }
    ]
  }
}

解決策

xcodeでのビルド時に、下記の設定をする必要がありました。
Xcode > File > Project Settings > Build System [Lagacy Build System]

FCMのその他の設定について

こちら の記事を参考にさせて頂きました。

最後に

結構ハマってしまったので、誰かの助けになれば幸いです・・・!

共に働くWebエンジニアを募集しています!

不動産SHOPナカジツでは自社サービスを作っていく仲間を募集しています。
詳しくはWantedlyからお問い合わせください。
お待ちしております!

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
2