我在iOS上使用Firebase,并试图实现主题。我知道如何订阅和退订:
Messaging.messaging().subscribe(toTopic: "myTopic") Messaging.messaging().unsubscribe(fromTopic: "myTopic")
我的问题是,我如何知道我订阅了哪些主题?如何取消订阅我订阅的所有主题?如何从Firebase访问所有主题?
lymnna711#
在iOS中,我通过向https://iid.googleapis.com/iid/info发送GET请求来做到这一点:用于解码响应的模型:
https://iid.googleapis.com/iid/info
GET
struct AppInstance: Codable { let applicationVersion: String let gmiRegistrationId: String let application: String let scope: String let authorizedEntity: String let rel: Rel let platform: String } struct Rel: Codable { let topics: [String: AddDate] enum CodingKeys: String, CodingKey { case topics } init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) topics = try container.decode([String: AddDate].self, forKey: .topics) } } struct AddDate: Codable { let addDate: String }
然后调用以下函数:
func getSubscribedTopics() async -> [String]? { let fcmToken = "YOUR_FCM_TOKEN" // received inside didReceiveRegistrationToken callback guard var urlComponents = URLComponents(string: "https://iid.googleapis.com/iid/info/\(fcmToken)") else { return nil } let parameter = URLQueryItem(name: "details", value: "true") urlComponents.queryItems = [parameter] guard let url = urlComponents.url else { return nil } let serverKey = "YOUR_SERVER_KEY" // from firebase console var request = URLRequest(url: url) request.httpMethod = "GET" request.addValue("Bearer \(serverKey)", forHTTPHeaderField: "Authorization") // this will be deprecated let (data, _) = try! await URLSession.shared.data(for: request) let decoder = JSONDecoder() let appInstance = try! decoder.decode(AppInstance.self, from: data) let topics = appInstance.rel.topics.keys.map { $0 as String } return topics }
这目前正在工作,但使用服务器密钥进行授权将在2024年6月被弃用。我应该用令牌替换服务器密钥,但这对我不起作用,服务器回答“Unauthorized”。
1条答案
按热度按时间lymnna711#
在iOS中,我通过向
https://iid.googleapis.com/iid/info
发送GET
请求来做到这一点:用于解码响应的模型:
然后调用以下函数:
这目前正在工作,但使用服务器密钥进行授权将在2024年6月被弃用。我应该用令牌替换服务器密钥,但这对我不起作用,服务器回答“Unauthorized”。