从 Urban Airship Offboarding 文件中,我收到了以下信息:
我们很遗憾看到您离开,但希望您能顺利过渡。以下是您需要注意的一些事项: 进行 API 调用以访问您的所有设备令牌和 GCM 注册 ID。为什么?这将提供转换这些令牌和 ID 的能力,因此如果客户拥有 App Bundle ID,则不会提示已在 iOS 上选择推送通知的设备再次这样做。http://docs.urbanairship.com/api/ua.html#device-listing。
通过使用 GET /api/apids 和http://docs.urbanairship.com/api/ua.html#device-listing的“APID 列表”标题下的信息,我能够成功获取注册到我的应用程序的 Android APID 。但是,我不确定如何在 Firebase Cloud Messaging 中使用 APID。我想要的是从 Urban Airship 获取我的所有设备令牌和 Firebase Cloud Messaging 注册 ID,但不是 Urban Airship 独有的值。我的印象是,APID 是 Urban Airship 独有的,就像 Channel ID(在 Java 中通过UAirship.shared().getPushManager().getChannelId()
) 也是 Urban Airship 独有的。我正在尝试从 Urban Airship 导出设备令牌,以便我可以独立于 Urban Airship 从 Firebase Cloud Messaing 使用它们。换句话说,我想从 Urban Airship 迁移设备。FirebaseInstanceId.getInstance().getToken()
有没有办法以方法返回它们的相同格式获取设备令牌?该格式如下所示:
f32EVa9yfbo:AJA91bFg53ZuQLWYSDDqPlkf4a88Lu6Gp4DoXVDJ2wRIlnjDngq0UdNnlSi7wxbbut6YX7Z1kmvyS3bhk_Zrl-1doHCf5XFdOXTThNzo4sXASWqQjHKfNa3pH2Js4Zlbf_CtRkD2Peho
谢谢你。
更新 1:
我找到了一种获取 GCM 注册 ID 的方法:
步骤 1.GET /api/apids
用于获取注册到此应用程序的 Android APID 以及相关元数据:
C:\curl>curl -k https://go.urbanairship.com/api/apids/ -u "<AppKey>:<MasterSecret>" -H "Content-Type: application/json" -X GET |more
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0{
"next_page" : "https://go.urbanairship.com/api/apids/?start=0584f193-07a0-49f7-b2d3-92f8e05ur6b5&limit=1000",
"apids" : [ {
"tags" : [ "City-1" ],
"alias" : null,
"active" : false,
"created" : "2017-07-17 23:02:40",
"apid" : "00027235-66b4-4433-a40f-254532d8abd1"
}, {
"tags" : [ "City-1" ],
"alias" : null,
"active" : true,
"created" : "2017-09-14 15:41:35",
"apid" : "00036ca3-d628-4353-be92-0dc6fe03afc6"
}, {
"tags" : [ "city-2" ],
"alias" : null,
"active" : true,
"created" : "2017-09-18 16:38:39",
"apid" : "000222f5-824a-42f2-8ba0-c58b4c2fb2a2"
}, {
"tags" : [ "city-2" ],
-- More --
结果是一个包含许多 apid 的长数组
步骤 2.GET /api/apids/(APID)
用于获取有关特定 Android APID 的信息
C:\curl>curl -k https://go.urbanairship.com/api/apids/000222f5-824a-42f2-8ba0-c58b4c2fb2a2 -u "<AppKey>:<MasterSecret>" -H "Content-Type: application/json" -X GET
{"last_registration":"2017-12-14 17:36:05","created":"2017-10-19 17:05:18","gcm_registration_id":"bIY0GH6-hqk:APA91bH2xUBtlfga2kBG0GjvjbBYrI3M72BbXc3tTo7pSuY61w1wrgOeTbEqEd5J2SmUcQx25uU8TafWk2tDP7Vf7bc0ZsQrtENlFJDNIb--LUVuZimjOegyaepPYuQvm_9gmJDsviwY","apid":"000222f5-824a-42f2-8ba0-c58b4c2fb2a2","alias":"","active":true,"tags":["city-2"]}
现在,我看到以 Firebase Cloud Messaging 可以识别为设备令牌 ID 的格式返回的内容,并且我可以在没有 Urban Airship 的情况下使用它从 Firebase Cloud Messaging 发送推送通知:
bIY0GH6-hqk:APA91bH2xUBtlfga2kBG0GjvjbBYrI3M72BbXc3tTo7pSuY61w1wrgOeTbEqEd5J2SmUcQx25uU8TafWk2tDP7Vf7bc0ZsQrtENlFJDNIb--LUVuZimjOegyaepPYuQvm_9g
现在,我看到的复杂情况是,正如您在上面看到的,我必须提供特定的 APID 才能接收该gcm_registration_id
APID。当我只使用上面第 1 步中的示例时,我在返回的数组中GET /api/apids
没有得到任何结果。gcm_registration_id
这使得获取gcm_registration_id
值的过程变得非常乏味和冗长,因为对于我在步骤 1 中编写的“GET /api/apids”返回的每个 APID,我必须使用GET /api/apids/(APID)
我在步骤 2 中编写的示例。如果例如,我有 70,000 个 APID 值,除非我编写脚本或以某种方式自动执行下载 APID 的过程,否则我将不得不执行这个繁琐的过程 70,000 次。有可能当我GET /api/apids
在步骤 1 中使用时,我可以立即将其作为元数据中数组的一部分接收,gcm_registration_id
价值观?这将有助于下载gcm_registration_id
值的过程,以便我可以在 Firebase Cloud Messaging 中使用它们。
此外,如果我看到的值是我可以在 Firebase 云消息传递中使用的设备令牌 ID 值,我希望收到确认,gcm_registration_id
以便在不使用 Urban Airship 的情况下向设备发送推送通知。
更新 2:
问题是我需要使用https://go.urbanairship.com/api/apids/{apid}
才能查看这些gcm_registration_id
值,我不想这样做,因为如果我有 70,000 个注册设备,我将不得不进行 70,000 个 cURL 查询,为 70,000 个{apid}
值中的每一个提供 70,000 次。这将需要永远!如果我只使用https://go.urbanairship.com/api/apids/
without {apid}
,则返回的数组不包含gcm_registration_id
值。
更新 3:
解决方案是编写 Java 代码并请求https://go.urbanairship.com/api/apids以获取并存储 APID 值数组,然后将该数组的每个元素{apid}
作为请求以https://go.urbanairship.com/api/apids/{apid}
获取注册到我的应用程序的所有 GCM/FCM 设备令牌?我猜对https://go.urbanairship.com/api/apids的单个 cURL 请求可能不足以获取注册到我的应用程序的所有 GCM/FCM 设备令牌;Java 代码中的请求、数组和循环可能是获取我尝试下载的令牌所必需的。如果有人能证实这一点,我将不胜感激。