在PHP中使用GCM向iOS发送远程推送通知时InternalServerError的结果

时间:2016-03-03 07:45:41

标签: php ios google-cloud-messaging

我尝试在我的应用中为 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 ,然后就可以了。 我想知道如何解决这个问题。

2 个答案:

答案 0 :(得分:8)

如果您在 GCM for iOS {"error":"InternalServerError"} 中遇到此错误消息,请确保上传了正确的 P12 Google Developer Console 中的证书 。并确保为签名证书正确设置配置文件,并按如下所示进行以下设置:

  • 促进发展

      

    @{kGGLInstanceIDRegisterAPNSOption:deviceToken, kGGLInstanceIDAPNSServerTypeSandboxOption:@YES};

  • 生产/分销

      

    @{kGGLInstanceIDRegisterAPNSOption:deviceToken, kGGLInstanceIDAPNSServerTypeSandboxOption:@NO};

答案 1 :(得分:1)

android-gcm群体也提出了类似的问题。看起来问题来自使用的证书。该小组的其他成员通过上传新证书解决了该问题