Skip to content

Commit 792e712

Browse files
author
Arief Nur Putranto
committed
fix refresh token error 401
1 parent 3703f7e commit 792e712

File tree

4 files changed

+122
-17
lines changed

4 files changed

+122
-17
lines changed

QiscusCore.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "QiscusCore"
3-
s.version = "1.14.5"
3+
s.version = "1.14.6"
44
s.summary = "Qiscus Core SDK for iOS"
55
s.description = <<-DESC
66
Qiscus SDK for iOS contains Qiscus public Model.

Source/QiscusCore/Network/NetworkManager.swift

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ class NetworkManager: NSObject {
8585
delegate.onRefreshToken(event: QiscusRefreshTokenEvent.isTokenExpired)
8686
}else if statusCode == 403 && errorMessage.lowercased() == "Unauthorized".lowercased(){
8787
delegate.onRefreshToken(event: QiscusRefreshTokenEvent.isUnauthorized)
88-
}else if statusCode == 401{
89-
delegate.onRefreshToken(event: QiscusRefreshTokenEvent.isUnauthorized)
88+
}else if statusCode == 401 && errorMessage.lowercased() == "refresh token invalid".lowercased(){
89+
//ignored
9090
}
9191
}
9292
}
@@ -96,8 +96,8 @@ class NetworkManager: NSObject {
9696
delegate.onRefreshToken(event: QiscusRefreshTokenEvent.isTokenExpired)
9797
}else if statusCode == 403 && errorMessage.lowercased() == "Unauthorized".lowercased(){
9898
delegate.onRefreshToken(event: QiscusRefreshTokenEvent.isUnauthorized)
99-
}else if statusCode == 401{
100-
delegate.onRefreshToken(event: QiscusRefreshTokenEvent.isUnauthorized)
99+
}else if statusCode == 401 && errorMessage.lowercased() == "refresh token invalid".lowercased(){
100+
//ignored
101101
}
102102
}
103103
}
@@ -1043,15 +1043,20 @@ extension NetworkManager : URLSessionDownloadDelegate {
10431043
if let delegate = QiscusCore.delegate {
10441044
if status == 403 && errorMessage.lowercased() == "Unauthorized".lowercased(){
10451045
delegate.onRefreshToken(event: QiscusRefreshTokenEvent.isUnauthorized)
1046-
}else if status == 401{
1047-
delegate.onRefreshToken(event: QiscusRefreshTokenEvent.isUnauthorized)
1046+
onError(QError(message:errorMessage))
1047+
}else if status == 401 && errorMessage.contains("refresh token invalid") == true{
1048+
onError(QError(message:"Please try again"))
10481049
}
1050+
}else{
1051+
onError(QError(message:errorMessage))
10491052
}
1053+
}else{
1054+
onError(QError(message:errorMessage))
10501055
}
10511056
} catch {
1052-
1057+
onError(QError(message:errorMessage))
10531058
}
1054-
onError(QError(message:errorMessage))
1059+
10551060
}
10561061
}
10571062
}

