Vì không có câu trả lời nào trong số các câu trả lời này thực sự giải quyết câu hỏi tôi sẽ chi tiết cách tôi đã triển khai làm mới mã thông báo OAuth bằng cách sử dụng SDK Facebook.
SDK sẽ tự động làm mới mã thông báo của bạn khi bạn đưa ra yêu cầu, trong trường hợp của chúng tôi, chúng tôi gửi mã thông báo đến máy chủ của chúng tôi và chúng tôi cần sử dụng mã thông báo mới nhất. Vì vậy, khi máy chủ của chúng tôi chỉ ra rằng chúng ta cần thẻ mới đây là những gì chúng tôi làm:
Note Bạn có thể vượt qua AppID vào FBSession
hoặc bạn có thể thêm phím FacebookAppID
để plist App của bạn (điều này là những gì chúng ta làm) .
- (void)renewFacebookCredentials {
if (FBSession.activeSession.state == FBSessionStateOpen ||
FBSession.activeSession.state == FBSessionStateOpenTokenExtended) {
[self sessionStateChanged:[FBSession activeSession] state:[FBSession activeSession].state error:nil];
} else {
// Open a session showing the user the login UI
// You must ALWAYS ask for public_profile permissions when opening a session
[FBSession openActiveSessionWithReadPermissions:@[@"public_profile",@"email"]
allowLoginUI:NO
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
//this block will run throughout the lifetime of the app.
[self sessionStateChanged:session state:state error:error];
}];
}
}
Các bạn có thể sử dụng sessionStateChanged:
phương pháp mà Facebook đưa vào tài liệu của họ nhưng một handler đơn giản trông như thế này:
- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error {
// If the session was opened successfully
NSString *accessToken;
if (!error && state == FBSessionStateOpen && [[session accessTokenData] accessToken]){
// Show the user the logged-in UI
//@see http://stackoverflow.com/questions/20623728/getting-username-and-profile-picture-from-facebook-ios-7
accessToken = [[session accessTokenData] accessToken];
//Now we have an access token, can send this to the server...
} else {
//No access token, show a dialog or something
}
//either call a delegate or a completion handler here with the accessToken
}
Hãy nhận biết rằng một số các cuộc gọi FBSession API kiểm tra các chủ đề mối quan hệ vì vậy tôi thấy rằng tôi phải bao gồm tất cả các cuộc gọi FBSession của mình bên trong một số dispatch_async(dispatch_get_main_queue(), ^{...
Nguồn
2014-11-19 08:33:19
Bạn có muốn tìm câu trả lời cho câu hỏi này không? –