3

I want to convert a php script(to send push notification in android devices) in to a android http post code.

php script (working fine) :

printed response :

{"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 code (not working):

printed response :

<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;
    }
1
  • Hello, can I get tutorial or some code for android push notification from you ? because I have read all tutorials, some menus in google are not same with tutorials. Thanks Commented Dec 9, 2013 at 3:23

1 Answer 1

2

You forget the key= prefix before your API key. Should be

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

That's why you got the 401 Error. You have more errors though. You are not sending a JSON string, even though your content type is declared as JSON.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks Eran, I have done two changes as according you, Now my code is working fine.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.