2013-06-27 20 views
6

Tôi đang làm việc trên Ứng dụng iOS sử dụng Parse và Facebook.Phân tích cú pháp bằng Facebook Đăng nhập: Máy chủ từ chối yêu cầu gia hạn có mã lỗi: 190

Đối với tên đăng nhập Facebook, tôi đang làm theo các hướng dẫn trên trang này: https://www.parse.com/tutorials/integrating-facebook-in-ios

Sau khi hướng dẫn, tôi có mã này mà xác nhận phiên cache:

// check if this cached session is still valid? 
// does nothing if still valid 
- (void) validateCachedSession 
{ 
    FBRequest *request = [FBRequest requestForMe]; 
    [request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
     if (!error) 
     { 
      // handle successful response 
      LogObvious(@"Facebook session validated. No problem"); 
     } 
     else if ([error.userInfo[FBErrorParsedJSONResponseKey][@"body"][@"error"][@"type"] isEqualToString:@"OAuthException"]) 
     { // Since the request failed, we can check if it was due to an invalid session 
      LogObvious(@"The facebook session was invalidated. Announce logged Out"); 

      // The persisted session is invalid. Logout! 
      [self logout]; 
     } 
     else 
     { 
      LogObvious(@"The facebook session was invalidated. Announce logged Out"); 

      // The persisted session is invalid. Logout! 
      [self logout]; 
     } 
    }]; 
} 

Như đã trình bày ở trên, nếu phiên được lưu trong bộ nhớ cache không hợp lệ, nó phải gọi là đăng xuất:

- (void) logout 
{ 
    [PFUser logOut]; 
    // Over here we will show the login button again. 
} 

Để kiểm tra điều này. Lần đầu tiên tôi đăng nhập vào ứng dụng của mình bằng tài khoản Facebook. Sau đó, tôi đã thay đổi mật khẩu và truy cập lại ứng dụng.

Ứng dụng nhận dạng chính xác phiên không hợp lệ và đăng xuất được gọi.

Nhưng khi tôi bấm đăng nhập một lần nữa, chức năng đăng nhập được trở về lỗi này:

Uh oh. An error occurred: Error Domain=com.facebook.sdk Code=5 "The operation couldn’t be completed. (com.facebook.sdk error 5.)" UserInfo=0x1e066140 {com.facebook.sdk:ErrorInnerErrorKey=Error Domain=com.apple.accounts Code=1 "Server refused renewal request with error code: 190" UserInfo=0x1d56df10 {NSLocalizedDescription=Server refused renewal request with error code: 190}, com.facebook.sdk:ParsedJSONResponseKey={ 
    body =  { 
     error =   { 
      code = 190; 
      "error_subcode" = 65001; 
     }; 
    }; 
}} 

TẠI SAO? Ngay cả khi tôi chấm dứt ứng dụng và khởi động lại ứng dụng. Ứng dụng hiện sẽ bị kẹt ở trạng thái này - không thể đăng nhập được. Bất kỳ trợ giúp sẽ được đánh giá cao.

p/s: Để được rõ ràng, đây là chức năng của tôi đăng nhập:

// to be called when user explicitly clicked a login button 
- (void) loginByFacebookWithPermissions:(NSArray*)permissionsArray 
{ 
    LogFunctionCalledObvious(); 
    [PFFacebookUtils logInWithPermissions:permissionsArray block:^(PFUser *user, NSError *error) 
    { 
     if (!user) 
     { 
      if (!error) 
      { 
       NSLog(@"Uh oh. The user cancelled the Facebook login."); 
      } else 
      { 
       NSLog(@"Uh oh. An error occurred: %@", error); 
       [self logout]; 
      } 
     } else if (user.isNew) 
     { 
      LogObvious(@"User with facebook signed up and logged in!"); 
      [self requestLoggedInUserInfo]; 
     } else 
     { 
      LogObvious(@"User with facebook logged in!"); 
      [self requestLoggedInUserInfo]; 
     } 
    }]; 
} 

p/s2: OK, sau khi nghiên cứu kỹ hơn, vì vậy nó bị mắc kẹt trong trạng thái này cho đến khi tôi đi đến Settings-> Facebook để nhập lại mật khẩu mới. Đây có phải là hành vi đúng không? sao iOS6 không kịp nhắc nhở người dùng thay đổi mật khẩu khi tôi thay đổi mật khẩu Facebook từ Facebook.com?

+0

Tôi gặp sự cố tương tự, bạn có giải quyết được vấn đề này không? Cảm ơn – Kreutzer

+0

Bằng cách nào đó ứng dụng Facebook nhận được thông tin này trong ngữ cảnh của ứng dụng. Nó yêu cầu người dùng nhập mật khẩu một lần nữa ... bạn có thể có thể snoop những gì họ đang gọi với Charles hoặc một số gói sniffing cho các cuộc gọi lại auth, tôi rất tò mò .... Các thay thế là kinda không có thật như nhiều người dùng có không biết phải làm gì với thông điệp đó. – Kevin

Trả lời

1

lỗi của bạn đang phụ điểm này

static const int FBSDKSystemPasswordErrorSubcode = 65001; 

case FBSDKSystemPasswordErrorSubcode: 
      case FBAuthSubcodePasswordChanged: 
       if (subcode == FBSDKSystemPasswordErrorSubcode 
        || [FBErrorUtility fberrorIsErrorFromSystemSession:error]) { 
        userMessageKey = @"FBE:PasswordChangedDevice"; 
        userMessageDefault = @"Your Facebook password has changed. To confirm your password, open Settings > Facebook and tap your name."; 
        shouldNotifyUser = YES; 
       } else { 
        userMessageKey = @"FBE:PasswordChanged"; 
        userMessageDefault = @"Your Facebook password has changed. Please log into this app again to reconnect your Facebook account."; 
       } 
       break; 

Bạn sẽ phải nhắn người sử dụng bằng cách nào đó để làm điều này

mật khẩu Facebook của bạn đã thay đổi. Để xác nhận mật khẩu của bạn, hãy mở Cài đặt> Facebook và nhấn vào tên của bạn.

hoặc

Mật khẩu Facebook của bạn đã thay đổi. Vui lòng đăng nhập lại vào ứng dụng này để kết nối lại tài khoản Facebook của bạn.

+3

Gần đây tôi đã phát hiện ra rằng NSString * message = [FBErrorUtility userMessageForError: error] sẽ ngay lập tức cung cấp cho chúng tôi một chuỗi mô tả lỗi. – mkto

+0

Rất hữu ích @mkto – Leverin

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