Cometchat не разбудит приложение по вызову или полученному сообщению - PullRequest
0 голосов
/ 25 ноября 2018

Я внедрил 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, и это подсказка по устранению проблемы.

1 Ответ

0 голосов
/ 27 ноября 2018

Похоже, что вы не добавили ключ Firebase Legacy в административную панель CometChat.Выполните следующие действия:

  1. Получите «Ключ старого сервера» для настройки службы push-уведомлений Firebase.
  2. Добавьте ключ старого сервера в качестве ключа сервера Firebase на панели администратора CometChat в разделе «Настройки».-> вкладка «Мобильный»

Не могли бы вы также проверить, правильно ли выполнены следующие пункты?Именно они отвечают за получение push-уведомлений от Firebase -

  1. Подписка на канал, откуда вы получите push-уведомления.Вы получите этот канал из ответа, полученного в обратном вызове onMyInfoReceived () при вызове метода подписки с использованием SDK. Ответ обратных вызовов содержит ключ с именем «push_channel».Это содержит канал push-уведомлений.Как только вы подпишетесь на этот канал, вы начнете получать push-уведомления для чата один на один.Вы можете подписаться на полученный канал, используя следующий метод:

    [[FIRMessaging messaging] subscribeToTopic:[NSString stringWithFormat:@"%@",push_channel]];
    
Для push-уведомлений в группе вы получите «push_channel» из ответа, полученного при успешном обратном вызове метода joinGroup.Как только вы подпишетесь на этот канал, вы начнете получать push-уведомления для группы.

Пожалуйста, обратитесь к приложенному изображению для лучшего понимания.

Adding Legacy server key to Admin Panel

Дополнительные ресурсы можно найти в документации по push-уведомлениям в iOS: https://developer.cometchat.com/docs/ios-push-notifications

ОБНОВЛЕНИЕНА ДЕКАБРЯ, 4 :

Мы создали образец приложения и добавили в него Push-уведомления Firebase.Вы можете загрузить проект по следующему URL:

https://temp.cometchat.com/ios-swift-chat-sdk-demo-master.zip

Пожалуйста, обратитесь к коду, присутствующему в файлах ViewController.swift и AppDelegate.swift.

Надеюсь, это решит проблему.Дайте нам знать, если проблема все еще сохраняется.

Раскрытие - эта учетная запись принадлежит команде CometChat.

...