使用 Firebase Cloud Messaging 从服务器端管理主题订阅的示例 GET 请求

Jai*_*oya 2 android push-notification firebase firebase-cloud-messaging android-push-notification

我在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
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

{"error":"MissingAuthorization"}
Run Code Online (Sandbox Code Playgroud)

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

编辑1:我正在查看如何检查已订阅了多少主题?,我还尝试使用在 Firebase 控制台的“Cloud Messaing”选项卡下找到的密钥。这是我所看到的:

在此输入图像描述

我也尝试使用上图中的这些键进行 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>
Run Code Online (Sandbox Code Playgroud)

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

Jai*_*oya 6

根据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有关如何在标头中提供参数的示例。

\n\n

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

\n\n

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

\n\n
Log.d("The token of device: ", FirebaseInstanceId.getInstance().getToken());\n
Run Code Online (Sandbox Code Playgroud)\n\n

在Android监视器的日志中,我发现IID_TOKEN我需要的:

\n\n
D/The\xc2\xa0token\xc2\xa0of\xc2\xa0device:: f35EFw4bsef:QWE34bFm56ZuQLWYSDDgPlkf4a88Lu6Gp4DoXVDJ5dRIlsdDncq0UdNnlDi7wxbbut6YX7Z1kwgyS3bzk_Zrl-1doHCf9XFdOXTThNzo4sDFEWqQjHKfNa3uH2Js4Flbf_CnRkD2Mftr\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
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\n{"applicationVersion":"22","attestStatus":"NOT_ROOTED","application":"com.[myapp]","scope":"*","authorizedEntity":"232255245625","appSigner":"3d34g3fs3443292d825f21da4fdd5b34a56f2a3h","platform":"ANDROID"}\nC:\\curl>\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n