Lorsque mon serveur principal envoie des demandes de publication aux serveurs GCM, j'obtiens une erreur d'autorisation HTTP 401.
J'ai suivi les étapes décrites ici:
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 est 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:
S'agit-il de "api_key" (AIzaSy…) ou du numéro de projet tel que 8305134…?
Cela signifie clé de serveur qui devrait être ajoutée dans votre script curl. Le numéro de projet ne doit pas être utilisé pour envoyer un message côté serveur.
Pour créer la nouvelle clé de serveur, suivez les étapes,
Cette clé doit être utilisée pour envoyer un message dans votre script côté serveur.
Comment ajouter à la liste blanche l'adresse IP de la clé de serveur?
Vous pouvez ajouter une liste blanche lors de la création de la clé de serveur.
Si j'exécute la commande curl, dois-je ajouter à la liste blanche l'adresse IP de mon ordinateur?
À des fins de test, vous n'avez pas à spécifier l'adresse IP. À des fins commerciales, vous voudrez peut-être.
Warning régler IP sur 0.0.0.0/0 comme indiqué dans le guide Mise en route autorisera toutes les adresses IPv4, mais pas IPv6.
METTRE À JOUR:
Google a changé de console, vous devez maintenant:
OBSOL&EGRAVE;TE
J'ai eu le même problème ... alors j'ai réalisé que je devais aussi ajouter Google Cloud Messaging pour Android.
J'espère que ça vous aide!
J'ai résolu cette erreur en utilisant la clé de serveur au lieu de la clé d'API. Vous pouvez obtenir la clé du serveur à partir de la console Firebase en cliquant sur l'engrenage, puis sur Paramètres du projet, puis cliquez sur l'onglet Cloud Messaging et obtenez la clé du serveur. La clé de serveur normale et la clé de serveur héritée fonctionnent.
Cela fonctionne à la fois sur Firebase et sur GCM. Il n'est donc pas nécessaire de déclarer deux clés séparément.
Enfin trouvé mon problème
J'ai créé l'en-tête d'autorisation HTTP comme ceci
Authorization:[Api key]
Solution
Il me manquait 'key =' + [Votre clé Api] dans l'en-tête Authorization,
donc l'en-tête HTTP complet sera
Authorization:key=Apikey
J'ai eu le même problème. J'utilisais la clé Android comme indiqué dans les instructions de http://developer.Android.com/google/gcm/gs.htmlServer Key pour être authentifié à partir de ma fenêtre Fiddler et de mon exemple PushSharp.
Si vous avez récemment essayé de créer un nouveau projet dans GCM et d'ajouter une clé de serveur, l'autorisation échouera de toute façon car Google a cessé d'autoriser les clés de serveur nouvellement créées afin de promouvoir la messagerie Firebase Cloud. Actuellement, la seule option pour créer une nouvelle clé consiste à migrer d'abord le projet existant vers Firebase ici .
Je ne connais pas la syntaxe de la commande curl
, mais il semble étrange que l'un des en-têtes que vous spécifiez soit --header "key: value"
tandis que l'autre soit spécifié par --header key:"value"
. Peut-être que l'un d'entre eux est incorrect. De plus, vous devriez changer registration_id:ABC
en "{\"registration_ids\":[\"ABC\"]}"
.
Ils signifient la clé API.
Si vous n'avez pas défini de liste d'adresses IP figurant sur la liste blanche lors de la création de votre clé d'API, celle-ci devrait figurer sur la liste blanche par défaut.
si erreur 401: le MCG doit être importé dans FCM pour fonctionner Les ID du serveur et de l'expéditeur sont disponibles à l'adresse https://console.firebase.google.com/project/my_projectID/settings/ cloudmessaging
J'ai eu le même problème. Ce que j'ai fait c'est:
Pour utiliser Firestore
, vous devez utiliser la console Web API key
firebase que vous pouvez trouver, que vous pouvez trouver à https://console.firebase.google.com/project/<yourProjectName>/settings/general/<yourAppPckageName>
.
mais, pour utiliser Firebase
pour envoyer une notification Push à vos clients de périphérique mobile, vous devez utiliser la console de développement Server key
qui vous est fournie, que vous pouvez trouver à l'adresse https://console.developers.google.com/apis/credentials?project=<yourProjectName>
Le problème est lié à l'autorisation, mais je suis tombé sur cette erreur en essayant de faire les choses à l'ancienne, je sais que c'est une vieille question, mais laissez-moi mettre mes 50 centimes dessus. Il y a tout d'abord 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 L’infrastructure principale de GCM, avec de nouveaux kits de développement logiciel (SDK) pour créer la messagerie en nuage développement plus facile.
Les avantages de la mise à niveau vers FCM SDK incluent:
Développement client simplifié. Vous n'êtes plus obligé d'écrire votre propre logique d'inscription ou de nouvelle tentative d'inscription. Un out-of-the-box solution de notification. Vous pouvez utiliser les notifications Firebase, a solution de notifications sans serveur avec une console Web qui permet à quiconque envoyer des notifications à des publics spécifiques basés sur Firebase Informations analytiques . Plus d'informations sur FCMConfiguration pour Android studio
J'espère que cela aide quelqu'un qui essaie de faire les choses à l'ancienne
Un problème non autorisé surviendra en cas d'incompatibilité dans la clé d'API . Effacez la clé du serveur et régénérez-en une nouvelle. Utilisez la clé API du serveur dans le codage côté serveur. Et utiliser correctement l'identifiant de l'expéditeur dans le client Android