我收到了设备的GCM注册令牌,但是当我使用PHP的REST api发送消息时,它显示成功,但没有收到设备上的消息。 php代码
<?php
$data = array( 'message' => 'Hello World! First Message from PHP' );
$ids = 'device registration token';
// Send a GCM push
sendGoogleCloudMessage( $data, $ids );
function sendGoogleCloudMessage( $data, $ids )
{
// Insert real GCM API key from Google APIs Console
// https://code.google.com/apis/console/
$apiKey = 'API Key'; //(server API Key)
// Define URL to GCM endpoint
$url = 'https://gcm-http.googleapis.com/gcm/send';
// Set GCM post variables (device IDs and push payload)
$post = array(
'to' => $ids,
'data' => $data,
);
// Set CURL request headers (authentication and type)
$headers = array(
'Authorization: key=' . $apiKey,
'Content-Type: application/json'
);
// Initialize curl handle
$ch = curl_init();
// Set URL to GCM endpoint
curl_setopt( $ch, CURLOPT_URL, $url );
// Set request method to POST
curl_setopt( $ch, CURLOPT_POST, true );
// Set our custom headers
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
// Get the response back as string instead of printing it
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
// Set JSON post data
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $post ) );
// Actually send the push
$result = curl_exec( $ch );
// Error handling
if ( curl_errno( $ch ) )
{
echo 'GCM error: ' . curl_error( $ch );
}
// Close curl handle
curl_close( $ch );
// Debug GCM response
echo $result;
print_r($result);
}
?>
在提交PHP文件时,它返回如下消息,似乎消息显示&#39;成功&#39;但没有在设备上收到消息。有人可以建议我是否需要采取额外步骤或做错事?
{"multicast_id":8550022549195779350,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1459795352923689%21f96bfff9fd7ecd"}]}
答案 0 :(得分:0)
确保您的API密钥正确无误,并确保您的服务器IP在证书中列为可信任。有时,WiFi连接的设备在一段时间后对GCM没有响应。尝试重新启动您的设备。它应该开始接收您发送的所有消息。
另外,从此SO question开始,检查您是否错误地使用了android:permission="com.google.android.gcm.c2dm.permission.SEND"
而不是android:permission="com.google.android.c2dm.permission.SEND"
。
希望这有帮助!