2016-11-24 7 views
6

私はアプリケーションにrunkeeperを使用して、そのアプリケーションにrunkeeperを接続し、そこからデータを取得しています。ボタンをクリックすると、私はrunkeeperのWebアプリケーションにログインしているブラウザにアクセスし、アクセストークンとuser_Idを取得してサービスにアクセスし、私のアプリケーションに戻ります。もう一度、アプリケーションのボタンをクリックして接続すると、アプリケーションにリダイレクトするように要求されますが、クリックするたびにクリックしてログインする必要があります。私はキャッシュとクッキーをクリアする必要があることを知っていますが、方法はわかりません。Runkeeper Login

@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...") 
    } 

    } 
} 

FUNCのhitServiceToGetDataFromRunkeeper(accessToken:文字列){

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) 
    }) 

} 
+0

あなたが使っているrunkeeper apiを共有できますか? –

+0

OAuth 1.0またはOAuth 2.0を使用していますか? – iDeveloper

+0

OAuth 2.0を使用 – Ishika

答えて

0

また、削除の方法

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

OR

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) 
     } 
    } 

に従うことによってrunkeeperののUIWebViewからクッキーを削除することができますランキーペユーザーのデフォルトからのトークン。

+0

その作業していません – Ishika

0

ユーザーの承認 まず、RunKeeperに接続しようとします。ユーザーは以前のアプリとアクセストークンを認可した場合、まだ使用可能である、接続がすぐに起こると任意の介入なしになります。

[[AppData sharedAppData].runKeeper tryToConnect:self]; 

ユーザーが許可を付与していないか、アクセストークンが失われた/削除された場合には、代理メソッドのneedsAuthenticationが呼び出されます。この方法では、OAuthを介して承認を要求することができます。ログインに成功すると、一度ような目的でのログインのために、それはOAuthのを使用しています

- (void)needsAuthentication { 
    [[AppData sharedAppData].runKeeper tryToAuthorize]; 
    } 

手動キーチェーンprefrencesをクリアする必要があるので、それはトークンとcredsを格納します。アカウントとストアからそのトークンを削除するにはアカウント

を削除

:あなたがサービスへのアクセスを要求するためのUIWebViewを使用した場合、上述のように、その

[[NXOAuth2AccountStore sharedStore] removeAccount:account]; 

注意を以下のようチェックを行うため

012:、それはあなたが使用してクッキーキャッシュから認証トークンを削除することができ、トークンが [NSHTTPCookieStorage sharedHTTPCookieStorage]

にキャッシュされている可能性があります

ここで、myapp.comは認証トークンを受け取ったドメインです。要求時にストアに割り当てられたauthorizationURLのようです。便宜上、トークンのドメインをaccount.userDataに保存して、クッキーを削除する必要がある場合にすぐに利用できるようにすることができます。