2016-11-24 16 views
6

Tôi đang sử dụng trình quản lý trong ứng dụng của mình để kết nối nó với và tìm nạp dữ liệu từ cùng một. Khi bấm vào một nút, nó hướng tôi đến trình duyệt nơi tôi đăng nhập vào ứng dụng web của runkeeper, nhấn dịch vụ sau khi tìm nạp mã thông báo truy cập và user_Id và quay trở lại ứng dụng của tôi. Bây giờ một lần nữa nếu tôi bấm vào nút trong ứng dụng của tôi để có được conected, nó trực tiếp yêu cầu tôi chuyển hướng trở lại ứng dụng của tôi, nhưng những gì tôi muốn là mỗi khi tôi nhấp vào để kết nối, nó nên yêu cầu đăng nhập. Tôi biết rằng tôi phải xóa bộ nhớ cache và cookie nhưng không biết cách thực hiện.Người quản lý Đăng nhập

@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: 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

Bạn có thể chia sẻ api của người quản lý mà bạn đang sử dụng không? –

+0

Bạn đang sử dụng OAuth 1.0 hoặc OAuth 2.0? – iDeveloper

+0

sử dụng OAuth 2.0 – Ishika

Trả lời

0

Bạn có thể xóa cookie từ UIWebView của RunKeeper bằng cách làm theo cách

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

HOẶC

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

cũng loại bỏ runkeepe r mã thông báo từ người dùng mặc định.

+0

Không hoạt động – Ishika

0

Ủy quyền cho người dùng Bạn bắt đầu bằng cách cố gắng kết nối với RunKeeper. Nếu người dùng trước đó ủy quyền cho ứng dụng và các thẻ truy cập, vẫn có sẵn, kết nối sẽ xảy ra ngay lập tức và không có bất kỳ sự can thiệp:

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

Nếu người dùng đã không được cấp phép HOẶC thẻ truy cập đã bị mất/xóa, phương thức ủy quyền của bạn needsAuthentication sẽ được gọi. Trong phương pháp này, bạn có thể yêu cầu ủy quyền qua OAuth.

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

Vì mục đích đăng nhập, nó sẽ lưu trữ mã thông báo và thẻ tín dụng để bạn cần phải xóa thủ công tiền tố keychain. Để làm điều đó kiểm tra dưới đây:

Loại bỏ Accounts

Để xóa một tài khoản và thẻ của nó từ các cửa hàng:

[[NXOAuth2AccountStore sharedStore] removeAccount:account]; 

Lưu ý rằng nếu bạn sử dụng một UIWebView để yêu cầu quyền truy cập vào một dịch vụ như đã nêu trên , nó có khả năng rằng các mã thông báo đã được lưu trữ trong [NSHTTPCookieStorage sharedHTTPCookieStorage]

Bạn có thể loại bỏ các dấu hiệu auth từ bộ nhớ cache cookie sẽ sử dụng:

for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { 
    if([[cookie domain] isEqualToString:@"myapp.com"]) { 
     [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; 
    } 
} 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Nơi myapp.com là tên miền mà bạn đã nhận được mã thông báo xác thực - likley URL được chỉ định cho cửa hàng tại thời điểm yêu cầu. Để thuận tiện, bạn có thể lưu trữ tên miền của mã thông báo trong tài khoản.userData để nó có sẵn nếu bạn cần xóa cookie.

Các vấn đề liên quan