2

我在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:我正在查看如何检查订阅了多少主题?,并且我还尝试使用在 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 控制台中看到的吗?

4

1 回答 1

5

根据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必须使用的,它是出现在这个问题的“编辑 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>

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

于 2017-12-05T16:39:45.773 回答