Seshu Vinay
Seshu Vinay

Reputation: 13588

error in Android: GCM using PHP

I used following code in PHP to send GCM message to Android:

<?php
$apiKey = "xxxxx"; //my api key


$registrationIDs = array("APA91bGGN7o7AwVNnv35lwP5Jw8OTJQL331XcxPfEIu4xt-ZKLe6R0aSSbAve99uKSDXhzE9L2PVLihpqFt0DEawhymUs9h5ICbTMweMAEJypg6ZLFqmf6SOGlyULQzudw9MM1DjbPaaKbo--wxWoHGkjyec2H_63e7mesYjaRf4_rgxBe655M0");



// Message to be sent
$message = "Message Text";

// Set POST variables
$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'
                );

// Open connection
$ch = curl_init();

// Set the url, number of POST vars, POST data
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_POSTFIELDS, json_encode( $fields ) );

// Execute post
$result = curl_exec($ch);

// Close connection
curl_close($ch);

echo $result;

It's working fine. Here I added my device tokens manually(hardcoded).

But when i tried getting device tokens from the database, I am getting below mentioned error.

Code:

<?php
include 'config.php';
if($_REQUEST['msg']!='')
{
    echo $message = $_REQUEST['msg']; 
// Replace with real BROWSER API key from Google APIs
$apiKey ="xxxxxx"; //my api key    
// Replace with real client registration IDs 
$sql = mysql_query("SELECT `device_token` FROM `users`");
$result = mysql_fetch_array($sql);


$registrationIDs = $result;

// Message to be sent
$message = $_REQUEST['msg'];

// Set POST variables
$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'
                );

// Open connection
$ch = curl_init();

// Set the url, number of POST vars, POST data
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_POSTFIELDS, json_encode( $fields ) );

// Execute post
$result = curl_exec($ch);

// Close connection
curl_close($ch);

echo $result;

}

I also tried using json_encode($registration_ids) with no use.

"registration_ids" field is not a JSON array

Upvotes: 2

Views: 5669

Answers (2)

Edris Ibrahim
Edris Ibrahim

Reputation: 955

I was getting the same error because my array indexes are not properly sorted I fix it by using PHP's sort() function.

Before Sort

$registration_ids = Array
(
    [1] => "xxx"
    [6] => "xxx"
    [8] => "xxx"
)

Sort

sort($registration_ids);

After Sort

$registration_ids = Array
(
    [0] => "xxx"
    [1] => "xxx"
    [2] => "xxx"
)

Pass to PHP's cURL

$fields = array(
    'registration_ids' => $ids,
    'data' => array('message' => $data)
);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

Upvotes: 2

Seshu Vinay
Seshu Vinay

Reputation: 13588

I finally got a solution. I used a for loop to get all the results into an array and converted array into JSON array using json_encode();

Upvotes: 3

Related Questions