2012-04-26 9 views
11

Nota: prima di passare il tempo a leggere, sappi che C2DM è a sua volta deprecato e sostituito da GCM (http://developer.android.com/ guida/google/GCM/c2dm.html)C2DM con PHP utilizzando OAuth2.0 (ClientLogin è obsoleto!)

- domanda originale -

dobbiamo codice di esempio per l'implementazione di codice lato server PHP per spingere i messaggi ai dispositivi Android tramite C2DM?

Ho cercato per molti esempi di codice che utilizzano il vecchio metodo di autenticazione ClientLogin che è deprecato. Riferimento: https://developers.google.com/accounts/docs/AuthForInstalledApps (Importante:. ClientLogin è stato ufficialmente deprecato a partire dal 20 aprile 2012. Si continuerà a lavorare secondo la nostra politica di disapprovazione, ma vi consigliamo di passare alla OAuth 2.0 non appena possibile)

+0

hai guardato il framework yii http://www.yiiframework.com/extension/c2dm/ – Suchi

+1

Non vedo l'ora che arrivi la risposta ... +1 alla domanda. – drulabs

+0

@Suchi Sto già usando il framework Zend quindi non voglio aggiungere un altro framework per questo. Anche se sembra molto buono e semplice. Utilizza OAuth2.0? – Doc

risposta

4

che non si applica con C2DM poiché è un ospitato accountif si vede il https://developers.google.com/accounts/docs/AuthForInstalledApps si saids

ClientLogin può essere utilizzato autorizzare l'accesso sia agli account regolari di Google sia a quelli ospitati da . Un account ospitato è un account utente che fa parte di il servizio di Google Apps.

Inoltre, se si vede l'immagine è una chiara interazione tra Utente come interfaccia dell'interfaccia utente poiché è coinvolto un CAPTCHA.

enter image description here

Modifica

BTW si può vedere da questo meccanismo di posta C2DM ancora userà ClientLogin, tuttavia, la chiave prima di ottobre 2011 sono stati andando a scadenza, quindi è necessario ricrearli. Questo è un post piuttosto recente di 8 giorni prima che il ClientLogin venisse ritirato. C2DM Client Login Key

+0

Hai ragione, dovremmo procedere con ClientLogin senza preoccuparci di deprecation intimation Ulteriori discussioni su questo possono essere viste qui http://stackoverflow.com/a/10859270/1104697 – Doc

0

Here

puoi dare un'occhiata, ha funzionato per me.

È necessario ottenere la registrazione del dispositivo e inserire l'indirizzo e-mail e la password dell'account c2dm in post.php.

E l'altra cosa che è necessario sapere riguarda c2dm.php, si verifica un errore quando si tenta di verificare la risposta del server come "200 OK". Perché sta cercando di ottenere questa risposta dal corpo. Semplicemente commenta la riga, quindi esegui.

+0

Scusa se non ho visto che intendi che ClientLogin è deprecato. La mia risposta utilizza anche ClientLogin. – osayilgan

2

Non sono riuscito a capire come utilizzare C2DM con oAuth 2.0, ma ecco cosa ho provato. Spero che questo possa aiutare qualcuno a risolvere problema simile

Ho trovato una risorsa che sarebbe utile a http://aleksmaus.blogspot.com/2012/01/oauth2-with-google-c2dm-push.html Ma quando ho provato a mandare un messaggio con C2DM tramite OAuth 2.0 non ha funzionato, mentre ha fatto un buon lavoro con ClientLogin.

Ecco come ho fatto con console e browser web (lo so, hai chiesto applicazione PHP, ma spero che questo può anche essere utile per voi.)


all'accesso del client: (riuscito)

ottenuto auth token dal:

$ curl -k -d "accountType=HOSTED_OR_GOOGLE&service=ac2dm&source=test-1.0&Email=[email account with @gmail.com without brace]&Passwd=[Google account password without brace]" https://www.google.com/accounts/ClientLogin 

e inviato un messaggio C2DM come questo:

$ curl -k --header "Authorization: GoogleLogin auth=[my ClientLogin auth key without brace]" -d "registration_id=[can be acquired from Android application]" --trace c2dm_trace.txt -d collapse_key=0 https://android.apis.google.com/c2dm/send 

Quindi la mia domanda ha ricevuto con successo C2DM messaggio


OAuth 2.0: (fallito)

ottenuto un oAuth 2.0 autenticazione delle credenziali dal browser web url accedendo:

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=[can be acquired from API Access menu in your API Console]&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https%3A%2F%2Fandroid.apis.google.com%2Fc2dm&access_type=offline 

(Google API Console: https://code.google.com/apis/console/)

E inviate in questo modo:

$ curl -k -H "Authorization: Bearer [my auth key from oAuth]" --trace curl_trace.txt -d "registration_id=[an be acquired from Android application]" -d "data.message=something to talk" -d collapse_key=0 https://android.apis.google.com/c2dm/send 

Poi ottenuto 401 risposta di errore :(


È lì qualcuno che può indicare cosa ho fatto qualcosa di sbagliato?

Modifica

ho trovato la frase "AC2DM è attualmente un'API in Labs" nella mail che si potrebbe ricevuta da Google quando registro C2DM. E ClientLogin deprecation policy will not apply to versions, features, and functionality labeled as "experimental." Non sono sicuro, ma penso che questo sia il motivo per cui i nostri codici non hanno funzionato.

Naturalmente, spero ClientLogin anche essere obsoleto e sostituito con OAuth 2.0 appena

+0

401 avverrà quando non sei autorizzato a visualizzare/accedere alla risorsa specificata. Simile a proibito, assicurati che il tuo token OAuth sia valido, non sia scaduto e qualsiasi potenziale errore di battitura/errore. La tua richiesta di riccioli sembra a posto per me. – Tim

+0

@Tim // Grazie per la risposta. Ma ho già controllato la mia credenziale OAuth che è valida quando ho visto la risposta 401. Penso che non sia ancora supportato dal momento che C2DM è ancora in beta :( –