Source/QiscusCore/Network/NetworkMessage.swift

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,13 +178,25 @@ extension NetworkManager {
178178
}else{
179179
switch response.statusCode {
180180
case 400...599:
181-
if let comment = QiscusCore.database.comment.find(uniqueId: uniqueTempId){
182-
let failed = comment
183-
failed.status = .failed
184-
QiscusCore.database.comment.save([failed])
185-
completion(nil, "json: \(jsondata)")
181+
182+
if response.statusCode == 403 && errorMessage.lowercased() == "Unauthorized. Token is expired".lowercased() {
183+
if let comment = QiscusCore.database.comment.find(uniqueId: uniqueTempId){
184+
let failed = comment
185+
failed.status = .pending
186+
QiscusCore.database.comment.save([failed])
187+
completion(nil, "json: \(jsondata)")
188+
}else{
189+
completion(nil, "failed send message")
190+
}
186191
}else{
187-
completion(nil, "failed send message")
192+
if let comment = QiscusCore.database.comment.find(uniqueId: uniqueTempId){
193+
let failed = comment
194+
failed.status = .failed
195+
QiscusCore.database.comment.save([failed])
196+
completion(nil, "json: \(jsondata)")
197+
}else{
198+
completion(nil, "failed send message")
199+
}
188200
}
189201

190202
default:

Source/QiscusCore/QiscusCore.swift

Lines changed: 90 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Foundation
1010
import UIKit
1111

1212
public class QiscusCore: NSObject {
13-
public static let qiscusCoreVersionNumber:String = "1.14.5"
13+
public static let qiscusCoreVersionNumber:String = "1.14.6"
1414
class var bundle:Bundle{
1515
get{
1616
let podBundle = Bundle(for: QiscusCore.self)
@@ -1442,13 +1442,101 @@ public class QiscusCore: NSObject {
14421442
QiscusCore.realtime.unsubcribeCommentUpdateComemntNotification()
14431443
QiscusCore.network.refreshUserToken(userId: userID, refreshToken: refreshUserToken) { success in
14441444
QiscusCore.realtime.subcribeCommentUpdateComemntNotification()
1445-
onSuccess(success)
1445+
1446+
var id = ConfigManager.shared.syncId
1447+
let latestComment = ConfigManager.shared.lastCommentId
1448+
1449+
if latestComment != "" && id != "" {
1450+
if id.contains(latestComment) == true {
1451+
//id same
1452+
}else{
1453+
id = latestComment
1454+
}
1455+
}else{
1456+
if latestComment != ""{
1457+
if id.isEmpty {
1458+
id = latestComment
1459+
}else{
1460+
if id.contains(latestComment) == true {
1461+
//id same
1462+
}else{
1463+
id = latestComment
1464+
}
1465+
}
1466+
}
1467+
}
1468+
1469+
QiscusCore.shared.synchronize(lastMessageId: id, onSuccess: { (comments) in
1470+
self.syncEvent()
1471+
if let c = comments.first {
1472+
ConfigManager.shared.syncId = c.id
1473+
}
1474+
QiscusLogger.debugPrint("success sync after refresh token")
1475+
onSuccess(success)
1476+
}, onError: { (error) in
1477+
QiscusLogger.errorPrint("sync error, \(error.message)")
1478+
onSuccess(success)
1479+
})
1480+
1481+
14461482
} onError: { error in
14471483
onError(error)
14481484
}
14491485
}
14501486
}
14511487

1488+
private func syncEvent() {
1489+
if QiscusCore.isLogined && QiscusCore.enableSyncEvent == true{
1490+
//sync event
1491+
let id = ConfigManager.shared.syncEventId
1492+
QiscusCore.network.synchronizeEvent(lastEventId: id, onSuccess: { (events) in
1493+
if !events.isEmpty{
1494+
ConfigManager.shared.syncEventId = events.first!.id
1495+
}
1496+
1497+
events.forEach({ (event) in
1498+
DispatchQueue.global(qos: .background).sync {
1499+
if event.id == id { return }
1500+
1501+
switch event.actionTopic {
1502+
case .deletedMessage :
1503+
let ids = event.getDeletedMessageUniqId()
1504+
ids.forEach({ (id) in
1505+
if let comment = QiscusCore.database.comment.find(uniqueId: id) {
1506+
_ = QiscusCore.database.comment.delete(comment)
1507+
}
1508+
})
1509+
ConfigManager.shared.syncEventId = event.id
1510+
case .clearRoom:
1511+
let ids = event.getClearRoomUniqId()
1512+
ids.forEach({ (id) in
1513+
if let room = QiscusCore.database.room.find(uniqID: id) {
1514+
_ = QiscusCore.database.comment.clear(inRoom: room.id, timestamp: event.timestamp)
1515+
}
1516+
})
1517+
ConfigManager.shared.syncEventId = event.id
1518+
1519+
case .noActionTopic:
1520+
break
1521+
1522+
case .sent:
1523+
break
1524+
1525+
case .delivered:
1526+
event.updatetStatusMessage()
1527+
case .read:
1528+
event.updatetStatusMessage()
1529+
}
1530+
1531+
}
1532+
1533+
})
1534+
}) { (error) in
1535+
QiscusLogger.errorPrint("sync error, \(error.message)")
1536+
}
1537+
}
1538+
}
1539+
14521540
public func logout(onSuccess: @escaping (Bool) -> Void, onError: @escaping (QError) -> Void ){
14531541

14541542
let token = QiscusCore.getUserData()?.token ?? ""

0 commit comments

Comments
 (0)