Google Cloud Messagingでアプリを実行しようとしています。 github にあるGoogle Cloud Messagingクイックスタートアプリをフォローしています。
クイックスタートアプリのある時点で、Google Cloud Messagingサービスに登録トークンを要求して、アプリのこのインスタンスがクラウドと通信できるようにします。
私はこのコード行を見つけます:
_RegistrationIntentService.Java::onHandleIntent(Intent intent):
InstanceID instanceID = InstanceID.getInstance(this);
String gcmRegistrationToken = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
_
私を混乱させている部分は、この値です。_R.string.gcm_defaultSenderId
_クイックスタートアプリで定義されていますが、自動的に生成されます。
アプリにその値を生成させるにはどうすればよいですか?
heregetToken(Java.lang.String, Java.lang.String)
であるInstanceID.getTokenのドキュメントを検索します
_InstanceID.getoken
_は、インスタンスIDで識別されるアプリケーションに代わってアクションを実行するエンティティ(例:クラウドサービス)を承認するトークンを返します。これは_OAuth2
_トークンに似ていますが、ユーザーではなくアプリケーションインスタンスに適用される点が異なります。
関数ヘッダーは次のようになります。
_public String getToken (String authorizedEntity, String scope)
_
getToken
が必要とする最初の引数は_String authorizedEntity
_です。だから、このauthorizedEntity Stringはどうなっているのでしょうか?
リクエストを行っているアプリのインスタンスを明確に識別しますが、どのように生成するのですか?クイックスタートアプリでは、_res/value/strings.xml
_で定義されたものが見つかりません。R.Javaおよび_app/build/generated/res/google-services/debug/values/values.xml
_で定義されたものしか見つかりません
次のようになります。
_<resources>
<string name="gcm_defaultSenderId">175643285</string>
</resources>
_
そのファイルには文字列が1つだけあり、そのファイルはプロジェクト構造の奥深くに埋もれています。この_gcm_defaultSenderId
_がプログラムで生成されているコードのどこにも見つかりません。
混乱しているのは、その文字列がそこにあることをどのようにして知ることになったのですか?私はその文字列を定義したことはなく、「_gcm_DefaultSenderId
_を解決できません」をグーグルで検索しても結果は得られません。私は自分のアプリにGoogle Cloud Messagingを実装しようとしているので、もちろん自分のアプリはその文字列を生成することを自動的に認識しません。そのID番号をどのように作成するのですか?
これが、InstanceToken.getTokenが必要とするauthorizedEntity文字列を理解し、getTokenに渡す文字列を適切に生成できるようにすることが重要だと思う理由です。おそらく私の考えは完全に間違っており、おそらくgcm_defaultSenderIdを生成することは想定されていませんが、R.Javaを変更することは想定されておらず、_values.xml
_ファイルも「生成された」フォルダーの下にあります。
助けてください?検索で答えが見つかったら、喜んで答えを投稿します。助けていただければ幸いです、注:私のプロジェクトはEclipseからGradleにエクスポートされたため、Eclipseプロジェクト/フォルダは引き続き保持されます構造、それは問題を引き起こさないはずですが、_values.xml
_ファイルは別の場所にあります。
R.string.gcm_defaultSenderId
値は、定数を定義したgoogle-services.json
ファイルを使用するGradle google-servicesプラグインによって生成されます。
プラグインはGradleに適用されます:
apply plugin: 'com.google.gms.google-services'
詳細については、 AndroidでのGCMクライアントの実装 を参照し、google-services.json
ファイルを取得し、開発者コンソールでGradleとアプリを設定する方法を参照してください。
その文字列の代わりに入力する必要があるのはプロジェクトIDです。次のリンクを参照してください。
https://developers.google.com/instance-id/guides/Android-implementation
トークンを生成するには、Google Developers Consoleで生成されたプロジェクトIDが必要です。
String authorizedEntity = PROJECT_ID; // Project id from Google Developers Console
String scope = “GCM”; // e.g. communicating using GCM, but you can use any
// URL-safe characters up to a maximum of 1000, or
// you can also leave it blank.
String token = InstanceID.getInstance().getToken(authorizedEntity,scope);