Michael Gulik
Michael Gulik

Reputation: 86

Google Cloud Messaging returns Invalid Registration

When I am trying to send a gcm message through the below php, I get this error:

{"multicast_id":8958574426215974401,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}

However, the server API key is exactly what Google gave me to use, and the gcm_token is accurately being stored to my database. I do not know where the issue lies.

Here is my server side php:

<?php

require 'db_connect.php';

// API access key from Google API's Console
define( 'API_ACCESS_KEY', 'AIzaSyREST OF MY KEY' );

//insert the message into a database
$sql = "SELECT gcm_token FROM users WHERE user_id='1' LIMIT 1;";

 // preform
if (!mysqli_query($Thesisdb, $sql)) {
printf("Errormessage: ", mysqli_error($Thesisdb));
mysqli_close($Thesisdb);
} else{

$results = mysqli_query($Thesisdb, $sql);

$registrationIds = array($results);
 // prep the bundle
$msg = array
(
'message'   => '$user',
'title'     => 'This is a title. title',
'subtitle'  => 'This is a subtitle. subtitle',
'tickerText'    => 'Ticker text here...Ticker text here...Ticker text here',
'vibrate'   => 1,
'sound'     => 1,
'largeIcon' => 'large_icon',
'smallIcon' => 'small_icon'
);
 $fields = array
 (
'registration_ids'  => $registrationIds,
'data'          => $msg
 );

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

$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch );
curl_close( $ch );
echo $result;
}
?>

Upvotes: 0

Views: 336

Answers (1)

Hirendrasinh S. Rathod
Hirendrasinh S. Rathod

Reputation: 834

mysqli_query returns Boolen value (true or false) so this will not going to works directly.

we have to convert mysqli_query return values to array using fetch array, fetch assoc.

$results = mysqli_query($Thesisdb, $sql);

$registrationIds = array($results);

Code to combile all GCM Tokens.

registrationIds=array();
$sql="SELECT `user_id`,`push_notification_registration_id` FROM `tbl1` WHERE `user_status`='Active' AND `push_notification_registration_id`!=''";
$fire=mysqli_query($this->conn,$sql);
$users=array();
if( (isset($fire))&&(!empty($fire)) ){
    while($result=mysqli_fetch_assoc($fire)){
        array_push($users,$result);
    }
}
foreach($users as $single_user){
    $register_id=$single_user['push_notification_registration_id'];
    array_push($registrationIds,$register_id);
}


$msg = array
(
    'title'         => $news_title,
    'subtitle'      => $news_description,
    'tickerText'    => 'Ticker Text',
    'vibrate'   => 1,
    'sound'     => 1,
    'news_id' => $news_id,
    'notification_type' => 'news'
);

$fields = array
(
    'registration_ids'  => $registrationIds,
    'data'              => $msg
);

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

$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields,true ) );
$result = curl_exec($ch );
curl_close( $ch );

Upvotes: 3

Related Questions