バックエンドサーバーが投稿リクエストをGCMサーバーに送信すると、認証エラーHTTP 401が発生します。
ここで説明する手順に従いました。
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\"}"
私はこれを得る:
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
トラブルシューティングでそれは言う:
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.
私はそれについて質問があります:
それらは「api_key」(AIzaSy…)または8305134などのプロジェクト番号を意味しますか?...?
これは、カールスクリプトに追加するサーバーキーを意味します。プロジェクト番号は、サーバー側でメッセージを送信するために使用しないでください。
新しいサーバーキーを作成するには、次の手順に従います。
このキーは、サーバー側のスクリプトでメッセージを送信するために使用されます。
サーバーキーIPをホワイトリストに登録するにはどうすればよいですか?
サーバーキーの作成中にホワイトリストに登録できます。
Curlコマンドを実行している場合、コンピューターのIPアドレスをホワイトリストに登録する必要がありますか?
テストのために、IPを指定する必要はありません。商業目的のために、あなたがしたいことがあります。
WarningIPを0.0.0.0/0に設定(Getting Startedガイドでは、すべてのIPv4アドレスが許可されますが、IPv6は許可されません。
UPDATE:
Googleがコンソールを変更したため、次のことを行う必要があります。
[〜#〜]廃止予定[〜#〜]
私は同じ問題を抱えていました...そして、Android用のGoogle Cloud Messagingも追加する必要があることに気付きました。
それがあなたを助けることを願っています!
APIキーの代わりにサーバーキーを使用して、このエラーを解決しました。 Firebase Consoleからサーバーキーを取得するには、歯車をクリックし、[プロジェクト設定]をクリックします。その後、クラウドメッセージングと言うタブに移動し、サーバーキーを取得します。通常のサーバーキーとレガシーサーバーキーの両方が機能します。
これはFirebaseとGCMの両方で機能するため、2つのキーを別々に宣言する必要はありません。
最後に私の問題を見つけました
このような
Authorization:[Api key]
解決
Authorizationヘッダーに 'key =' + [Your Api key]がありませんでした。
したがって、完全なHTTPヘッダーは
Authorization:key=Apikey
同じ問題がありました。 http://developer.Android.com/google/gcm/gsの手順に記載されているように、Androidキーを使用していました。 html しかし、実際にはServer Keyを使用して、FiddlerウィンドウとPushSharpの例から認証を受ける必要がありました。
最近GCMで新しいプロジェクトを作成してサーバーキーを追加しようとした場合、Firebase Cloud Messagingを促進するためにGoogleが新しく作成されたサーバーキーの認証を停止したため、認証は成功しません。現在、新しいキーを作成する唯一のオプションは、最初に既存のプロジェクトをFirebase here に移行することです。
curl
コマンドの構文はわかりませんが、一方のヘッダーを--header "key: value"
として指定し、もう一方のヘッダーを--header key:"value"
として指定するのは奇妙に思えます。おそらくそれらの1つが間違っています。さらに、registration_id:ABC
を"{\"registration_ids\":[\"ABC\"]}"
に変更する必要があります。
APIキーを意味します。
APIキーを作成したときにホワイトリストIPのリストを定義しなかった場合、デフォルトでホワイトリストになっているはずです。
エラー401の場合:GCMをFCMにインポートして動作させる必要がある場合サーバーと送信者IDは https://console.firebase.google.com/project/my_projectID/settings/cloudmessaging
同じ問題がありました。私がしたことは:
Firestore
を使用するには、Web API key
firebaseコンソールを使用する必要があります。https://console.firebase.google.com/project/<yourProjectName>/settings/general/<yourAppPckageName>
にあります。
ただし、Firebase
を使用してモバイルデバイスクライアントにプッシュ通知を送信するには、Server key
開発者コンソールを使用する必要があります。これはhttps://console.developers.google.com/apis/credentials?project=<yourProjectName>
で確認できます
問題は承認に関連していますが、古い方法で物事を行おうとしていたときにこのエラーに遭遇しました。これは古い質問であることを知っていますが、50セントを当てましょう。まず、町に「Firebase Cloud Messaging FCM」と呼ばれる新しい子供がいます。グーグルを引用させてください:
FCMは、FirebaseブランドのGCMの新しいバージョンです。 GCMのコアインフラストラクチャを継承し、クラウドメッセージングの開発を容易にする新しいSDKを備えています。
FCM SDKにアップグレードする利点は次のとおりです。
より簡単なクライアント開発。独自の登録またはサブスクリプションの再試行ロジックを作成する必要はなくなりました。すぐに使える通知ソリューション。 Firebase Analyticsの洞察に基づいて特定の対象者に通知を送信できるWebコンソールを備えたサーバーレス通知ソリューションであるFirebase Notificationsを使用できます。 FCMに関する詳細情報Configuration For Android studio
私はこれが古い方法で物事をしようとしている人を助けることを願っています
APIキーに不一致があると、不正な問題が発生します。サーバーキーをクリアし、新しいキーを再生成します。サーバー側のコーディングでサーバーAPIキーを使用します。そして、Android clientで送信者IDを適切に使用します