想象一个用户安装并打开我的应用程序。将生成FCM注册令牌并将其发送到我的服务器。稍后,说用户清除了我的应用程序数据。然后,当他打开应用程序时,将生成一个新令牌。因此,由于还没有办法让我知道这一点,因此我也按照旧注册的常规发送通知。现在:
FCM是否会假定设备处于脱机状态,并继续尝试发送通知,直到其生命周期结束(默认为4周)?
如果不是,则返回注册令牌未注册错误需要多长时间?
答案 0 :(得分:0)
否。 FCM服务器将知道令牌已立即过期。
从#1开始,它将立即发送回去。
在这里可能令人困惑的是您实际收到func sendRequest<T: Decodable>(api: String, parameters: [String: Any]? = nil, outputBlock: @escaping (T) -> () ) {
guard let url = URL(string: api) else {return}
print("hitting : -", url.absoluteString)
var request = URLRequest(url: url)
if let parameters = parameters {
request.httpMethod = "POST"
var postArr = [String]()
for(key, value) in parameters
{
postArr.append(key + "=\(value)")
}
let postString = postArr.map { String($0) }.joined(separator: "&")
request.httpBody = postString.data(using: .utf8)
if let data = request.httpBody, let str = String(data: data, encoding: String.Encoding.utf8) {
print(str)
}
}
URLSession.shared.dataTask(with: request) { (data, response, error) in
DispatchQueue.main.async {
Indicator.shared.hideProgressView()
if let err = error {
print(err.localizedDescription)
return
}
guard let data = data else {return}
do {
let obj = try JSONDecoder().decode(T.self, from: data)
outputBlock(obj)
} catch let jsonErr {
print(jsonErr)
}
}
}.resume()
错误的步骤。这是两种可能的情况:
下一个来自您的场景:
您将推送通知发送到令牌。 FCM认为该令牌有效,并向您发送成功响应,并在可行的情况下将要发送的消息排入队列。
此处,令牌当前仍有效。这样您将收到像往常一样的成功回复。
设备在线。 InstanceID服务进行同步,让其知道旧令牌现在无效,并请求新令牌。生成新令牌。 4.5设备几乎同时在线,FCM会检查令牌是否仍然有效。如果没有,那么它将丢弃排队的消息。
要永远记住的事情是,FCM正在充当中间人。希望这可以清除一切。干杯!