1

PHP を使用して、サーバーから電話にメッセージを送信したいと考えています。これが私のコードです:

    $apiKey = "AIxxxxxxxxxxxxxxxxxxxx";

    $registrationIDs = array( $c2dmId );

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

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

    $fields = array(
                    'collapse_key'      => $collapseKey,
                    'data'              => array( 
                        "type"      => $msgType,
                        "extra"     => $msgExtra,
                        "uuid"      => $uuid,
                        "user_id"   => $userId),
                    'registration_ids'  => $registrationIDs,
                    );

    print (json_encode($fields));
    echo "<br/>";

    $ch = curl_init();

    curl_setopt( $ch, CURLOPT_URL, $url );

    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

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

    $result = curl_exec($ch);
    $resultInfo = curl_getinfo($ch);

    echo "resultinfo: $resultInfo <br>";
    foreach ($resultInfo as $key => $value) {
        echo "$key => $value <br>";
    }

    curl_close($ch);
    die ("Result: $result");

$c2dmId は、電話からサーバーに送信する registrationId です。その結果、($result 変数で) 次のようになります。

<HTML>
<HEAD>
<TITLE>Not Found</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Not Found</H1>
<H2>Error 404</H2>
</BODY>
</HTML>

理由はわかりません。誰でも助けることができますか?ドキュメントには 404 コードについて何も書かれていないので、何が起こっているのか本当にわかりません。

4

3 に答える 3

5

ああ、この質問をすっかり忘れてしまい、ごめんなさい。私はすでに何が問題だったのかを知っています。以前、C2DMを介してメッセージを送信するために以前に投稿したコードを使用しました。GCMに合わせて調整するためにいくつかの改善を行いました。また、変数の1つ($ msgExtra)がnullに等しくなる場合があります。これは意図された動作であり、C2DMでは問題なく機能しました。残念ながら、GCMを介してJSONでnullを渡そうとすると、404エラーが発生しますが、GCMのドキュメントにはそれについて何も記載されていません...したがって、nullを送信しようとしない限り、私が投稿したコードは適切です。私の問題の解決策は、null値を「」のようなものに置き換えることです。そしてもう一度-私がちょうど今それを投稿することを残念に思う、私はこの質問を完全に忘れました。

于 2012-07-28T15:27:16.677 に答える
0

すでに解決されている可能性がありますが、デバイスでテストしたコードの動作バージョンを次に示します。

<?php

$apiKey = "AI.....";

$registrationIDs = array( "You registration key"  );

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

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

$msgType = "hello";
$msgExtra = "rock";
$uuid = '1234';
$userId = '5678';

/* data you need to define message you want to send in APP.For ex: here myssg in what i am fetching at client side, so in notification it will show hello. You can change accordingly. */ 
$fields = array(
                'collapse_key'      => $collapseKey,
                'data'              => array( 
                    "mymsg"      => $msgType,
                    "extra"     => $msgExtra,
                    "uuid"      => $uuid,
                    "user_id"   => $userId),
                'registration_ids'  => $registrationIDs,
                );

print (json_encode($fields));
echo "<br/>";

$ch = curl_init();

curl_setopt( $ch, CURLOPT_URL, $url );

curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

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

$result = curl_exec($ch);
$resultInfo = curl_getinfo($ch);

echo "resultinfo: $resultInfo <br>";
foreach ($resultInfo as $key => $value) {
    echo "$key => $value <br>";
}

curl_close($ch);
die ("Result: $result");
?>

これで 404 エラーが発生することはありません。PHP でサーバー側の実装を探している人に役立つことを願っています。

于 2012-07-18T07:49:08.217 に答える
0

Google API コンソールからブラウザ API キーを生成し、「Authorization」ヘッダーのサーバー キーの代わりに使用します。これを行うと、このエラーはなくなります。

これは、Authorization ヘッダーでサーバー キーを使用する必要があると述べている GCM ドキュメントの重大な誤りが原因です (ここに書かれているように)。

于 2012-07-12T13:03:55.743 に答える