2016-06-28 10 views
5

デバイスグループ機能を使用するアプリケーションを開発します。私が理解しているように、私は最初に現在の登録トークンをonTokenRefreshという方法でAndroidクライアントに送ってから、その登録トークンを適切なデバイスグループに追加する(または存在しない場合は作成する)必要があります。しかし、Androidアプリユーザーがアプリのデータを何度も消去するなど、登録トークンが漏れてしまう可能性があります。それを防ぐ方法は? 20人の制限を超えるとどうなりますか?そして、既にグループが存在するかどうかを確認することは可能ですか?Firebase Cloudメッセージングデバイスグループリーク

+1

クロスポスト:https://groups.google.com/d/msg/firebase-talk/B8wG6CMC8lA/X6KvwaydAwAJ –

+0

4か月後に進歩がありますか?デバイスグループ内で期限切れのトークンをどのように扱うべきかを知りたい。デバイスを一意に識別する必要があります。 – Galya

+1

@Galyaデバイスグループを使用しないことにしました。ユーザーIDを持つトピックを使用するだけです。 – Matis

答えて

3

例えばAndroidアプリのユーザーが5月複数回のアプリのデータを消去ように私は、しかし、登録トークンをリークするための可能性を参照してください。それを防ぐ方法は?

を防ぐ場合は、アプリケーションマネージャでアプリのデータ消去を無効意味、あなたはこのpostを参照してください。 accepted answerは不可能であると述べています。

しかし、Jakar's answerではなくクリアデータの、が代わりに表示されますスペースを管理し、回避策を提供します。まだ試していないので、私は確かに言うことができません。 upvotesはそれ自体のために話す。

しかし、これまでのアプリのデータがユーザーによってクリア/消去された場合、あなたはFirebaseInstanceIdドキュメントに記載されているもので参照すべきである:以外

インスタンスIDが安定しているとき:

  • のAppは、インスタンスIDを削除

  • アプリケーションは新しいデバイスに復元され
  • ユーザー/再インストールするアンインストールアプリケーション

  • ユーザが新しいInstance IDが生成され、アプリケーションが許可は、以前onTokenRefresh()を実現生成されたトークン再作成する必要がある上記の場合にはアプリデータ

をクリアします。


20人のメンバーの上限を超えた場合はどうなりますか? ...あなたは最大よりも多くのデバイスグループにデバイスを追加するに関連している場合の質問はここにある..しかし何

わからない

は、それが明確に述べられて見つけることができませんでしたFCM: Device Group Messagingドキュメントが、あなたがグループに
セクションを追加します を参照する場合、それは述べている:

を正常な動作がnotification_keyを返します。

だからから、私はあなたがすでに大変疲れデバイスグループに別のデバイスを追加しようとした場合、操作はに失敗すると思います。

あなたが20歳以上になると思うなら、代わりにTopicsを使用することをお勧めします。しかし、私はあなたのユースケースが何であるか本当に分かりません。


そして、それはいくつかのグループがすでに存在しているかいないかどうかを確認することは可能でしょうか?このため

は、あなたがnotification_keynotification_key_nameを利用する必要があります。 docs通り:

notification_key_name与えられたグループに固有の名前または識別子(例えば、それはユーザ名であってもよい)です。 notification_key_nameおよびnotification_keyは、登録トークンのグループに固有です。同一の送信者IDに対して複数のクライアントアプリがある場合、notification_key_nameが一意のであることが重要です。これにより、メッセージは意図したターゲットアプリにのみ送信されます。

、文重視:デバイスグループの

基本管理 - デバイスを作成し、削除するグループを、および追加または削除は、 - 通常、アプリケーションサーバを介して行われます。

すでに存在するかどうかを確認できるように、キーと名前はサーバー上にある必要があります。

+2

「防止する」とは、登録IDの漏洩を防ぐことを意味していました。アプリのデータを消去することは、それらを迅速にリークする方法の一例に過ぎません。新しいトークンが割り当てられ、古いトークンが削除されていない場合は、リークが発生します。 – Matis

+0

