web-dev-qa-db-ja.com

authorizedEntityとは何ですか?自分のアプリでgcm_defaultSenderIdが見つかりません

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_ファイルは別の場所にあります。

29
sitting-duck

R.string.gcm_defaultSenderId値は、定数を定義したgoogle-services.jsonファイルを使用するGradle google-servicesプラグインによって生成されます。

プラグインはGradleに適用されます:

apply plugin: 'com.google.gms.google-services'

詳細については、 AndroidでのGCMクライアントの実装 を参照し、google-services.jsonファイルを取得し、開発者コンソールでGradleとアプリを設定する方法を参照してください。

37
peter.bartos

その文字列の代わりに入力する必要があるのはプロジェクト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);
13
Ramesh