3

PHPスクリプト(Androidデバイスでプッシュ通知を送信するため)をAndroidhttpポストコードに変換したいと思います。

phpスクリプト(正常に動作)

印刷された応答:

{"multicast_id":7657471480142898452、 "success":1、 "failure":0、 "canonical_ids":0、 "results":[{"message_id": "0:1362731818787207%38894628f9fd7ecd"}]}

 <?php
 $registrationIds = array("APA91bH1-35qLot...."); //device registration id

$apiKey = "AIzaSyCrKrzFl...";   //"YOUR_BROWSER_API_KEY";

$response = sendNotification($apiKey,$registrationIds,array('message' => $message, 'tickerText' => $tickerText, 'contentTitle' => $contentTitle, "contentText" => $contentText) );

echo $response;

function sendNotification( $apiKey, $registrationIdsArray, $messageData ) {
$headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . $apiKey);
$data = array(
'data' => $messageData,
'registration_ids' => $registrationIdsArray
);

$ch = curl_init();

curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send" );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data) );

$response = curl_exec($ch);
curl_close($ch);

return $response;

}

?>

Androidコード(機能していません):

印刷された応答:

<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
 <BODY BGCOLOR="#FFFFFF" TEXT="#000000">
 <H1>Unauthorized</H1>
<H2>Error 401</H2>
 </BODY>
 </HTML>

public boolean sendMessage() {

        String serviceUrl = "https://android.googleapis.com/gcm/send";

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("registration_ids", "APA91bH1-35qLotyb......"));
        nameValuePairs.add(new BasicNameValuePair("data", "this is a test message"));

        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(serviceUrl);
            httpPost.setHeader("Authorization", "AIzaSyCrKrzFlPbauq......");
            httpPost.setHeader("Content-Type", "application/json");
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            json_str = EntityUtils.toString(httpEntity);

        } catch (UnsupportedEncodingException e) {
            json_str = "Can't connect to server";
        } catch (MalformedURLException e) {
            json_str = "Can't connect to server";
        } catch (IOException e) {
            json_str = "Can't connect to server";
        }

        Log.i("***sendMessage", json_str);
        return true;
    }
4

1 に答える 1

2

key=APIキーの前のプレフィックスを忘れています。する必要があります

httpPost.setHeader("Authorization", "key=AIzaSyCrKrzFlPbauq......");

そのため、401エラーが発生しました。ただし、さらにエラーがあります。コンテンツタイプがJSONとして宣言されていても、JSON文字列を送信していません。

于 2013-03-08T15:37:16.323 に答える