I am always getting 401 error.Please any one could let me know exactly what should be HTTP referrers if i am using my local server. i.e Currently I am using:
http://localhost/GCM/index.php
and generating a API access key using it.
Here is my php code for GCM request.
$key='mykey';
$headers=array('Contenttype:application/json','Authorization:key='.$key);
$url = 'https://android.googleapis.com/gcm/send';
$ch = curl_init();
$curlConfig = array(
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode(array('field1' => 'some date','field2' => 'some other data',)),
CURLOPT_HTTPHEADER => $headers,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
);
curl_setopt_array($ch, $curlConfig);
$result = curl_exec($ch);
curl_close($ch);
if($result==FALSE){
echo curl_error($ch);
echo curl_getinfo($ch);
}else{
echo $result;
}
I battled same problem. Turned out it was IPv6 related! I created server key as described in http://developer.android.com/google/gcm/gs.html using 0.0.0.0/0 as permitted host IP, but that does not match IPv6. So I added another permitted host line IP as 0::0/0 and that worked (AFTER some time, to update cached config?).
Leaving the IP field blank allows ANY IP and is easier.
I can see several errors:
Contenttype:application/json
should beContent-Type: application/json
.CURLOPT_SSL_VERIFYPEER => false
andCURLOPT_SSL_VERIFYHOST => false
are required.You can find many PHP GCM samples that work (for example - here).
This is due to you are not enable you IP to access GCM,To Know your network IP type "my ip" in GOOGLE,after that create SERVER KEY in you Google_Api_Console and Use the ip in SERVER KEY generation,Use the SERVER KEY in your php file in local server,the first image show's the list of key in google console to select,choose server key and second image show's that to put the ip what you need to enable.