Я внедрил Cometchat SDK в свое приложение, а также выполнил все требования, проходящие через firebase, чтобы добавить устаревший ключ сервера в консоль Cometchat и подписаться на канал с помощью "push_channel" и использовать команду ниже:
Messaging.messaging().subscribe(toTopic: push_channel)
Допустим, что устройство iOS отправило сообщение на другое устройство iOS или даже попыталось позвонить, и приложение было выключено, не происходит никакого уведомления, уведомляющего другое устройство о получении вызова или сообщения, пока пользователь не откроетприложение, а затем откройте CometChat, чтобы иметь возможность общаться или видеть сообщения, я что-то упустил?такое Cometchat - это VOIP, который должен разбудить приложение по вызову?или нет?
Обновление:
Мы пытались отправить уведомление на целевой токен fcm, оно работает нормально и успешно принимается (через консоль firebase).
Мы также пытались отправить уведомление в тему, которая является push_channel
, через пожарную базу, и уведомления не принимаются ни на одно устройство.(через консоль firebase).
Мы уверены, что реализовали всю необходимую информацию в консоли firebase и кометах.
Озабоченность: У меня есть беспокойство, но проблема не должна быть, но я скажу, что мы используем push-уведомления вместо p12 в сертификатах облачных сообщений firebase, но это не должно бытьпроблема хоть?
Код и обновление
Мы добавили устаревший ключ сервера из firebase в Cometchat> Настройки> Мобильный, так как долгое время и до сих пор не работает.
Приведенный ниже код - это класс, который я использую для связи или создания экземпляра Cometchat и регистрации токена, скажите, что я делаю неправильно, даже если у вас его нетполный образец покрытия в вашей документации, так что вы идете:
Это класс CometChatHandler:
fileprivate let cometChat: CometChat = CometChat()
fileprivate let readyUI: readyUIFIle = readyUIFIle()
fileprivate let isCometOnDemand: Bool = true // For CometChat Cloud Users, Please set this to true
init(apiKey: String, licenseKey: String) {
cometChat.initializeCometChat("", licenseKey: licenseKey, apikey: apiKey, isCometOnDemand: isCometOnDemand, success: {(response) in
}, failure: { (error) in
})
}
func login(userUuid: String, userName: String) {
if self.cometChat.isUserLoggedIn() {
print("user already login")
} else {
let UID = "User_\(userUuid)"
cometChat.login(withUID: UID, success: { (dictionary: [AnyHashable: Any]!) -> () in
}, failure: { (error: Error!) -> () in
self.createUser(userUuid: userUuid, userName: userName)
})
}
}
func logout() {
cometChat.logout({ dictionary in
}, failure: { error in
})
}
func startChat(userUuid: String, delegate: UIViewController) {
if self.cometChat.isUserLoggedIn() {
self.cometChat.subscribeCallbacks(true, onMyInfoReceived: { (response) in
print("onMyInfoReceived \(String(describing: response))")
if let res = response as? Dictionary<String,Any>{
let push_channel = res["push_channel"] as? String ?? ""
print(push_channel)
DispatchQueue.main.async {
Messaging.messaging().subscribe(toTopic: push_channel)
}
}
}, onUserListReceived: { (response) in
print("onUserListReceived \(String(describing: response))")
}, onMessageReceived: { (response) in
print("onMessageReceived \(String(describing: response))")
}, onAVChatMessageReceived: { (response) in
print("onAVChatMessageReceived \(String(describing: response))")
}, onActionMessageReceived: { (response) in
print("onActionMessageReceived \(String(describing: response))")
}, onGroupListReceived: { (response) in
print("onGroupListReceived \(String(describing: response))")
}, onGroupMessageReceived: { (response) in
print("onGroupMessageReceived \(String(describing: response))")
}, onGroupAVChatMessageReceived: { (response) in
print("onGroupAVChatMessageReceived \(String(describing: response))")
}, onGroupActionMessageReceived: { (response) in
print("onGroupActionMessageReceived \(String(describing: response))")
}, onRecentChatListReceived: { (response) in
print("onRecentChatListReceived \(String(describing: response))")
}, onAnnouncementReceived: { (response) in
print("onAnnouncementReceived \(String(describing: response))")
}) { (error) in
}
openChatUI(userUuid: userUuid, delegate: delegate)
} else {
print("User not login")
}
}
#warning("TODO for left to right")
private func openChatUI(userUuid: String, delegate: UIViewController, isGroup: Bool = false, isFullScreen: Bool = true) {
self.readyUI.launchCometChat(userUuid, isGroup: isGroup,
isFullScreen: isFullScreen,
observer: delegate,
setBackButton: true, userInfo: { (response) in
print("Success Login with these data \(String(describing: response))")
}, groupInfo: { (response) in
print("Success groupInfo with these data \(String(describing: response))")
}, onMessageReceive: { (response) in
print("Success onMessageReceive with these data \(String(describing: response))")
}, success: { (response) in
print("Success success with these data \(String(describing: response))")
}, failure: { (error) in
}, onLogout: { (response) in
print("Success onLogout with these data \(String(describing: response))")
})
}
private func createUser(userUuid: String, userName: String) {
let UID = "User_\(userUuid)"
cometChat.createUser(UID,
userName: userName,
avatarUrl: "",
profileUrl: "",
role: "",
success: { (_) in
self.login(userUuid: userUuid, userName: userName)
}) { (error) in
print(error?.localizedDescription ?? "")
}
}
Для входа в систему пользователя при запускеиспользуя мое приложение, я авторизирую пользователя с помощью Cometchat:
cometChatHolder.login(userUuid: "\(id)", userName: username)
Затем, в любое время, чтобы начать чат и запустить чат, я звоню:
cometChatHolder.startChat(userUuid: "the id of the user to start the chat with", delegate: self)
Я действительно втупик, и я надеюсь, что я могу получить некоторую помощь, чтобы исправить это, потому что у меня нет выбора.
Обновление (шаги для исправления): Вот как я исправилпроблема, не полагайтесь на то, что SDK сообщит вам, что пользователь вошел в систему, поэтому каждый раз, когда вы должны запускать cometChat иru войдите в систему, а затем откройте чат, и я проверял, не вошел ли пользователь через SDK, а затем открыл SDK, и это подсказка по устранению проблемы.