GCM Implementation using PHP always facing Unautho

2019-01-28 09:19发布

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;
                }

3条回答
beautiful°
2楼-- · 2019-01-28 09:46

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.

查看更多
Explosion°爆炸
3楼-- · 2019-01-28 09:47

I can see several errors:

  1. Contenttype:application/json should be Content-Type: application/json.
  2. You forgot to include the registration ids in the JSON.
  3. I'm not sure if CURLOPT_SSL_VERIFYPEER => false and CURLOPT_SSL_VERIFYHOST => false are required.

You can find many PHP GCM samples that work (for example - here).

查看更多
何必那么认真
4楼-- · 2019-01-28 09:55

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.

IMG1 IMG2

查看更多
登录 后发表回答