30

サーバーから情報をプッシュするためにGCMサービスを使用しています。ブラウザキーを使用すると、成功メッセージが次のように表示されます:{"multicast_id":4849013215736515938、 "success":1、 "failure":0、 "canonical_ids":0、 "results":[{"message_id": "0: 1348742583011905%2adac3a0f9fd7ecd "}]} が、デバイスで通知を受け取りませんでした。また、サーバーキーを使用すると、UnauthorizedError401が表示されます。私のコードを以下に示します。

$apiKey = "xxxxx";
$registrationIDs = array("xxxxxxxx");
$message = "testing Process";
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
        'registration_ids'  => $registrationIDs,
        'data'              => array("message"=>$message),
        );
$headers = array( 
        '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;

この問題について私を助けてください。前もって感謝します。

4

14 に答える 14

31

サーバーのIPをホワイトリストに登録しましたか?これはデフォルトではブラウザキーには必要ありませんが、サーバーキーには必要です。

ここで確認できます:

https://code.google.com/apis/console/#project:[あなたのプロジェクト番号]:access

于 2013-01-03T09:00:58.293 に答える
19

別の回答では、IPアドレスをホワイトリストに登録することがすでに提案されていますが、これは明らかなようです。私にとってそれを修正したのは、IPv6アドレスをホワイトリストに登録することでした。それが鍵でした!これが他の誰かに役立つことを願っています。

于 2013-03-11T18:17:57.097 に答える
14

私はこのスレッドですべてを試しましたが、それでも運がありません。

そこで、有効なAPI(APIと認証-> API、有効なAPIGoogle Cloud Messaging for Chrome )を確認し、有効になっていないことに気付きましたGoogle Cloud Messaging for Android。後者を有効にするとすぐに機能しました。

適切なAPIが有効になっていることを再確認してください。

于 2014-11-26T13:29:12.397 に答える
3

多くの人が書いているように、サーバーのIPV4とIPV6をホワイトリストに登録する必要があります。IPV4のみが必要な場合は、これをcurlphpinitに追加します。

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
于 2015-01-27T16:09:05.580 に答える
2

ブラウザキーを使用するオプションを使用して新しいブラウザキーを作成し、コードでこのキーを使用します。 https://code.google.com/apis/console/?pli=1#project:42053154xxxx:access

于 2013-05-09T18:50:49.487 に答える
2

私はに入れていました

$apiKey = "xxxxx"

私がAndroidクライアントアプリに入力したプロジェクト番号(プロジェクトID)のようですが、サーバーで間違っていたのは、Google Cloud Console(Android用のGoogle Cloud Messagingをアクティブ化する場所)からのappkeyである必要があります

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

私の場合、プラットフォームにデフォルトのプロジェクト「サービスアカウント-プロジェクト」がありました:「Web」ですがHosted Application section、APIキーに関する証拠はまったくありませんでした。しかし、 4つのセクションをWeb Apps含む「マイアプリ」という名前の新しいサーバーキーを作成すると、最終的にAPIキーが見つかります;-)OAuth 2.0 Client IDCertificateBrowser Key

それを知らない私だけかもしれませんが、私はこの答えが誰かに役立つかもしれないと信じています

于 2013-12-05T02:31:48.767 に答える
1

私にとっての問題は、APIを有効にする必要があるということでした。APIを設定するだけでは不十分です。Android用Googleクラウドメッセージングが、[API]->[有効なAPI]の有効なAPIに表示されることを確認します。

そうでない場合は、APISの[APIライブラリ]タブをクリックして有効にします。\

于 2015-06-21T15:20:18.157 に答える
0

私が間違っていない場合は、APIKEYをbase64でエンコードする必要があります。

また、var_dump($ results)を試して、情報が得られるかどうかを確認してください。

于 2012-09-27T10:58:23.853 に答える
0

コードを見ると、これはオンラインのどこかに投稿されたphp-gcmサンプルからのものであることがわかります。それは非常に素晴らしく、ブラウザキーとホワイトリストに登録されたIP(IPV6またはbas64 apikeyではない)の両方が機能することを保証できます。

メッセージが表示されない理由は、使用している通知送信機能が'data' => array("message"=>$message) 「メッセージ」のキーをターゲットにしているためです。これは、保留中のインテントに渡す必要があるものです。

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

これにより、インテントはこのキーに含まれるメッセージを読み取ることができます。メッセージ自体は、以下に貼り付けられたGCMIntentServiceメソッドから取得されます。

 @Override
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);
}
于 2013-05-13T10:52:15.707 に答える
0

問題は次のとおりです。2台のサーバーを使用していました。1台はステージングサーバーで、もう1台は本番サーバーです。デジタルオーシャンを使用してホストされていたステージングサーバーの場合、サーバーアプリケーションで許可されたIPアドレスのキーにinetアドレスを入力しましたが、問題なく機能しました。

ただし、本番サーバーからinetアドレスに変更すると失敗しました。代わりに、これを機能させるには、inet6 addr:/ 64 Scope:Globalを使用する必要がありました。同じ問題が発生した場合に値を取得するには、ifconfigと入力し、上記のエントリを見つけます。許可されたIPアドレスにその値を入力すると、正常に機能します。

于 2014-10-31T10:19:08.433 に答える
0

デフォルトのプロジェクトとは異なるプロジェクトが必要です。プロジェクトを作成してから、キーを作成します。デフォルトのプロジェクトは使用しないでください。

于 2015-04-07T11:25:29.647 に答える
0

この問題があったので、私はGCM(Googleクラウドメッセージング)を使用していました。ただし、2016年9月以降、GCMのサーバーキーは機能しなくなります。FCM(Firebaseクラウドメッセージング)を使用する必要があります。[設定]パネルの[クラウドメッセージング]タブを使用して、Firebaseコンソールでのみ新しいサーバーキーを作成します。firebase console console.firebase.google.com(まだ使用していません)にアクセスすると、プロジェクトをインポートするように求められました。突然、この新しいサーバーキーがGCMコンソールに戻ってきました。GCMを使用する場合は、そこにリストされている「レガシーキー」を使用してください。

于 2018-02-17T00:45:17.800 に答える
-1

APISurveryKeyが有効になっていることを確認してください。

于 2015-08-17T18:55:41.447 に答える
-1

私たちは数日で解決策を探しています。具体的には、次のcurlオプションを追加します。curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );

于 2016-02-23T20:58:57.050 に答える