2015-01-06 3 views
8

を送信せずにGCM正規の登録IDを取得し、このです:アプリがインストールされている私はGCM、シナリオを使用してアプリに問題があるメッセージ

  1. アプリはGCMのregisterメソッドは、登録を取得して呼び出しますアプリケーションがアンインストールされた "RID-1"
  2. アプリがインストールされている
  3. IDは再び
  4. アプリ
  5. 再度登録ID "RID-2" を取得GCMレジスタメソッドを呼び出します

ステップ5では、以前の登録IDを取得してモデルを更新する必要があります。

制限:
- 新しいプロファイルがあるため、サーバーは、メッセージを送信するとき、私はモデルを更新することはできません、それは登録後に行われるべきである - 私は
が 外部記憶装置を使用せずにこれを実行しようとしています新しいデバイスごとにアプリで作成されました

この情報は、古い登録IDにメッセージを送信するときに送信されるため、Googleサーバーにあります。たとえば、"RID-1"にメッセージを送信した場合、新しい(正規の)登録IDが "RID-2"という応答が返されます。私が必要とするのは、メッセージを送信せずにこの情報を取得する方法です。

もっと文脈が必要な場合は教えてください。


私はいくつかの関連質問が見つかりましたが、答えは、このシナリオには適用されません。
Registration ID duplication for GCM
gcm canonical id should be updated or not
Persistance of gcm registration id
Google Cloud Messaging - Registration ID status
Android GCM: How to detect registered canonical ids in my own server?
Handling registration ID changes in Google Cloud Messaging on Android
(すべて@eranで答え)

+1

アプリの外に保存しないと、アプリをアンインストールしたときに戻す方法がありません。私はあなたの店舗RID-1を別の場所に提案します - おそらくサーバー – Martin

+0

私はそれをサーバーに保管していますが、登録方法を呼び出す瞬間に持っていますが、 "RID-1"がその特定のデバイスの古い登録ID – pomber

+0

この問題を解決しましたか? – Ajoy

答えて

5

/send要求に"dry_run": true optionを指定することができます。

"dry_run": trueオプションを使用してデバイスにプッシュ通知が送信されないことがわかりました。サーバーにはcanonical_idsという応答があります。

ここにRubyのサンプルコードを示します。あらかじめgcmのGemをインストールしなければならない場合があります。 (フォーマット済み)$ ruby ask_canonical_ids.rb

require 'gcm' 
require 'json' 

API_KEY = "YourApiKey" 
gcm = GCM.new(API_KEY) 

registration_ids = [ 
    'OldRegistrationId', 
] 

option = { data: { 'message' => 'Hello Gcm!' }, dry_run: true } 
response = gcm.send_notification(registration_ids, option) 

p response[:canonical_ids] 

出力

[{ 
    :old => "OldRegistrationId", 
    :new => "NewRegistrationId" 
}] 

ask_canonical_ids.rb

$ gem install gcm

ここでも、お使いのデバイスは、任意のプッシュ通知を受信しません。

0

必要なのは、ユーザーが通知を受け取るべきでないということです。アプリケーションが探していないパラメータを含むメッセージを送信してください。正式なテキストとメッセージがない場合、あなたはカノニカルを取得し、あなたのアプリは通知を破棄します。

たとえば、私のCordovaアプリケーションプラグインでは、サーバーから受信したデータにキー 'message'が必要です。それ以外の場合は、通知は作成されません。

私はこれがハックのようなものだと知っていますが、私は限界があると考えています。これは達成するのが最も簡単なものです。

1

登録IDをCanonical ID(配列のインデックス位置を見つけることによって)で更新する必要があります。あなたはこの作業に従うことができますReady use Code

関連する問題