1つの簡単な質問と1つの難しい質問:
1)送信者ID(Gmailアカウント)は、電話の[設定]-> [アカウント]で追加する必要があるものとは異なる場合がありますか?
2)アカウントを自動的に追加する必要があり(コーディング..)、それを解決しようとしていますが、追加したいアカウントのメールを[設定]-> [アカウント]で非表示にすることはできますか?私は人々にメールアドレスを知られたくない。
ありがとう。
1つの簡単な質問と1つの難しい質問:
1)送信者ID(Gmailアカウント)は、電話の[設定]-> [アカウント]で追加する必要があるものとは異なる場合がありますか?
2)アカウントを自動的に追加する必要があり(コーディング..)、それを解決しようとしていますが、追加したいアカウントのメールを[設定]-> [アカウント]で非表示にすることはできますか?私は人々にメールアドレスを知られたくない。
ありがとう。
電話の GMail アカウントは、C2DM メッセージの受信者を識別するために内部的に使用されます。最初にクライアントが自分自身を登録し、次に (C2DM メッセージが送信されると) 登録されたすべてのクライアントが C2DM メッセージを受信します。複数のクライアントが、C2DM メッセージのレシピエントとして自分自身を登録できます。
Google C2DM サイトから (「登録」を参照):
Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
registrationIntent.putExtra("sender", emailOfSender);
startService(registrationIntent);
パラメーター app は、送信者 ID (var emailOfSender の上のコード内) とは別に、登録プロセスで使用されるパッケージ名を識別します。デバイスの GMail アカウントはコードでは使用されていませんが、C2DM サーバーでモバイル デバイスを識別するために内部的に使用されることがわかります (Android 実装がクライアント側の GMail アカウントを直接提供するか、GMail アカウントにリンクされた ID を提供します)。 )。
Googleのコメント: Android 2.2 以降を実行し、Market アプリケーションもインストールされているデバイスが必要です。これは、Market アプリが C2DM サーバーへの接続を維持するためです。登録 ID は、すべてのデバイスで異なります。サーバーから C2DM メッセージを送信する前に、クライアントはサーバーに登録 ID を伝える必要があります。
(サーバー側で) C2DM メッセージを送信するためのアプリケーションを作成する場合は、GMail アカウント (デバイスで使用した SenderID) も必要です。通常、「アプリケーションごとに 1 つの GMail アカウント」というパターンが使用されます。C2DM に登録するときは、受信側の Android アプリの SenderID と名前空間を登録フォームに入力する必要があります。これは、デバイスを登録するためにクライアントで使用されたものとまったく同じ情報です。
どちらの GMail アカウントも公開されていません。関係は n-1-m です。これは、n 個のクライアントと m 個のサーバーが 1 つの C2DM サーバーに自分自身を登録していることを意味します。どの GMail アカウントが使用されているかを知っているのは、Google (C2DM サーバー) だけです。
携帯電話で使用されている実際の GMail アドレスが 1 つあります。エミュレータで使用するGMailアドレスをデバッグしています。次に、作成した C2DM 対応アプリケーションごとに 3 つの GMail アカウントを持っています。
申し訳ありませんが、私の質問が少し(またはかなり)ばかげている場合は、私が理解しているように:
registrationIntent.putExtra("sender", emailOfSender);
emailOfSender の代わりに、C2DM のニーズに合わせて実際のメール アドレスを入力する必要がありますが、このメール アドレスは、別のデバイスにインストールされているアプリごとに異なる必要がありますか?つまり、このメール アドレスをデバイス設定のどこかに取得する必要がありますか?それともハードコードできますか?
http://www.vogella.com/articles/AndroidCloudToDeviceMessaging/article.htmlからチュートリアルを繰り返していたところ、次のことに気付きました。
// Sender currently not used
intent.putExtra("sender", "nonsenses@gmail.com");
サーバーテスト部分を開発している間、私はそれをそのままにしておきました:
public class SecureStorage {
public static final String USER = "your_registeredUser";
public static final String PASSWORD = "your_password";
}
ここに実際の資格情報があり、アプリケーションにメッセージを送信しようとしたときに、応答 200 を受け取りましたが、デバイスにメッセージがありませんでした。nonsenses@gmail.com をサーバー側アプリケーションで使用される電子メール アカウントに変更するとすぐに、通知を受け取りました。