Има ли някакъв начин да разберете дали потребителят на Quickblox е онлайн? Използвам Quickblox iOS SDK.
Quickblox: как да разберете дали потребителят е онлайн?
Отговори (2)
Има 2 начина:
- Използване на REST API - ето ръководство http://quickblox.com/developers/SimpleSample-users-ios#Online.5COffline_status
- Използване на списък с контакти в чата http://quickblox.com/developers/SimpleSample-chat_users-ios#Contact_list
Swift 5:
За да получим Онлайн статуса на противниковия потребител и точното Последно виждане, трябва да добавим и двамата потребители в списъка с контакти на всеки друг, като използваме addUserToContactListRequest()
API.
Потребител A изпраща заявка да станете „приятели“ с потребител B. Потребител Б приема поканата за приятелство. И сега потребител A и B се появяват в списъка на другия.
Етап 1:
Проверете дали противниковият потребител вече е добавен в контактите или не
let isAvailable = QBChat.instance.contactList?.contacts?.filter {(contacts) -> Bool in
// self.dialog.recipientID is an opponent user's ID
return contacts.userID == self.dialog.recipientID ? true : false
}
Ако е налично в контактите, проверете онлайн състоянието, ако не е налично, изпратете заявка за добавяне в контактите.
if isAvailable!.count > 0 {
if isAvailable![0].isOnline {
//print("User Is Online")
} else {
//print("User Is Offline")
//Check Last Seen
self.fetchLastSeen(userId: self.dialog.recipientID)
}
} else {
QBChat.instance.addUser(toContactListRequest: UInt(self.dialog!.recipientID)) { (err) in
print("\(err)")
}
}
Стъпка 2 :
прилагане на QBChatDelegate
методи.
Заявка за добавяне на контакти
// This method will get called whenever you will receive any new add contact request
func chatDidReceiveContactAddRequest(fromUser userID: UInt) {
//Confirm add to contact list request.
QBChat.instance.confirmAddContactRequest(userID) { (error) in
}
}
Следният метод се извиква в случай, че онлайн статусът на потребител от списъка с контакти е променен.
func chatDidReceiveContactItemActivity(_ userID: UInt, isOnline: Bool, status: String?) {
if userID == self.dialog.recipientID {
if isOnline {
print("User Is Online")
} else {
//print("User Is Offline")
//Check Last Seen
fetchLastSeen(userId: NSInteger(userID))
}
}
}
Стъпка 3:
извлечете последното посещение на потребител, използващ този lastActivityForUser()
func fetchLastSeen(userId: NSInteger){
QBChat.instance.lastActivityForUser(withID: UInt(userId)) { (timeStamp, err) in
print(timeStamp)
// here we get total seconds, since how long user was inactive
// minus the seconds from current time
if err == nil {
let updatedTime = Calendar.current.date(byAdding: .second, value: -Int(timeStamp), to: Date())
guard let dateSent = updatedTime else {
return
}
var lastSeenStr = ""
if (Calendar.current.isDateInToday(updatedTime!)){
lastSeenStr = "Today"
} else if (Calendar.current.isDateInYesterday(updatedTime!)){
lastSeenStr = "Yesterday"
} else {
let dateFormat = DateFormatter()
dateFormat.dateFormat = "d-MMM"
lastSeenStr = dateFormat.string(from: updatedTime!)
}
let text = messageTimeDateFormatter.string(from: dateSent)
print("\(lastSeenStr + " " + text)") // e.g. 11-Sep 11:44 AM
}
}
}