我尝试在我的应用中为 iOS
实施 Google Cloud Messaging(GCM)。我尝试了 pod
GcmExample Xcode Project
上提供的代码,并写了一个 PHP
脚本通过PHP cURL
发送请求。
我的 PHP
代码如下:
gcmPush(
"kU6GAbdQEg0:APA91bGSF42WITzubJ9lwQ2qUqL4ETtZfQEOthazc4tP1CRhxx8tKSRChwgtFK37-kt7RjG2P_Ncj2bDOONpPVsYkjxCNi3NDhMNWSkJ7pnlR83jdbMJfOKlD1CPXCgAvZjbwpzdeiTa",
"This is only a test from GCM for iOS.",
"PHP test"
);
function gcmPush($GCM_regID, $message, $title) {
$GOOGLE_API_KEY = "AIzaSyAd8pw7_J8i-FPswnhUMkFCDHtufSCFFTc";
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'to' => $GCM_regID,
'notification' => array(
'sound' => 'default',
'badge' => '1',
'body' => $message,
'title' => $title
)
);
$headers = array(
'Authorization: key=' . $GOOGLE_API_KEY,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
echo "\r\n";
if ($result === FALSE) {
die('Failed: ' . curl_error($ch) . "\r\n");
} else {
echo "Success\r\n";
}
curl_close($ch);
}
请求成功,但 Google GCM服务器的结果包含以下内容:
{"multicast_id":6164898138439370127,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InternalServerError"}]}
Google API密钥有什么问题吗?
我尝试使用此脚本将远程通知发送到 GcmExample.xcworkspace
,然后就可以了。
我想知道如何解决这个问题。
答案 0 :(得分:8)
如果您在 GCM for iOS {"error":"InternalServerError"}
中遇到此错误消息,请确保上传了正确的 P12 Google Developer Console 中的证书 。并确保为签名证书正确设置配置文件,并按如下所示进行以下设置:
促进发展:
@{kGGLInstanceIDRegisterAPNSOption:deviceToken, kGGLInstanceIDAPNSServerTypeSandboxOption:@YES};
生产/分销:
@{kGGLInstanceIDRegisterAPNSOption:deviceToken, kGGLInstanceIDAPNSServerTypeSandboxOption:@NO};
答案 1 :(得分:1)
android-gcm群体也提出了类似的问题。看起来问题来自使用的证书。该小组的其他成员通过上传新证书解决了该问题