Erreur d'autorisation GCM http 401

Lorsque mon serveur backend envoie des requêtes post aux serveurs GCM, je reçois une erreur d'autorisation HTTP 401.

J'ai suivi les étapes décrites ici:

  • Comment tester l'application bluetooth sur les émulateurs dans Android
  • Android Studio - Nom de domaine de l'entreprise
  • Android NDK / JNI - référence non définie à la fonction définie dans le fichier d'en-tête personnalisé
  • Erreur JNI sur l'animation de transition de scène - La couche dépasse le maximum
  • Réglage de l'ID pour les éléments Spinner
  • Le bouton de dessin Android pour la toile avec une vue personnalisée?
  • Http://developer.android.com/google/gcm/http.html#auth_error

    >> api_key=AIzaSyDEy3... >> curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send  -d "{\"registration_id\":\"ABC\"}" 

    J'ai compris:

     <HTML> <HEAD> <TITLE>Unauthorized</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> <H1>Unauthorized</H1> <H2>Error 401</H2> </BODY> </HTML> 

    Dans le dépannage, il dit:

     Authentication Error The sender account that you're trying to use to send a message couldn't be authenticated. Possible causes are: 1. Authorization header missing or with invalid syntax. 2. Invalid project number sent as key. 3. Key valid but with GCM service disabled. 4. Request originated from a server not whitelisted in the Server Key IPs. 

    J'ai des questions à ce sujet:

    1. L'en-tête de la requête curl est-il correct?
    2. Est-ce qu'ils signifient "api_key" (AIzaSy …) ou le numéro du projet comme 8305134 ….?
    3. Comment puis-je donner une liste blanche de ma clé de clé de serveur?
    4. Si j'utilise la commande Curl, dois-je ajouter une liste blanche à l'adresse IP de mon ordinateur?

  • Android NDK révision 7 L'hôte 'awk' est une erreur périmée
  • Pourquoi cela dit-il que «Ne peut-on pas référencer une variable non finale i dans une classe intérieure définie dans une autre méthode»?
  • Envoi de messages texte par programme dans Android
  • Quels sont les caractères autorisés dans les noms de fichiers sur Android?
  • Lancez l'application Android sans activité principale et démarrez le service lors de l'application de lancement
  • Attribut de réglage de l'élément enfant de la disposition incluse
  • 13 Solutions collect form web for “Erreur d'autorisation GCM http 401”

    Est-ce qu'ils signifient "api_key" (AIzaSy …) ou le numéro du projet comme 8305134 ….?

    Cela signifie la clé du serveur qui devrait être ajoutée dans votre script curl. Le numéro du projet ne doit pas être utilisé pour envoyer un message sur le côté serveur.

    Pour créer la nouvelle clé du serveur, suivez les étapes,

    • Accédez à https://cloud.google.com/console/project
    • Cliquez sur votre projet
    • Aller aux API et auth sur le panneau de gauche
    • Sélectionnez les informations d'identification dans le sous-menu sur le panneau de gauche
    • Sous l'accès Public API , cliquez sur " Créer une nouvelle clé "
    • Choisissez 'Serveur'
    • Dans la boîte de dialogue suivante, spécifiez les adresses IP en liste blanche, si vous en avez. Laissant vide, les demandes seront issues de toute adresse IP
    • Cliquez sur Créer .
    • Vous trouverez que la nouvelle clé du serveur est créée sous " Public API Access "

    Cette clé doit être utilisée pour envoyer un message dans votre script sur le côté serveur.

    Comment puis-je donner une liste blanche de ma clé de clé de serveur?

    Vous pouvez créer une liste blanche tout en créant une clé de serveur.

    Si j'utilise la commande Curl, dois-je ajouter une liste blanche à l'adresse IP de mon ordinateur?

    À des fins de test, vous ne devez pas préciser l'adresse IP. À des fins commerciales, vous voudrez peut-être.

    Le réglage d' avertissement IP à 0.0.0.0/0 comme mentionné dans le Guide de démarrage permettra toute adresse IPv4, mais pas IPv6.

    METTRE À JOUR:

    Google a changé la console, maintenant vous devez:

    • Accédez à https://console.developers.google.com
    • Sélectionnez votre projet (liste déroulante en haut)
    • Sélectionnez Vue d'ensemble dans le menu sur Panneau de gauche
    • Sélectionnez Google Cloud Messaging sous le titre de l' API mobile
    • Cliquez sur le bouton Activer
    • Ensuite, vous devez créer les informations d'identification

    DÉPRIT

    J'ai eu le même problème … alors je me suis rendu compte que je devais ajouter Google Cloud Messaging pour Android aussi.

    • Accédez à https://cloud.google.com/console/project
    • Cliquez sur votre projet
    • Aller aux API et auth sur le panneau de gauche
    • Sélectionnez les API dans le sous-menu sur le panneau de gauche
    • Recherchez Google Cloud Messaging pour Android (ou / et Chrome) et mettez-le sous tension

    J'espère que ça vous aide!

    Finalement trouvé Mon problème

    J'ai fait l'En-tête d'Autorisation HTTP comme cette Authorization:[Api key]

    Solution

    Je manquais 'key =' + [Your Api key] dans l'en-tête de l'autorisation,

    De sorte que l'en-tête HTTP complet sera

    Authorization:key=Apikey

    J'ai eu le même problème. J'utilisais la clé Android comme mentionné dans les instructions à http://developer.android.com/google/gcm/gs.html Mais je devais utiliser la clé du serveur pour être authentifié à partir de ma fenêtre Fiddler et de l'exemple PushSharp.

    J'ai résolu cette erreur en utilisant la clé du serveur au lieu de la clé de l'API. Vous pouvez obtenir la clé de serveur de la console Firebase en cliquant sur l'équipement et en cliquant sur Paramètres du projet, puis, passez à l'onglet qui indique la messagerie Cloud et obtenez la clé du serveur, la clé du serveur normal et la clé du serveur existante fonctionneront.

    Cela fonctionne à la fois sur Firebase et GCM, donc nous n'avons pas besoin de déclarer séparément deux clés.

    J'ai eu le même problème. Ce que j'ai fait c'est:

    1. Clear Whitelist IP qui sera définie sur Any IP automatiquement.
    2. Régénérer la clé du serveur et utiliser la nouvelle clé générée.
    1. Je ne connais pas la syntaxe de la commande curl , mais il semble étrange qu'un en-tête vous spécifiez comme --header "key: value" tandis que l'autre est spécifié comme --header key:"value" . Peut-être que l'un d'entre eux est incorrect. En outre, vous devez modifier registration_id:ABC à "{\"registration_ids\":[\"ABC\"]}" .

    2. Ils signifient la clé de l'API.

    3. Si vous n'avez pas défini une liste d'adresses IP indiquées en blanc lorsque vous avez créé votre clé d'API, elle devrait être indiquée en blanc par défaut.

    Si vous avez récemment essayé de créer un nouveau projet dans GCM et d'ajouter une clé de serveur, il ne réussira pas l'autorisation de toute façon parce que Google a arrêté d'autoriser les clés de serveur nouvellement créées afin de promouvoir la messagerie Cloud Firebase. À l'heure actuelle, la seule option pour créer une nouvelle clé est de migrer d'abord le projet existant sur Firebase ici .

    Si erreur 401: le GCM doit être importé dans FCM pour fonctionner. Ensuite, les identifiants du serveur et de l'expéditeur peuvent être trouvés à l' adresse https://console.firebase.google.com/project/my_projectID/settings/cloudmessaging

    Un problème non autorisé se produira alors qu'il y a un décalage dans la clé de l'API. Effacez la clé du serveur et régénère une nouvelle. Utilisez la clé de l'API du serveur dans le codage côté serveur. Et utiliser correctement l'identifiant de l'expéditeur dans le client Android

    Le problème est lié à l'autorisation, mais je suis tombé sur cette erreur, alors que j'essayais de faire des choses de façon ancienne, je sais que c'est une vieille question, mais permettez-moi de mettre mes 50 centimes dessus. D'abord, il y a un nouvel enfant en ville appelé "Firebase Cloud Messaging FCM". Permettez-moi de citer google:

    FCM est la nouvelle version de GCM sous la marque Firebase. Il hérite de l'infrastructure principale de GCM, avec de nouveaux SDK pour faciliter le développement de la Messagerie Cloud.

    Les avantages de la mise à niveau vers le SDK de FCM incluent:

    Développement de clients plus simple. Vous ne devez plus écrire votre propre logique d'enregistrement ou de réinscription. Une solution de notification prête à l'emploi. Vous pouvez utiliser les notifications Firebase, une solution de notifications sans serveur avec une console Web qui permet à toute personne d'envoyer des notifications de cibler des publics spécifiques en fonction des informations d'analyse de Firebase Analytics. Plus d'informations sur FCM Configuration For Android Studio

    J'espère que cela aide quelqu'un qui essaie de faire les choses de façon ancienne

    Les choses ci-dessus sont toutes terminées, vérifiez l'opération in curl init la fonction
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
    Est inclus ou non si ce n'est pas le cas, incluez la fonction

    J'ai eu le même problème. Ce que je faisais, c'est que, au lieu de la clé API, j'envoyais un message et, au lieu du message, j'envoyais la clé de l'API. Vérifiez simplement si vous vous trompez la même erreur.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.