Runkeeper登录

Ish*_*ika 7 ios swift

我在我的应用程序中使用runkeeper将其连接到并从中获取数据.点击一个按钮,它会将我引导到我在runkeeper的web应用程序上登录的浏览器,在获取访问令牌和user_Id后点击服务并返回到我的应用程序.现在再次,如果我点击我的应用程序中的按钮获取连接,它会直接要求我重定向回我的应用程序,但我想要的是每次我点击连接时,它应该要求登录.我知道我必须清除缓存和cookie,但不知道如何.

@IBAction func btnRunKeeperClicked(sender: AnyObject) {
   MSYRunKeeper.shareInstance.loginWithRunKeeper { (result, success) in
    print(result)
    if success{
        print(result)
        let accessToken = result["accessToken"] as? String ?? ""
        self.hitServiceToGetDataFromRunkeeper(accessToken)
    }else{
        print("error...")
    }

    }
 }
Run Code Online (Sandbox Code Playgroud)

func hitServiceToGetDataFromRunkeeper(accessToken:String){

    showActivityIndicator(true, inViewConroller: self, animated: true)
    let dict = HelperClass.userDefaultForAny("User_Detail")
    var userID = ""
    var serviceKey = ""
    if(dict != nil){
        userID = (dict!["userID"] as? String)!
        serviceKey = (dict!["service_key"] as? String)!
    }

    var paramDictionary = NSMutableDictionary()
    paramDictionary = ["method":"runkeeperLogin","service_key":serviceKey,"userID":userID,"runkeeperAccessToken":accessToken,"isRunkeeperConnect":"1"]

    print_debug(paramDictionary)

    FSServicesClass.sharedInstance.postWithParamater(paramDictionary, sBlock: { (result) in
        if(NSDictionary(dictionary: result).valueForKey("success")?.integerValue == 1){
            showActivityIndicator(false, inViewConroller: self, animated: true)

            self.btnRunKeeperConnected.setTitle("Connected", forState: .Normal)
            if self.btnFitBitConnected.titleLabel?.text == "Connected"{
                self.btnFitBitConnected.setTitle("Disconnected", forState: .Normal)
            }

            print(result)

            let dict = HelperClass.userDefaultForAny("User_Detail")
            HelperClass.removeFromUserDefaultForKey("User_Detail")

            let dict2 = updateUserDetailForConnetectdAppsAndDevices(dict!, isfitbitConnected: "0", isRunkeeperConnected: "1")

            HelperClass.saveToUserDefault(dict2, key: "User_Detail")
            popAlertMessageController(self, title: "Alert", message: NSDictionary(dictionary: result).valueForKey("errstr") as? String ?? "")

        }else{
            showActivityIndicator(false, inViewConroller: self, animated: true)
            popAlertMessageController(self, title: "Alert", message: NSDictionary(dictionary: result).valueForKey("errstr") as? String ?? "")

        }
        }, fBlock: {(ErrorResult) in
            showActivityIndicator(false, inViewConroller: self, animated: true)
            popAlertMessageController(self, title: "Please try again", message: NSDictionary(dictionary: ErrorResult).valueForKey("errstr")  as? String ?? "")
            //print(ErrorResult)
    })

}
Run Code Online (Sandbox Code Playgroud)

Sal*_*ani 0

您可以通过以下方式从runkeeper的UIWebView中删除cookie

let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
for cookie: NSHTTPCookie in storage.cookies! {
        storage.deleteCookie(cookie)
}
NSUserDefaults.standardUserDefaults().synchronize()
Run Code Online (Sandbox Code Playgroud)

或者

let cookieJar : NSHTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
    for cookie in cookieJar.cookies! as [NSHTTPCookie]{
        NSLog("cookie.domain = %@", cookie.domain)

        if cookie.domain == "www.Your runkeeper url.com" ||
            cookie.domain == "api.Your runkeeper api .com"{
            cookieJar.deleteCookie(cookie)
        }
    }
Run Code Online (Sandbox Code Playgroud)

还从用户默认值中删除 runkeeper 令牌。