iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Deezer iOS SDK中恢复会话大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 Deezer iOS SDK,在Swift到目前为止一切顺利,除了会话,在Android SDK中存在一个方法.restoreSession()以避免弹出用户每次登录,但我在iOS SDK中看不到它,所以每次会话过期,用户弹出窗口再次使用hi的Deezer帐户登录,无论如何在iOS SDK中保存或恢复会话?

这是Android恢复会话代码

// 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登录时,我没有收到代表的通知

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 @R_673_9531@e 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实例检索令牌,到期日期和用户标识符.您可以将它们保存到钥匙串中.

下次用户启动应用程序时,您可以在DeezerConnect实例上设置这些值(从Keychain中检索它们),并通过向同一对象发送 – [DeezerConnect isSessionValid]消息来测试其有效性.如果会话仍然有效,请不要让用户再次登录.

显然,钥匙串是建议的地方,以便存储令牌和到期日期.

欲了解更多信息: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中使用singleton的推荐方法.

我认为你也不需要init方法中的覆盖.

大佬总结

以上是大佬教程为你收集整理的在Deezer iOS SDK中恢复会话全部内容,希望文章能够帮你解决在Deezer iOS SDK中恢复会话所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。