2015-06-04 10 views
28

Próbuję uruchomić aplikację z Google Cloud Messaging. Obserwuję aplikację Szybki start Google Cloud Messaging, którą można znaleźć tutaj pod adresem github.Co to jest authorizedEntity? Nie można znaleźć pliku gcm_defaultSenderId we własnej aplikacji

W aplikacji QuickStart w pewnym momencie prosimy usługę Google Cloud Messaging o token rejestracji, aby ta instancja naszej aplikacji mogła komunikować się z chmurą.

znajdę ten wiersz kodu:

RegistrationIntentService.java::onHandleIntent(Intent intent): 

InstanceID instanceID = InstanceID.getInstance(this); 
String gcmRegistrationToken = instanceID.getToken(getString(R.string.gcm_defaultSenderId), 
        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

część, która jest mylące mnie jest to wartość: R.string.gcm_defaultSenderId To jest zdefiniowana w swojej aplikacji QuickStart ale jest generowany automatycznie.

W jaki sposób mam wygenerować tę wartość dla mojej aplikacji?

Patrzę docs dla InstanceID.getToken co jest heregetToken(java.lang.String, java.lang.String)

InstanceID.getoken zwraca tokenu, który upoważnia jednostki (przykład: cloud service), aby wykonać działanie na rzecz zastosowania zidentyfikowane przez Instance ID. Jest to podobne do tokena OAuth2, z tym że dotyczy ono instancji aplikacji zamiast użytkownika.

nagłówku funkcji wygląda następująco:

public String getToken (String authorizedEntity, String scope) 

widzę, że pierwszy arg że getToken chce to String authorizedEntity. , więc co to za autoryzowany ciąg znaków?
Jednoznacznie identyfikuje wystąpienie aplikacji wysyłającej żądanie, ale jak mam ją wygenerować? W aplikacji QuickStart nie mogę znaleźć to określono w res/value/strings.xml, mogę tylko znaleźć to określono w R.java i app/build/generated/res/google-services/debug/values/values.xml

To wygląda następująco:

<resources> 
<string name="gcm_defaultSenderId">175643285</string> 
</resources> 

Jest tylko jeden ciąg, który się tym, że plik, a ten plik jest głęboko zakopany w strukturze projektu. Nie mogę znaleźć nigdzie w kodzie, w którym programowo generowane jest to gcm_defaultSenderId.

Jestem zdezorientowany, ponieważ, skąd miałem wiedzieć, że sznurek tam był? Nigdy nie zdefiniowałem tego ciągu, a użycie google dla "nie można rozwiązać gcm_DefaultSenderId" nie daje żadnych wyników. Próbuję zaimplementować Google Cloud Messaging w mojej własnej aplikacji, więc oczywiście moja własna aplikacja nie będzie automatycznie wiedzieć, jak wygenerować ten ciąg. Jak mam zrobić ten numer identyfikacyjny?

Dlatego uważam, że ważne jest, aby zrozumieć, co to ciąg znaków authorizedEntity, że InstanceID.getToken chce, tak, że mogę właściwie wygenerować jeden, aby dać getToken. Być może mój pomysł jest całkowicie błędny, być może nie mam generować gcm_defaultSenderId, ale wiem, że nie powinienem zmieniać R.java, a plik values.xml również znajduje się pod "wygenerowanym" folderem.

Pomoc proszę? Jeśli znajdę odpowiedź w moich wyszukiwaniach, z przyjemnością opublikuję odpowiedź.Każda pomoc doceniona, uwaga: mój projekt został wyeksportowany do Gradle z Eclipse, więc nadal będzie miał strukturę projektu/folderu Eclipse, która nie powinna powodować żadnych problemów, ale plik values.xml znajduje się w innym miejscu.

+1

Identyfikator nadawcy pochodzi z konsoli programistów, ale jeśli wykonałeś krótki krok, został wygenerowany w pliku google-services.json skopiowanym do katalogu projektu. – Koh

+0

Możesz upuścić identyfikator R.string i otrzymać wartość według nazwy: http://stackoverflow.com/a/38995785/606351 – Vaiden

Odpowiedz

37

Wartość R.string.gcm_defaultSenderId jest generowany przez Gradle google-usług plugin który wykorzystuje plik google-services.json z określonych stałych.

Wtyczka jest stosowana w Gradle:

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

Aby uzyskać więcej informacji sprawdź Implementing GCM Client on Android i zobaczyć, jak uzyskać plik google-services.json i set-up Gradle & aplikację w konsoli programisty.

+2

To jest właściwa odpowiedź. Plik google-services.json musi znajdować się w folderze głównym aplikacji, aby wtyczka Gradle mogła automatycznie generować R.string.gcm_defaultSenderId. Aby uzyskać plik google-services.json, należy postępować zgodnie z następującym oficjalnym przewodnikiem: https://developers.google.com/cloud-messaging/android/client – Sotti

+0

Mam tę wtyczkę zainstalowaną, ale ta wartość ciągu nie rozwiązuje problemu z –

+0

jest poprawna odpowiedź .. podziękowania –

12

Jest to identyfikator projektu, który musimy wypełnić w miejscu tego ciągu. Proszę zapoznać się z poniższym linkiem.

https://developers.google.com/instance-id/guides/android-implementation

Generowanie tokeny wymaga projektu identyfikator generowany przez Google Developers Console.

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); 
+0

zaoszczędzisz mi mnóstwo poszukiwań sir :) – Kushan

+0

Miło mi poznać Kushan :) Ale jeśli są na najnowszych usługach Google użyj odpowiedzi @ petera! – Ramesh

+0

Właściwie szukałem api InstanceId i używam go do usuwania tokenów .. dlatego potrzebowałem authEntity. Odpowiedź Piotra była tym, czego używałem. To spowodowało problemy z tobą w twarz z powodu domyślnego użycia analityki aplikacji, która jest dostępna w usłudze i domyślnie api Firebase włącza ją. Każda usługa moja miała nadwyżkę 60-70 mb z powodu tego bzdury – Kushan