私は参照してください。 - *新しいトークンが割り当てられ、古いトークンが削除されない場合、リークが発生する* - 単純にサーバー側で処理されないのですか? Canonical Idsを利用していますか?他のシナリオは、クライアントアプリケーション自体で処理する必要がありますか? –

+3

正準IDは解決策ですが、FCMドキュメント(GCMのみ)には明確に記載されていません。 (https://firebase.google.com/docs/cloud-messaging/server#responseに関する記述がありますが、正式IDが返される理由や時期については説明していません)。しかし、私はデバイスグループを使用したいので、私は個々のデバイスの登録IDをグループに追加するときにのみ操作します。私は最後の質問を明確にしたい:私は私のアプリケーションのサーバーにグループを格納する必要があることを知っているが、FCMサーバーと同期が外れてしまうことがあるので、 'notification_key_name'が存在します。 – Matis

2

私は現在、いくつかの成功を収めていますが、まだ十分にテストされていないか、またはスケーリングされていません。

アプリでは、firebaseをバックエンドとして使用しており、FCMを追加してプッシュ通知を実装しています。

ユーザーが異なるデバイスまたは複数のデバイスに存在する可能性がある場合に対処するグループが必要です。

Iは

profiles 
    -profile_id 
    -FCM 
     -notification_key:value 
     -registration_ids 
     -device_1_uuid:token_for_device_1 
     -device_2_uuid:token_for_device_2 

場合FCMノードすなわちnotification_keyない無registration_ids下のデータが存在しないでユーザ最初の徴候、すなわちプロファイルを有する各デバイスの値とREGISTRATION_ID(トークン)notification_key返さ格納

ユーザーがサインインするたびに、profile_idに接続されます。

私はnotification_key(任意のデバイス上で、すなわち最初の時間)が存在しない場合、私はnotification_key_nameとしてPROFILE_IDを使用してグループを作成し、戻ってくるnotification_keyを保存FCMトークンを取得し、

新しいデバイスにnotification_key(返信サインインまたは最初のサインイン)がある場合は、現在のデバイスのregistration_idがあるかどうかを確認し、そうでない場合は新しいデバイスに初めてログインします。 device_uuid:registration_idsへのトークンのペア。

リターンサインオンがある場合、FCMグループから格納されたトークンを削除し、格納されている登録IDの古いトークンを、今取得したトークンに置き換えます。

そのユーザー(プロファイル)が使用しているすべてのデバイスにprofile_idを送信してメッセージを送信できるようになりました。古いものを削除するので、トークンを漏らしてはいけません。

しかし、私は知る方法がありません。なぜなら、グループとトークンを読み取ってただちにグループを清掃できるAPIがないように思われるからです。

また、私の初期コードが盗まれました。私はnotification_keyを取得しなかったので、私のグループのいずれかに追加、削除、または何もできません。私は火の雲の中に横たわって焼かれたグループを永遠に残さなければならないという考えが嫌いです。

私は、FCMがより多くのAPIアクセスを提供して、私たちがその場所をきちんとした状態に保つのに役立つはずだと思います。

+0

私はほぼ同じアプローチをしています。質問があります。デバイスグループに関連付けられているデバイスがない場合、デバイスグループは自動的に削除されます。あなたはこのケースをどのように扱いますか?私の理解によれば、トークンはもはや有効ではないが、それはFCMのグループから自動的に削除される。 –

+0

デバイスから置換されたためにグループからトークンを削除すると、それが最後のトークンだけの場合はFCMグループが削除され、新しいトークンを登録しようとするとエラーが発生します。そのテキストメッセージ、つまり「notification_key not found」でエラーをトラップし、その上にcreate_group関数を呼び出して、以前と同じnotification_keyを持つ新しいグループを再作成し、それにトークンを追加します。これはちょっとハッキリですが、同様の方法で、新しいデバイスの追加トークンを登録するための条件としてエラーテキスト "notification_key already exists"を使用します。 – blythburgh

+0

はい、これは私が今取り扱っている方法ですが、これは少しハッキリしているので、より良いアプローチがあるのだろうかと思っていました。 –

関連する問題