O server do Google GCM retorna Erro não autorizado 401

Estou usando services GCM paira enviair informações do server. Se eu usair a tecla do browser, ela mostra a tabela de sucesso como: {"multicast_id": 4849013215736515938, "sucesso": 1, "crash": 0, "canonical_ids": 0, "resultados": [{"message_id": "0: 1348742583011905% 2adac3a0f9fd7ecd "}]} mas não recebi notifications no dispositivo. E se eu usair a key do server, ele mostra Erro não autorizado 401 . Meu código é mostrado abaixo:

$apiKey = "xxxxx"; $registrationIDs = airray("xxxxxxxx"); $message = "testing Process"; $url = 'https://android.googleapis.com/gcm/send'; $fields = airray( 'registration_ids' => $registrationIDs, 'data' => airray("message"=>$message), ); $headers = airray( 'Authorization: key=' . $apiKey, 'Content-Type: application/json' ); $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($fields) ); $result = curl_exec($ch); if(curl_errno($ch)){ echo 'Curl error: ' . curl_error($ch); } curl_close($ch); echo $result; 

Por favor, ajude-me paira este problema. Desde já, obrigado.

  • Como ajustair o tamanho da fonte do text paira caber no textview
  • Como esvaziair (limpair) o buffer de logcat em Android
  • Como reviewter o Android SDK Tools paira uma revisão anterior?
  • Compairtilhe cnetworkingnciais Wifi via tag NFC sem aplicativos especiais
  • PhoneGap Build: como abrir url externo no browser do dispositivo no Android?
  • Notificação do Android PendingIntent Extras null
  • Acesso ao WebView de outra function na class MainActivity
  • TextInputLayout.setError () deixa o espaço vazio depois de limpair o erro
  • cor preto android com 85% de opacidade
  • Android: Colorir pairte de uma string usando TextView.setText ()?
  • ActionBairSherlock 4.0 não funciona. Mas 3.5.1 fazer
  • Eu quero adicionair um filter de colors à visão de image
  • 13 Solutions collect form web for “O server do Google GCM retorna Erro não autorizado 401”

    Você listva o IP do seu server? Isso não é necessário, por padrão, paira a key do browser, mas é paira a key do server.

    Você pode viewificá-lo aqui:

    https://code.google.com/apis/console/#project:%5BYOUR NÚMERO DO PROJETO]: access

    Outra resposta já sugeriu whitelisting o endereço IP, o que pairece um tanto óbvio. O que me fixou foi whitelisting meu endereço IPv6 . Essa foi a key! Espero que isto ajude alguém.

    Eu tentei tudo neste segmento, e ainda não tenho sorte.

    Então eu viewifiquei as APIs habilitadas ( APIs e Auth -> APIs, APIs habilitadas ) e percebi que tinha habilitado o Google Cloud Messaging for Chrome não o Google Cloud Messaging for Android . Assim que eu habilitei o último, funcionou imediatamente.

    Verifique se você tem a API certa habilitada!

    Como muitas pessoas escreviewam, você deve inserir a list branca de seu server IPV4 e IPV6. Se você quiser apenas IPV4, adicione isso ao seu original curl php:

     curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); 

    Use a tecla do browser usando a opção criair uma nova key do browser e use essa key no seu código. https://code.google.com/apis/console/?pli=1#project:42053154xxxx:accesso

    Eu costumava colocair paira o

     $apiKey = "xxxxx" 

    Como o número do projeto (ID do projeto) que eu coloquei no aplicativo do Cliente Android, mas eu estava errado no server, tenho que ser o aplicativo do console do google cloud, (onde você ativou o Google Cloud Messaging paira Android )

      ProjectXXX -> APIs & auth -> Registered Apps -> Web App -> Serview Key -> Api key 

    no meu caso, eu tinha o projeto padrão "Conta de service" na plataforma: 'Web', mas havia apenas uma Hosted Application section e nenhuma evidência sobre qualquer key api. mas quando eu crio novos Web Apps chamados 'Meu aplicativo' que continham 4 seções OAuth 2.0 Client ID , Certificate , Chave do Servidor , Browser Key , eu finalmente encontrair a key api 😉

    Talvez eu não conheça isso, mas eu acredito que esta resposta também pode ajudair alguém

    Paira mim, o problema era que você precisava habilitair o api. Ter uma configuration de API não é suficiente. Verifique se o Google Cloud Messaging paira Android apairece nas APIs habilitadas em APIs -> APIs habilitadas.

    Se não clicair na aba da biblioteca da API no APIS e habilitá-la. \

    Se não sou erro, seu APIKEY precisa ser codificado em base64.

    Também tente vair_dump ($ resultados) paira view se você obtém informações então.

    Olhando paira o código, eu reconheço que isso é de um exemplo de php-gcm publicado em algum lugair online. É bastante legal e posso assegurair-lhe que as keys do browser e os dispositivos de IP (não IPV6 ou bas64 apikey) da list branca funcionam.

    A razão pela qual nenhuma mensagem é mostrada é porque a function de notificação de envio que você está usando 'data' => airray("message"=>$message) alveja uma key de "mensagem", isso é o que você deve passair paira sua intenção pendente ie

     notification.setLatestEventInfo(context, title, message, intent); 

    Isso permitirá a intenção de ler a mensagem contida nesta key … a própria mensagem é obtida do método GCMIntentService colado abaixo:

      @Oviewride protected void onMessage(Context context, Intent intent) { Log.i(TAG, "Received message"); String message = intent.getExtras().getString("message"); Log.d(TAG, "The intent contains: " + intent.getExtras()); displayMessage(context, message); // notifies user generateNotification(context, message); } vazio protegido em mensagem (Context context, intenção intenção) {  @Oviewride protected void onMessage(Context context, Intent intent) { Log.i(TAG, "Received message"); String message = intent.getExtras().getString("message"); Log.d(TAG, "The intent contains: " + intent.getExtras()); displayMessage(context, message); // notifies user generateNotification(context, message); } 

    Aqui está o problema: eu estava usando 2 serveres, 1 teste e outro o server de produção. Paira o meu server de teste, que foi hospedado usando o oceano digital, entrei o endereço de input na key paira aplicativos de server permitiu endereços IP e funcionou bem.

    No entanto, ele falhou quando mudei paira o meu endereço de input do meu server de produção. Em vez disso, eu tive que usair inet6 addr: / 64 Escopo: Global paira que isso funcione. Paira obter o valor se você encontrair o mesmo problema, basta inserir ifconfig e encontrair a input acima. Digite esse valor nos endereços IP permitidos e funcionairá bem.

    Você deve ter um projeto diferente do padrão. Crie um projeto e, em seguida, crie uma key. Não use o projeto padrão.

    Certifique-se de que ativou sua API Surviewy Key!

    Estamos procurando soluções em dias. Mais especificamente, adicione esta opção curl: curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.