使用 Firebase 云消息传递从服务器端管理主题订阅的 GET 请求示例
Example GET request to manage topic subscriptions from the server side using Firebase Cloud Messaging
我在 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 控制台中 "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>
请注意我如何简单地 copied/pasted 我在 "Example GET request" 标题下的 https://developers.google.com/instance-id/reference/server#get_information_about_app_instances 找到的内容。我什至没有尝试使用我自己的密钥,但我看到了同样的错误:{"error":"MissingAuthorization"}
。这是否意味着问题出在我使用的密钥上?这不是我在 Firebase 控制台中看到的那个吗?
根据 https://developers.google.com/instance-id/reference/server, under the heading "Get information about app instances", it shows that it is necessary to provide the Authorization: key=YOUR_API_KEY
, which is set in the header. See at https://android.jlelse.eu/firebase-push-notification-using-curl-command-devoid-backend-e63795d282c4 中的说明如何在 header 中提供参数的示例。
关于必须使用的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 令牌。就我而言,我是通过打印设备的实例 ID 或令牌找到它的,在我的 Android 应用程序的第一个 activity 中使用以下代码:
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>
注意:在上面的代码中,出于隐私目的,我更改了令牌和密钥等内容的值,但您需要使用您的值,一切都应该有效。
我在 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:我在
我也使用上图中的那些键尝试了 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>
请注意我如何简单地 copied/pasted 我在 "Example GET request" 标题下的 https://developers.google.com/instance-id/reference/server#get_information_about_app_instances 找到的内容。我什至没有尝试使用我自己的密钥,但我看到了同样的错误:{"error":"MissingAuthorization"}
。这是否意味着问题出在我使用的密钥上?这不是我在 Firebase 控制台中看到的那个吗?
根据 https://developers.google.com/instance-id/reference/server, under the heading "Get information about app instances", it shows that it is necessary to provide the Authorization: key=YOUR_API_KEY
, which is set in the header. See at https://android.jlelse.eu/firebase-push-notification-using-curl-command-devoid-backend-e63795d282c4 中的说明如何在 header 中提供参数的示例。
关于必须使用的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 令牌。就我而言,我是通过打印设备的实例 ID 或令牌找到它的,在我的 Android 应用程序的第一个 activity 中使用以下代码:
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>
注意:在上面的代码中,出于隐私目的,我更改了令牌和密钥等内容的值,但您需要使用您的值,一切都应该有效。