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

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

使用 php 在 android 和 ios 上使用 Infusionsoft 发送推送通知

谷歌云存储:401 未经授权的错误

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

在 GCM 中发送推送通知时出现未经授权的错误