私は Android アプリケーションを開発しており、それにプッシュ通知機能を実装しています。
必要なときに通知を送信できるように、すべてのユーザートークンをサーバーに保持しています。
ただし、トークンをアプリケーションからサーバーに送信して保存する方法 (より正確にはいつ) については、助けが必要です。
現時点では、アプリケーションの初回起動時に、アプリケーションはトークンを要求し、トークンを UDID と共にサーバーに送信します。ただし、私の実装により、アプリケーションが最初に起動したときにトークンがまだ取得されていないため、空の文字列がサーバーに送信されます! もちろん2回目以降は普通に送信されます。(アプリケーションが起動するたびにサーバーに udid とトークンを登録します)
コードは次のようになります。
//registering for push
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
Log.i("****************","I just Registered!!");
} else {
Log.i("****************","Already registered");
}
final String android_id = Secure.getString(this.getContentResolver(),Secure.ANDROID_ID);
String jsonString = "{\"deviceUUID\":\"" + android_id + "\",\"os\":\"android\", \"pushToken\":\"" + GCMRegistrar.getRegistrationId(this) + "\"}";
. . . Sending the jsonString to my server . . .
GCMRegistrar.getRegistrationId(this)
新しいトークンを取得するための呼び出しは非同期であり、データをサーバーに送信した後に発生するため、最初は null です。
次回アプリケーションを起動すると、トークンは正常に送信されますが、修正する必要があります。
1 つのアイデアは、常に token に登録することです。
//registering for push
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
GCMRegistrar.register(this, SENDER_ID);
GCMIntentServiceprotected void onRegistered(Context context, String regId)
クラスの関数内でトークンをサーバーに送信します。そうすれば、トークンは送信する前に常に取得され、最初は null にならないようにします。
実際、これはまさに iOS アプリで行われる方法です。通常、トークンを取得する関数内でトークンをサーバーに送信するため、送信する前にトークンが実際にそこにあることを確認できます。
このアプローチは正しいですか?どう思いますか?