3

私はたくさん検索しましたが、この質問に対する解決策を見つけることができませんでした。

PHP サーバーを使用しており、PushNotifications を Android アプリに送信しようとしています。しかし、ブラウザでコードを試しているときに、「Error=MissingRegistration」というエラーが表示されます。

私が実行するコードは次のとおりです。

registration_ids = array($regId);
        $message = array(
            'hangMessage' => $message,
            'userId' => $user_id
            );

        $result = $gcm->send_notification($registration_ids, $message);

そして、これは私が呼び出すコードです:

$url = "https://android.googleapis.com/gcm/send";

    $fields = array(
        'registration_ids' => $regisration_ids,
        'data' => $message,
        );

    $headers = array(
        'Authorization: key=' . GOOGLE_API_KEY,
        'Content-Type= application/json',
        );

    //Open connection
    $ch = curl_init();

    //Set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    //Disabling SSL Certificate support temporarly
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

    //Execute psot
    $result = curl_exec($ch);
    if($result == false){
        die('Curl failed: ' . Curl_error($ch));
    }

    //Close connection
    curl_close($ch);
    echo $result;

Google API コンソール レポート システムによると、リクエストはサーバーに到達することすらありません。

何が間違っているのか誰にも分かりますか?

4

1 に答える 1

3

リクエストは次のようになります。

Content-Type:application/json
Authorization:key=AIzaSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA

{
  "registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..."],
  "data" : {
    ...
  },
}

したがって、エラーは次の行にある可能性があります。

'Content-Type= application/json'

を に変更してみて=ください:

コンテンツ タイプ ヘッダーが無効であるため、GCM サーバーはコンテンツ タイプのデフォルト値を想定する場合があります (これは である可能性がありますapplication/x-www-form-urlencoded;charset=UTF-8。この場合、登録 ID には別のキーが必要であり、これがMissingRegistrationエラーを説明します)。

ところで、MissingRegistratonエラーが発生したという事実は、リクエストが GCM サーバーに到達したことを意味します。GCM リクエストは、Google API コンソール レポート システムに記録されません。

于 2013-05-14T13:58:51.703 に答える