web-dev-qa-db-ja.com

GCM HTTP 401認証エラー

バックエンドサーバーが投稿リクエストを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.

私はそれについて質問があります:

  1. Curlリクエストのヘッダーは正しいですか?
  2. それらは「api_key」(AIzaSy…)または8305134などのプロジェクト番号を意味しますか?...?
  3. サーバーキーIPをホワイトリストに登録するにはどうすればよいですか?
  4. Curlコマンドを実行している場合、コンピューターのIPアドレスをホワイトリストに登録する必要がありますか?
36
Pawel

それらは「api_key」(AIzaSy…)または8305134などのプロジェクト番号を意味しますか?...?

これは、カールスクリプトに追加するサーバーキーを意味します。プロジェクト番号は、サーバー側でメッセージを送信するために使用しないでください。

新しいサーバーキーを作成するには、次の手順に従います。

  • https://cloud.google.com/console/project に移動します
  • プロジェクトをクリックします
  • 左パネルのAPIとauthに移動します
  • 左パネルのサブメニューで資格情報を選択します
  • パブリックAPIアクセスの下で、「新しいキーの作成」をクリックします
  • 「サーバー」を選択
  • 次のダイアログで、ホワイトリストに登録されているIPがある場合は指定します。空白のままにすると、リクエストは任意のIPから送信されます
  • 作成をクリックします。
  • Public API Access」の下に新しいサーバーキーが作成されます。

このキーは、サーバー側のスクリプトでメッセージを送信するために使用されます。

サーバーキーIPをホワイトリストに登録するにはどうすればよいですか?

サーバーキーの作成中にホワイトリストに登録できます。

Curlコマンドを実行している場合、コンピューターのIPアドレスをホワイトリストに登録する必要がありますか?

テストのために、IPを指定する必要はありません。商業目的のために、あなたがしたいことがあります。

WarningIPを0.0.0.0/0に設定(Getting Startedガイドでは、すべてのIPv4アドレスが許可されますが、IPv6は許可されません。

28
Vijay C

UPDATE:

Googleがコンソールを変更したため、次のことを行う必要があります。

  • https://console.developers.google.com に移動します
  • プロジェクトを選択します(上部のドロップダウン)
  • 左パネルのメニューでOverviewを選択します
  • Mobile APIsタイトルの下のGoogle Cloud Messagingを選択します
  • Enableボタンをクリックします
  • 次に、資格情報を作成する必要があります

[〜#〜]廃止予定[〜#〜]

私は同じ問題を抱えていました...そして、Android用のGoogle Cloud Messagingも追加する必要があることに気付きました。

  • https://cloud.google.com/console/project に移動します
  • プロジェクトをクリックします
  • 左パネルのAPIとauthに移動します
  • 左パネルのサブメニューでAPIを選択します
  • Google Cloud MessagingをAndroid(または/およびChrome))で検索してオンにする

それがあなたを助けることを願っています!

APIキーの代わりにサーバーキーを使用して、このエラーを解決しました。 Firebase Consoleからサーバーキーを取得するには、歯車をクリックし、[プロジェクト設定]をクリックします。その後、クラウドメッセージングと言うタブに移動し、サーバーキーを取得します。通常のサーバーキーとレガシーサーバーキーの両方が機能します。

これはFirebaseとGCMの両方で機能するため、2つのキーを別々に宣言する必要はありません。

16
Tyson

最後に私の問題を見つけました

このようなAuthorization:[Api key]

解決

Authorizationヘッダーに 'key =' + [Your Api key]がありませんでした。

したがって、完全なHTTPヘッダーは

Authorization:key=Apikey

11
sree

同じ問題がありました。 http://developer.Android.com/google/gcm/gsの手順に記載されているように、Androidキーを使用していました。 html しかし、実際にはServer Keyを使用して、FiddlerウィンドウとPushSharpの例から認証を受ける必要がありました。

9
Vijay Vepakomma

最近GCMで新しいプロジェクトを作成してサーバーキーを追加しようとした場合、Firebase Cloud Messagingを促進するためにGoogleが新しく作成されたサーバーキーの認証を停止したため、認証は成功しません。現在、新しいキーを作成する唯一のオプションは、最初に既存のプロジェクトをFirebase here に移行することです。

2
Pelister
  1. curlコマンドの構文はわかりませんが、一方のヘッダーを--header "key: value"として指定し、もう一方のヘッダーを--header key:"value"として指定するのは奇妙に思えます。おそらくそれらの1つが間違っています。さらに、registration_id:ABC"{\"registration_ids\":[\"ABC\"]}"に変更する必要があります。

  2. APIキーを意味します。

  3. APIキーを作成したときにホワイトリストIPのリストを定義しなかった場合、デフォルトでホワイトリストになっているはずです。

2
Eran

エラー401の場合:GCMをFCMにインポートして動作させる必要がある場合サーバーと送信者IDは https://console.firebase.google.com/project/my_projectID/settings/cloudmessaging

2
Matoeil

同じ問題がありました。私がしたことは:

  1. すべてのIPに自動的に設定されるIPホワイトリストをクリアします。
  2. サーバーキーを再生成し、新しく生成されたキーを使用します。
2
ENSATE

Firestoreを使用するには、Web API keyfirebaseコンソールを使用する必要があります。https://console.firebase.google.com/project/<yourProjectName>/settings/general/<yourAppPckageName>にあります。

ただし、Firebaseを使用してモバイルデバイスクライアントにプッシュ通知を送信するには、Server key開発者コンソールを使用する必要があります。これはhttps://console.developers.google.com/apis/credentials?project=<yourProjectName>で確認できます

0
MajidJafari

問題は承認に関連していますが、古い方法で物事を行おうとしていたときにこのエラーに遭遇しました。これは古い質問であることを知っていますが、50セントを当てましょう。まず、町に「Firebase Cloud Messaging FCM」と呼ばれる新しい子供がいます。グーグルを引用させてください:

FCMは、FirebaseブランドのGCMの新しいバージョンです。 GCMのコアインフラストラクチャを継承し、クラウドメッセージングの開発を容易にする新しいSDKを備えています。

FCM SDKにアップグレードする利点は次のとおりです。

より簡単なクライアント開発。独自の登録またはサブスクリプションの再試行ロジックを作成する必要はなくなりました。すぐに使える通知ソリューション。 Firebase Analyticsの洞察に基づいて特定の対象者に通知を送信できるWebコンソールを備えたサーバーレス通知ソリューションであるFirebase Notificationsを使用できます。 FCMに関する詳細情報Configuration For Android studio

私はこれが古い方法で物事をしようとしている人を助けることを願っています

0
abdimuna

APIキーに不一致があると、不正な問題が発生します。サーバーキーをクリアし、新しいキーを再生成します。サーバー側のコーディングでサーバーAPIキーを使用します。そして、Android clientで送信者IDを適切に使用します

0