我为我的Android应用程序创建了一个用于GCM推送通知的Android API密钥。从过去两天开始,GCM服务器在PHP中返回Unauthorized(401)响应。
Android API密钥无效/过期是否有任何原因?或者GCM是否弃用了Android API密钥?
我还没有得到关于为什么Android API密钥无效的正确解释?他们中的大多数人更喜欢使用服务器密钥而不是GCM的Android API密钥,但没有提到为什么不使用Android API密钥。
为什么不在GCM中使用Android API密钥? Android API密钥有任何限制吗?或者,如果通知消息超过每日限制,GCM服务器是否阻止通知/ GCM服务器使Android API密钥无效?
答案 0 :(得分:62)
更新:正在使用的术语是 服务器密钥 。
就在最近,现在正在推出 Firebase云消息传递令牌(FCM令牌)。这在Firebase控制台的Cloud Messaging选项卡中可见。
更新:GCM docs中有一条明显的说明:
从2016年9月开始,只能使用“设置”面板的Cloud Messaging标签在Firebase控制台中创建新的服务器密钥。可以在Firebase console中导入需要创建新服务器密钥的现有项目,而不会影响其现有配置。
更新:似乎从GCM迁移到FCM 修复了401 Unauthorized Error的问题。
如果您刚刚开始使用GCM ,而不是在Google Developers Console中创建项目,请在Firebase控制台中执行此操作。创建项目后,只需使用自动生成的服务器密钥。以下是查找服务器密钥的步骤:
对于旧的GCM项目,您只需将项目导入Firebase控制台:
出于某种原因,现在只有一个服务器密钥可用于GCM。 Android Key并不是唯一似乎无效的,所有其他客户端API密钥(浏览器,iOS,Android)都是。
当涉及Server Key的描述时:
如果您的应用程序在服务器上运行,请创建并使用服务器密钥。
使用服务器密钥是合乎逻辑的,因为您在服务器上使用API密钥,并且它正在使用GCM连接服务器。
如果您将FCM docs与GCM docs(在 凭据 下)进行比较,您会发现在GCM中,它只表示API密钥,在FCM中,它已经指定了一个服务器密钥。那么,FCM是GCM的新版本,可能与它有关吗?我不太确定,但我认为你得到了我所说的要点。
更新:在GCM文档中,现在显示了服务器密钥。
默认情况下,在完成Configure your API Project步骤后,会生成一个Server API密钥(我通过选择Android应用程序对其进行了测试)。与firebase-cloud-messaging相同。每当我创建一个新项目时,它只会自动生成一个服务器密钥。
希望将来能解释原因。
继续前进并添加有关如何创建服务器密钥的步骤。以防其他人感到困惑,或者新手不确定如何。
--- 开发人员控制台中的更新会切断此步骤 ---
到那时,服务器密钥应该可用。
更新:生成API密钥似乎最近发生了变化。直到我上面提到的第4步,它才一样。但是,在您选择API密钥后,它将直接创建API密钥,而不会询问它是什么类型的密钥(服务器,Android,浏览器,iOS)。它只允许您设置一些可见的 限制 ,具体取决于您要生成的API密钥。
更新:在创建没有限制的API密钥时,它会显示一个通知(感叹号),表明您的API密钥容易受到攻击,这就是为什么非常鼓励为您的API密钥添加限制。一个post遇到了这个问题,添加限制就能解决它。
答案 1 :(得分:-1)
这对你来说可能很奇怪,但这就是为我解决的问题 ......
在我的后端,......这个产生了错误..
$Key = 'someKey';
这个解决了错误..
$Key = "someKey";