2017-08-19 4 views
1

Firebase Cloud Messagingを使用してiOSアプリにプッシュメッセージを配信しています。 マイFCMのセットアップは、複数のFirebaseアプリケーションと単一Firebaseのプロジェクトで構成されていますFIrebase FCM - プッシュメッセージが間違ったアプリに終わる

FB Project 
    App1 Android 
    App1 iOS 
    App2 Android 
    App2 iOS 
    ... 

さて問題は、私のiOSアプリの一つに送信されたFCMメッセージが iOSアプリで受信してしまうということである(へ送りますApp1 iOS - App2 iOSがメッセージを受け取る)。メッセージを配信

  • (セクション4を参照)APNSが正常に動作経由

    1. が直接メッセージを配信:私はことが判明 https://firebase.googleblog.com/2017/01/debugging-firebase-cloud-messaging-on.html

      :私は、この優れたデバッグガイドに従っている問題をデバッグするには

      cURL(セクション5)でFCMを使用すると、ランダムなアプリにメッセージが送信されます。

    私のデバイス上のクライアントアプリケーションの両方に、と同じ firebaseデバイストークンがあることがわかりました。したがって、Firebaseはトークンレベルでアプリケーションを区別するようには見えません。
    まだメッセージがランダムなものではなくすべてで受信されると思います。

    質問1:これはFirebaseの予想される動作ですか?

    • :含むランダムな結果を生成し、そのチャネルに送信

      - (void)application:(UIApplication *)application 
      didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
          [[FIRMessaging messaging] subscribeToTopic:@"/topics/app1-news"]]; 
      } 
      

      は、今、実際のアプリで私は、異なるチャネルに登録するようなアプリ識別子を付けることによって異なるアプリケーションをターゲットに意図した(App1)で受信したメッセージ

    • 他のアプリケーション(例えばApp2)によって受信されたメッセージ
    • メッセージを受信どのように私は得ることができます。メッセージはすべて

    質問2で受信していない1つのアプリ(App2の、App2の)

  • メッセージで複数回受けた複数のアプリケーション(App1の、App2の、...)
  • によってDこの権利?

  • 答えて

    2

    これは予期した動作ではありません。 FCMトークンは、認証されたエンティティ(Firebaseプロジェクト全体でも同じ)とスコープ(通常は「*」)でキーチェーンに格納されます。しかし、キーチェーンは、アプリのバンドル識別子に基づいてそれらを格納しています。これは、それらを互いに分離する必要があります。

    健全性チェック:iOSアプリごとに異なるGoogleService-Info.plistファイルを使用していますか?

    また、共有キーチェーンアクセスグループを使用していますか?あなたの資格でkeychain-access-groupsのリストの一番上にある共有キーチェーンアクセスグループはありますか?これは、SDKが誤って他のアプリのFCMトークンを見つけ出す方法を説明します。documentation for Keychainで:

    あなたが明示的にアイテムの属性辞書にkSecAttrAccessGroupキーを指定しない場合は、あなたのアプリは、キーチェーン項目を作成すると、キーチェーンのサービスは、上記のように命じた(アプリのアクセスグループ配列の最初のグループを使用しています)をデフォルトのアクセスグループとして使用します。アプリにkeychain-access-groupsの資格がある場合、Keychain Servicesは最初のサービスを使用します。それ以外の場合は、常に存在するアプリケーション識別子を使用します。したがって、デフォルトでは、keychain-access-groupsの資格を追加しない限り、アプリはそれがアクセスできるキーチェーンアイテムを作成します。

    SDKは、小さなキーチェーン項目を作成しようとすると、アクセス・グループを見て、「デフォルトのアクセス・グループ」を決定(keychain-access-groupsリストの最初のがデフォルトです)。通常、キーチェーンアクセスグループでは、アプリケーションのアプリケーション識別子を最初の項目として、次に共有グループを指定します。そうすることで、特に明記しない限り、共有アクセスグループに明示的に格納されていない限り、キーチェーンアイテムは個々のアプリに書き込まれます。

    +0

    ありがとうございました!キーチェーンがキーワードでした!ここに記載されている問題の回避策として、キーチェーンの共有を追加しました:https://firebase.googleblog.com/2016/08/ios-10-xcode-8-and-swift- 3.html。共有キーチェーンプッシュメッセージを無効にした後は、期待どおりに動作します! –