如何解决服务器返回JWT死时的平滑会话恢复
我已经将Smooch / Sunshine Conversations SDK集成到了我们的应用中。
在大多数情况下,它可以工作。但是在失败的情况下,我有一个问题:
- 用户已登录(同时使用我们的服务和smooch)
- 我们的服务器端死于任何原因,这意味着暂时无法获取JWT
- 对话视图显示“无法连接到服务器”(按预期方式)
- 我们的服务器端已恢复...根据请求返回了有效的JWT
- 用户尝试在应用程序中触发对话,并且他们继续无限期地看到“无法连接到服务器”(即使在从对话活动移回并回到对话活动之后)。
- Smooch SDK永远无法从中恢复。解决该问题的唯一方法是杀死并重新启动该应用程序。
我使用的是最新的SDK版本7.0.3,还有香草ConversationActivity
(我没有将其子类化)。
我尝试了以下操作:
- 在进入ConversationActivity之前立即重新初始化Smooch
- 在进入ConversationActivity之前立即致电登录
有什么想法吗?
代码:
// This is in the Application class,as recommended
fun initialiseSmooch(application: Application) {
GlobalScope.launch {
Log.i(TAG,"Initialising Smooch")
val settings = Settings("INTEGRATION_ID")
settings.authenticationDelegate = getAuthenticationDelegate()
Smooch.init(application,settings,getinitialisationCallback())
}
}
private fun getinitialisationCallback(): (SmoochCallback.Response<InitializationStatus>) -> Unit {
return { response ->
if (response.data === InitializationStatus.SUCCESS) {
Log.i(TAG,"Smooch initialised successfully")
} else {
Log.e(TAG,"Smooch initialization Failed: ${response.error}")
}
}
}
/**
* This basically tells the Smooch SDK what to do if the JWT is rejected. Basically it goes
* and fetches a new token from our API.
*/
private fun getAuthenticationDelegate(): AuthenticationDelegate {
return AuthenticationDelegate(function = { authenticationError,authenticationCallback ->
if (authenticationError != null && authenticationError.data != null) {
Log.w(TAG,authenticationError.data)
}
if(AppResources.repository.getUserId() == null){
Log.i(TAG,"Authentication error. User isn't logged in,so shouldn't be logged in to Smooch either.")
logoutSmoochUser()
} else {
Log.i(TAG,"Authentication error. Getting new Smooch token.")
getSmoochToken { token -> authenticationCallback.updatetoken(token) }
}
})
}
private fun getSmoochToken(callback: (String) -> Unit) {
// Fetches token from API. If successful,callback is called
// If unsuccessful,callback isn't called. This won't hang forever,it has a timeout.
}
// And to start the conversation
private fun proceedToConversation() {
ConversationActivity.builder().show(this)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。