使用php向Google Cloud Messaging发送通知会导致未经授权的错误401


Sending notifications to Google Cloud Messaging with php gives me Unauthorized Error 401

在搜索有关如何使用GCM但使用PHP而不是servlet发送通知的信息时,我发现了以下信息:GCM with PHP(Google Cloud Messaging)

我测试了这些问题的答案的工作代码,还为浏览器应用程序创建了一个密钥(带有referers),我授予了这个ip:.mywebsite.com/的权限(php文件在这个url上:"http://www.mywebsite.com/~jma/cHtml5/cap/kk.php")

但我得到的回复是:未经授权的错误401

我做错了什么?

这是php文件:

<?php
    // Replace with real server API key from Google APIs        
    $apiKey = "fictional key";
    // Replace with real client registration IDs
    $registrationIDs = array( "APA91asdasdSDGGS232S13S4213abGqiNhCIXKjlxrkUYe_xTgTacNGB5n16b380XDd8i_9HpKGRHkvm8DDet4_WK3zumjDEKkTRWLgPS7kO-BrKzWz7eWFQaDD9PJ8zA6hlSqL9_zH21P8K22ktGKmo_VIF6YAdU9ejJovrKBTpgQktYkBZBf9Zw","APAasdasd32423dADFG91bHYYxYB7bFiX5ltbJt6A-4MBiNg7l4RS4Bqf3jIfYviaaUfZ810XJo2o66DY9-jdeJk_JR8FIZCyrmCv-eu_WLkGZ8KaoHgEDR_16H2QPm98uHpe1MjKVXbzYc4J89WMmcIrl5tHhWQnIQNzaI6Zp6yyFUNUQ");
    // Message to be sent
    $message = "Test Notificación PHP";
    // 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 ) );
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    //curl_setopt($ch, CURLOPT_POST, true);
    //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;
    //print_r($result);
    //var_dump($result);
?>

已解决!!!

您必须使用服务器应用程序的密钥(带IP锁定),而不是浏览器密钥

:)

您需要在服务器端编码的API密钥字段中使用服务器应用程序的密钥。创建服务器密钥时,不要在IP地址字段中输入任何内容。