GoogleCloudMessaging PHP 脚本总是返回无效注册

我知道有很多帖子有同样的问题,但在阅读所有帖子后我找不到问题的原因.

I know there are lots of posts with the same issue, but after read all of them I could not find the reason of the problem.

我编写了一个 GCM 客户端来注册我的设备以从我的服务器接收消息.它正在工作,我可以将注册 ID 存储在我的数据库中.

I wrote a GCM client to register my device to receive messages from my server. It is working and I can store the registration ID in my database.

我的问题出在服务器端.我正在使用在某个地方通过谷歌搜索找到的脚本,但我总是收到错误结果:

My problem is in the server side. I'm using a script found somewhere googling, but I always receive an error result:

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

PHP 代码是(我使用的是 BROWSER API 而不是教程中介绍的 SERVER API,但尝试两个键返回相同的消息):

The PHP code is (I'm using BROWSER API instead of SERVER API as told on tutorial, but trying both keys returns the same message):

<?php
// Replace with real BROWSER API key from Google APIs
$apiKey = "AIzaSyACln4edhSZW30XcmYpqoMz_gcRCC1iFjY";

// Replace with real client registration IDs 
$registrationIDs = array( "APA91bEdf1w4dQtsUqPT1jHhWEpvrpxzB1yrpL3RVtKrVxfzxfg2-Yl-pwHorsnmSnkqywQ8G90YcGEBoqCjgQU8CnjA0N7mOWF8bHMhHAs4ty46PPTX8yh6eSaSqvU3JTMmb-P0ma90EBG0rsQQbUh3aX895KxitI3LCiGOYqRfE5pZQ");

// Message to be sent
$message = "this is a test";

// 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;
?>

我输入了真实的 ID 和密钥,看看我做得对不对.有什么想法吗?

I put the real ids and key to see if I'm doing right. Any ideas?

推荐答案

几分钟前我遇到了同样的问题.

I had the same problem a couple of minutes ago.

改变这个

$fields = array(
            'registration_ids'  => $registrationIDs,
            'data'              => array( "message" => $message ),
            );

为此:

$fields = array(
             'registration_ids'  => array($registrationIDs),
             'data'              => array( "message" => $message ),
             );

相关文章