Cometchat не разбудит приложение по вызову или полученному сообщению
Я внедрил Cometchat SDK в свое приложение, и я также выполнил все требования, проходящие через firebase, чтобы добавить устаревший ключ сервера в консоль Cometchat и подписаться на канал с помощью "push_channel" и использовать команду ниже:
Messaging.messaging().subscribe(toTopic: push_channel)
Допустим, устройство iOS отправило сообщение на другое устройство iOS или даже попыталось позвонить, и приложение было выключено, не происходит никакого уведомления, уведомляющего другое устройство о получении вызова или сообщения, пока пользователь не откроет приложение, а затем откройте CometChat, чтобы иметь возможность общаться или видеть сообщения, я что-то упустил? такое Cometchat - это VOIP, который должен разбудить приложение по вызову? или нет?
Обновить:
Мы попытались отправить уведомление на целевой токен fcm token, и оно работает нормально и успешно принимается (через консоль firebase).
Мы также пытались отправить уведомление в тему, которая является push_channel
через пожарную базу и уведомления не принимаются ни на одно устройство.(через консоль Firebase).
Мы уверены, что реализовали всю необходимую информацию в консоли Firebase и Cometchat.
Озабоченность: У меня есть проблема, но проблема не должна быть, но я скажу, что мы используем 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)
Я нахожусь в тупике, и я надеюсь, что смогу получить помощь, чтобы это исправить, потому что у меня нет выбора.
1 ответ
Похоже, вы не добавили ключ Firebase Legacy в административную панель CometChat. Пожалуйста, выполните следующие действия:
- Получите "Legacy Server Key" для настройки службы push-уведомлений Firebase.
- Добавьте устаревший ключ сервера в качестве ключа сервера Firebase в административной панели CometChat в разделе "Настройки" -> вкладка "Мобильный".
Не могли бы вы также проверить, правильно ли выполнены следующие пункты? Именно они отвечают за получение push-уведомлений от Firebase -
Подписка на канал, откуда вы получите push-уведомление. Вы получите этот канал из ответа, полученного в обратном вызове onMyInfoReceived() при вызове метода подписки с использованием SDK. Ответ обратных вызовов содержит ключ с именем "push_channel". Это содержит канал push-уведомлений. После того, как вы подпишетесь на этот канал, вы начнете получать push-уведомления для чата один на один. Вы можете подписаться на полученный канал, используя следующий метод:
[[FIRMessaging messaging] subscribeToTopic:[NSString stringWithFormat:@"%@",push_channel]];
- Для push-уведомлений в группе вы получите "push_channel" из ответа, полученного при успешном обратном вызове метода joinGroup. Как только вы подпишетесь на этот канал, вы начнете получать push-уведомления для группы.
Пожалуйста, обратитесь к приложенному изображению для лучшего понимания.
Для получения дополнительных ресурсов, вы можете обратиться к документации для push-уведомлений в iOS: https://developer.cometchat.com/docs/ios-push-notifications
Раскрытие - эта учетная запись принадлежит команде CometChat.