2016-11-24 12 views
6

Uygulamamda onu alıp aynı veriyi almak için runkeeper kullanıyorum. Bir tuşa tıkladığınızda, beni web tarayıcısının web uygulamasında oturum açtığım tarayıcıya yönlendirir, erişim belirteci ve user_Id getirildikten sonra hizmeti vur ve uygulamanıza geri dön. Şimdi tekrar başvurmak için uygulamasındaki düğmeyi tıklarsam, doğrudan uygulamamı yeniden yönlendirmem istenir, ancak istediğim bağlantı için her tıkladığımda, giriş yapması istenir. Önbelleği ve çerezleri temizlemem gerektiğini biliyorum, ancak nasıl olduğunu bilmiyorum.Runkeeper Giriş

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

    } 
} 

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

} 
+0

Kullandığınız runkeeper api'yi paylaşabilir misiniz? –

+0

OAuth 1.0 veya OAuth 2.0 kullanıyor musunuz? – iDeveloper

+0

OAuth 2.0 – Ishika

cevap

0
Ayrıca kaldırmak yolu

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

VEYA

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

izleyerek RunKeeper ait UIWebView çerezleri silebilir

runkeepe kullanıcı varsayılanından r belirteci.

+0

Çalışmıyor – Ishika

0

Kullanıcıyı yetkilendirme Çalıştırmaya RunKeeper bağlanmaya başlar. kullanıcı daha önce uygulaması ve erişim simgesi yetkili ise hala kullanılabilir, bağlantı herhangi bir müdahale olmadan anında ve olur:

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

kullanıcı yetkilendirme izni vermemiştir VEYA erişim belirteci silinen/kayıp ise, Temsilci yönteminizin ihtiyacıAuthentication denir. Bu yöntemde, OAuth üzerinden yetkilendirme talebinde bulunabilirsiniz. Oturum açma işlemi başarılı bir kez böylece amaç giriş için bu OAuth'u kullanıyor

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

el anahtarlık prefrences temizlemeniz gerekiyor bu yüzden belirteci ve creds saklayacaktır. Aşağıda bu çeki yapıyor için: Bir hizmete erişimi istemek için bir UIWebView kullanılırsa, yukarıda açıklandığı gibi bu

[[NXOAuth2AccountStore sharedStore] removeAccount:account]; 

Not:

bir hesap ve mağazadan kendi belirteçleri kaldırmak için Hesaplar

Çıkarma

012: bunu kullanarak çerez önbellekten yetkilendirme jetonu kaldırabilir simge [NSHTTPCookieStorage sharedHTTPCookieStorage]

önbelleğe edilmiştir olasıdır

Burada myapp.com, auth jetonunu aldığınız etki alanıdır - likley, istekte bulunduğu sürece authorizationURL depoya atanır. Bir kolaylık olarak, çerezin alanını silmeniz gerekiyorsa, kodun alan adını account.userData'da saklamak isteyebilirsiniz.

İlgili konular