Android推送通知未经授权的错误401
Posted
技术标签:
【中文标题】Android推送通知未经授权的错误401【英文标题】:Android Push Notification unauthorized error 401 【发布时间】:2014-01-01 11:49:34 【问题描述】:我已经使用 Google 的 OAuth 2.0(来自开发者控制台)创建了一个 android 应用程序,并有一个 Android 应用程序的 API 密钥(它使用 Google 地图,顺便说一下)。
但是,我的问题是我正在使用推送通知,它可以在 android 应用程序上运行(我得到了注册 ID),但在服务器上它根本不起作用。
我正在使用 php,问题似乎是 API 密钥与我为 Android 应用程序使用的密钥相同。
那么我应该使用什么键?以及如何找回它?
代码:
<?php
function send_push_notification($registatoin_ids, $message)
// Set POST variables
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registatoin_ids,
'data' => $message,
);
$headers = array(
'Authorization: key=An_Api_Key',
'Content-Type: application/json'
);
//print_r($headers);
// 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);
// Disabling SSL Certificate support temporarly
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
// Execute post
$result = curl_exec($ch);
if ($result === FALSE)
die('Curl failed: ' . curl_error($ch));
// Close connection
curl_close($ch);
echo $result;
?>
【问题讨论】:
上面的代码是从那个代码中提取出来的,这是作为概念证明的,所以我不需要数据库代码。所以代码没有错,只有关键。 【参考方案1】:请检查您的 Google API 中允许的 IP 地址。您可以将 API 访问限制为某些 IP 地址,并且默认情况下,当您创建新 API 项目时会设置一个 IP 地址。
删除该 IP 地址,以便任何 IP 地址(包括您本地计算机的服务器)都可以连接和访问 API。
我已经实现了类似的代码并得到 401 错误。以上修复对我有用。希望对您也有帮助。
【讨论】:
我如何在 Google 的新开发者控制台中做到这一点? 我认为您应该回到旧的开发人员控制台并对其进行编辑。对于新控制台,我需要检查。 我回到旧的并将域添加到底部的列表中。但它仍然不起作用。 php页面被放置在子域中,这可能是问题吗? 我不认为子域可能会导致问题。首先尝试删除所有允许的 IP 地址,以便可以从任何托管服务器或本地服务器调用 API。转到您的 API 项目 -> 凭据。单击Edit allowed IPs
并删除所有指定的IP。试试你的应用程序。如果这可行,则您为域提供的 IP 存在一些问题。否则 API 密钥可能有错误。不过先试试这个。
问题是我在凭据下找不到编辑允许的 IPS。我仅有的部分是: - Compute Engine 和 App Engine - Android 应用程序的客户端 ID - Android 应用程序的密钥 它们都没有您提到的按钮或链接。我广告 IP 的唯一地方是浏览器键部分和通知端点页面。以上是关于Android推送通知未经授权的错误401的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET 中为 manifest.json GCM 推送通知获取未经授权的 401