GCM 服务器端 PHP - 未经授权的 401 错误

Posted

技术标签:

【中文标题】GCM 服务器端 PHP - 未经授权的 401 错误【英文标题】:GCM server side PHP - Unauthorized 401 Error 【发布时间】:2014-05-20 16:01:14 【问题描述】:

我设置了 google 开发者控制台以启用 适用于 android 的 Google Cloud Messaging

在凭证方面,我创建了浏览器 API 密钥,在引用中键入 0.0.0.0。实际上我创建了这两种类型的键,因为我在不同的教程中发现了不同的指示。

browser-key picture

server-key picture

我用这个 php 脚本测试了密钥

<?
/**
 * The following function will send a GCM notification using curl.
 * 
 * @param $apiKey       [string] The Browser API key string for your GCM account
 * @param $registrationIdsArray [array]  An array of registration ids to send this notification to
 * @param $messageData      [array]  An named array of data to send as the notification payload
 */
function sendNotification( $apiKey, $registrationIdsArray, $messageData )
   
    $headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . $apiKey);
    $data = array(
        'data' => $messageData,
        'registration_ids' => $registrationIdsArray
    );

    $ch = curl_init();

    curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers ); 
    curl_setopt( $ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send" );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($data) );

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;

?>
<?
// Message to send
$message      = "the test message";
$tickerText   = "ticker text message";
$contentTitle = "content title";
$contentText  = "content body";

$registrationId = '372CBFD0C4BFE728';
$apiKey = "AIzaSyDeNN1XJBFGE_lJ_35VMUmx5cUbRCUGkjo";

$response = sendNotification( 
                $apiKey, 
                array($registrationId), 
                array('message' => $message, 'tickerText' => $tickerText, 'contentTitle' => $contentTitle, "contentText" => $contentText) );

echo $response;    
?>

我希望得到类似的东西

"multicast_id":6782339717028231855,"success":0,"failure":1,"canonical_ids":0,"results":["error":"InvalidRegistration"]

但我获得(使用两个密钥)未经授权的 401 错误

感谢您的帮助。

【问题讨论】:

感谢您指出这一点: curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );没有这个我得到未经授权的 401 错误 【参考方案1】:

不要输入 0.0.0.0 作为允许的引荐来源或允许的 IP,不要输入任何内容。应该可以的。

【讨论】:

我也遇到了同样的错误。你是如何解决这个问题的,我在 localhost 中进行测试并得到未授权的 401 错误。你能在这里帮忙吗【参考方案2】:

不要在 IP 地址字段中输入任何内容。它就像一个魅力。 还要确保您在服务器端使用服务器密钥和正确的发件人 id android 客户端。

【讨论】:

以上是关于GCM 服务器端 PHP - 未经授权的 401 错误的主要内容,如果未能解决你的问题,请参考以下文章

Google GCM 服务器返回未经授权的错误 401

React本机推送通知,GCM服务器返回401

在 ASP.NET 中为 manifest.json GCM 推送通知获取未经授权的 401

GCM http 401 授权错误

WCF Rest 自托管证书安全服务返回 401 未经授权

使用 AFNetworking 在 iOS 8 中登录时解析服务器提供未经授权的 (401)