gpt4 book ai didi

ios - 在 Deezer iOS SDK 中恢复 session

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:36 25 4
gpt4 key购买 nike

我正在使用 Deezer iOS SDK ,到目前为止,在 Swift 中,除了 session 之外,一切都进行得很顺利,在 Android SDK 中,存在一个方法 .restoreSession() 以避免每次弹出用户登录,但我在 iOS SDK 中看不到它,所以每次 session 过期时,用户都会弹出窗口以使用 hi 的 Deezer 帐户再次登录,无论如何要在 iOS SDK 中保存或恢复 session ?

这是 Android 恢复 session 代码:

// restore any saved session
SessionStore sessionStore = new SessionStore();
if (sessionStore.restore(deezerConnect, context)) {
// The restored session is valid, navigate to the Home Activity
Intent intent = new Intent(context, HomeActivity.class);
startActivity(intent);
}

是否也可以在 iOS SDK 中执行此操作?

因为当用户使用 Deezer SDK 登录时,我没有收到委托(delegate)的通知

class DeezerSession : NSObject, DeezerSessionDelegate
{


var DZRReqManager:DZRRequestManager = DZRRequestManager()
var deezerConnect:DeezerConnect!

let defaults = UserDefaults.standard
var callbackLogin : (()->())? = nil

//SHARED INSTANCE
static var instance: DeezerSession!
class func sharedInstance() -> DeezerSession {
if self.instance == nil
{
self.instance = DeezerSession();
}
return self.instance
}

override init()
{
super.init()
self.deezerConnect = DeezerConnect(appId: "***" , andDelegate: self )
self.DZRReqManager.dzrConnect = self.deezerConnect
self.deezerConnect.sessionDelegate = self

self.retrieveTokenAndExpirationDate()
}

// See http://www.deezer.com/fr/developers/simpleapi/permissions
// for a description of the permissions
func connectToDeezerWithPermissions()
{
print("[DeezerSession] connectToDeezerWithPermissions.")

//Check if Session still valid update it
self.deezerConnect.authorize([DeezerConnectPermissionBasicAccess,
DeezerConnectPermissionManageLibrary,
DeezerConnectPermissionOfflineAccess
])
}

func saveToken(token:String,expirationDate:Date,userId:String)
{
print("[DeezerSession] Token. \(token) : Saved ")
print("[DeezerSession] Expire Date after. \(expirationDate) : Saved ")
print("[DeezerSession] User ID . \(userId) : Saved ")

defaults.setValue(token, forKey: "DEEZER_TOKEN_KEY")
defaults.setValue(expirationDate, forKey: "DEEZER_EXPIRATION_DATE_KEY")
defaults.setValue(userId, forKey: "DEEZER_USER_ID_KEY")
}

func deezerSessionDidConnect()
{


}

func retrieveTokenAndExpirationDate()
{
self.deezerConnect.accessToken = defaults.string(forKey: "DEEZER_TOKEN_KEY")
self.deezerConnect.expirationDate = defaults.object(forKey: "DEEZER_EXPIRATION_DATE_KEY") as? Date ?? Date()
self.deezerConnect.userId = defaults.string(forKey: "DEEZER_USER_ID_KEY")

print("[DeezerSession] Token. \(self.deezerConnect.accessToken) : Restored ")
print("[DeezerSession] Expire Date. \(self.deezerConnect.expirationDate) : Restored ")
print("[DeezerSession] User ID . \(self.deezerConnect.userId) : Restored ")
}

func isSessionValid()-> Bool
{
print("[DeezerSession] isSessionValid . \(self.deezerConnect.isSessionValid()) ")
return self.deezerConnect.isSessionValid()
}


func deezerDidLogin()
{
print("[DeezerSession] deezerDidLogin.")
self.saveToken(token : self.deezerConnect.accessToken,
expirationDate : self.deezerConnect.expirationDate ,
userId : self.deezerConnect.userId)

if self.callbackLogin != nil
{
self.callbackLogin!()
}
}

func deezerDidNotLogin()-> Bool
{
print("[DeezerSession] deezerDidNotLogin.")
return true
}

func deezerDidLogout()
{
print("[DeezerSession] deezerDidLogout.")
}

}

所有代表都没有触发 deezerDidLogout deezerDidNotLogin deezerDidLogin

最佳答案

SDK 提供DeezerSessionDelegate。根据文档,当用户成功登录时调用 deezerDidLogin

因此,您可以从 DeezerConnect 实例中检索 token 、到期日期和用户标识符。您可以将它们保存到钥匙串(keychain)中。

下次用户启动应用程序时,您可以在 DeezerConnect 实例上重新设置这些值(从钥匙串(keychain)中检索它们)并通过发送 -[DeezerConnect isSessionValid ] 消息到同一个对象。如果 session 仍然有效,则不要要求用户再次登录。

显然,Keychain 是用于存储 token 和到期日期的建议位置。

更多信息:iOS Session Management

更新

您能否修改创建单例实例的方式?

代替这段代码

//SHARED INSTANCE
static var instance: DeezerSession!
class func sharedInstance() -> DeezerSession {
if self.instance == nil
{
self.instance = DeezerSession();
}
return self.instance
}

就用

static let shared = DeezerSession()

事实上,这是在 Swift 中使用单例的推荐方式。

我认为您也不需要 init 方法中的 override

关于ios - 在 Deezer iOS SDK 中恢复 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46089319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com