使用 Firebase 云消息传递从服务器端管理主题订阅的示例 GET 请求

Posted

技术标签:

【中文标题】使用 Firebase 云消息传递从服务器端管理主题订阅的示例 GET 请求【英文标题】:Example GET request to manage topic subscriptions from the server side using Firebase Cloud Messaging 【发布时间】:2017-12-04 20:50:36 【问题描述】:

我在https://developers.google.com/instance-id/reference/server#get_information_about_app_instances 找到了以下示例 GET 请求:

https://iid.googleapis.com/iid/info/nKctODamlM4:CKrh_PC8kIb7O...clJONHoA?details=trueAuthorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

该示例中的键是:AIzaSyZ-1u...0GBYzPu7Udno5aA。我在哪里可以找到我的密钥,我应该在我的 GET 请求中使用的那个?我试图在https://console.developers.google.com/apis/credentials 找到它,这就是我所看到的:

我尝试使用您在上图中看到的所有四个键,但我总是从浏览器收到此消息:

"error":"MissingAuthorization"

此错误是指密钥错误还是其他原因?我是否在正确的地方寻找钥匙?谢谢。

编辑 1:我正在查看How to check how many topics has been subscribed? 的问题,并且我还尝试使用我在 Firebase 控制台中找到的密钥,位于“云消息传递”选项卡下。这是我看到的:

我也使用上图中的这些键尝试了 GET 请求,但仍然看到相同的错误:"error":"MissingAuthorization"

编辑 2:我在命令行中使用它:

C:\curl>curl -k https://iid.googleapis.com/iid/info/nKctODamlM4:CKrh_PC8kIb7O...clJONHoA?details=trueAuthorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
"error":"MissingAuthorization"
C:\curl>

注意我是如何简单地复制/粘贴在“示例 GET 请求”标题下的 https://developers.google.com/instance-id/reference/server#get_information_about_app_instances 找到的内容。我什至没有尝试使用自己的密钥,但我看到了同样的错误:"error":"MissingAuthorization"。这是否意味着问题出在我使用的密钥上?不是我在 Firebase 控制台中看到的那个吗?

【问题讨论】:

【参考方案1】:

根据https://developers.google.com/instance-id/reference/server的说明,在“获取有关应用实例的信息”标题下,表明需要提供在标题中设置的Authorization: key=YOUR_API_KEY。请参阅https://android.jlelse.eu/firebase-push-notification-using-curl-command-devoid-backend-e63795d282c4 中有关如何在标头中提供参数的示例。

关于必须使用的Authorization: key=YOUR_API_KEY,它是出现在这个问题的“EDIT 1”部分的关键。我使用了Server key,而不是Legacy server key,它对我有用。

https://developers.google.com/instance-id/reference/server 显示此端点:https://iid.googleapis.com/iid/info/IID_TOKEN。但是IID_TOKEN 必须替换为与安装在设备上的应用程序实例相对应的实例 ID 令牌。就我而言,我是通过在我的 Android 应用程序的第一个活动中使用以下代码打印设备的实例 ID 或令牌找到它:

Log.d("The token of device: ", FirebaseInstanceId.getInstance().getToken());

在Android监视器的日志中,找到了我需要的IID_TOKEN

D/The token of device:: f35EFw4bsef:QWE34bFm56ZuQLWYSDDgPlkf4a88Lu6Gp4DoXVDJ5dRIlsdDncq0UdNnlDi7wxbbut6YX7Z1kwgyS3bzk_Zrl-1doHCf9XFdOXTThNzo4sDFEWqQjHKfNa3uH2Js4Flbf_CnRkD2Mftr

最后,我在命令提示符下使用了 cURL,你可以看到我是如何正确获得结果的:

C:\curl>curl -X GET -k --header "Authorization: key=AAAAJ5XteYp:DKE32aIdFalyFXku6A-eR_wHL6ZBUFxfyPtcrm3wwF2l-nPEv_vAeYqo3NJzaIKKcSSow6gqoAwf3cBEm8QWYbF6w-asW0SX0RmHZftQglwmo_ziwrk8wFcGp1_DOQ1PLFFgP4BFWXAD" "https://iid.googleapis.com/iid/info/f35EFw4bsef:QWE34bFm56ZuQLWYSDDgPlkf4a88Lu6Gp4DoXVDJ5dRIlsdDncq0UdNnlDi7wxbbut6YX7Z1kwgyS3bzk_Zrl-1doHCf9XFdOXTThNzo4sDFEWqQjHKfNa3uH2Js4Flbf_CnRkD2Mftr
"applicationVersion":"22","attestStatus":"NOT_ROOTED","application":"com.[myapp]","scope":"*","authorizedEntity":"232255245625","appSigner":"3d34g3fs3443292d825f21da4fdd5b34a56f2a3h","platform":"ANDROID"
C:\curl>

注意:在上面的代码中,出于隐私目的,我已经更改了令牌和密钥等内容的值,但是您需要使用您的值,并且一切都应该正常工作。

【讨论】:

以上是关于使用 Firebase 云消息传递从服务器端管理主题订阅的示例 GET 请求的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 云消息传递如何在 Android 上运行

不使用 Firebase 云消息传递或任何其他类似服务的 Android 推送通知

Firebase Spark 计划云消息传递限制 [重复]

Firebase 与 Android Java 中的 Google 云消息传递

Firebase 云消息传递 - 如何验证令牌?

Firebase 云消息传递 REST API Spring