Tôi đang sử dụng FBConnect sdk để xuất bản bài đăng lên tiểu sử của người dùng qua ứng dụng của tôi. Tôi đang gặp một số vấn đề với điều này:Các vấn đề về FBConnect SDK của Facebook trên iOS
Khi mã có liên quan chạy lần đầu tiên trên thiết bị, người dùng được chuyển hướng lại, theo ý muốn, đến ứng dụng/trang web facebook, yêu cầu anh cho phép nó. nếu người dùng cho phép nó, nó sẽ trả về ứng dụng, trình điều khiển xem "Kết nối với facebook" yêu cầu người dùng đăng nhập. Điều này thật kỳ lạ, vì người dùng đã đăng nhập, nếu không thì làm thế nào để cho phép ứng dụng ? nhưng tôi đoán điều này có thể ổn, vì anh ta chưa đăng nhập thông qua ứng dụng. sau khi anh ta đăng nhập, nó không làm gì cả. chỉ lần thứ hai mã được chạy, sau khi anh ta ủy quyền ứng dụng, người dùng nhận được hộp thoại đăng bài.
Nếu người dùng không ủy quyền ứng dụng, khi ứng dụng quay lại ứng dụng của tôi sau hộp thoại ủy quyền, ứng dụng sẽ yêu cầu người dùng đăng nhập (giống như người được ủy quyền) và không làm gì sau khi anh ấy đăng nhập. lần thứ hai mã được chạy, hộp thoại ủy quyền mở ra, với các tùy chọn "Ủy quyền" & "Thoát ứng dụng" thay vì "Ủy quyền" & "Không cho phép"/"Cho phép" & "Không cho phép". Ngoài ra, nếu người dùng đã xóa ủy quyền của anh ấy thông qua cài đặt tài khoản của anh ấy trên facebook, thay vì chỉ yêu cầu anh ấy ủy quyền lại, một hộp thoại facebook hiện ra (thay vì hộp thoại đăng bài/ủy quyền), nói: "An đã xảy ra lỗi. Vui lòng thử lại sau. " Thử sau không giúp được gì. nó sẽ bật lên, ngay cả khi bạn khởi động lại ứng dụng. cách duy nhất để làm cho nó biến mất là cài đặt lại ứng dụng, điều này sẽ khiến ứng dụng bật lại hộp thoại authoriziation.
Vì vậy, đây là những gì tôi muốn đạt được:
- Sau khi người dùng cho phép các ứng dụng, ông sẽ không phải đăng nhập lại.
- Sau khi người dùng ủy quyền ứng dụng, hộp thoại đăng sẽ bật lên một cách rõ ràng, mà không cần phải chạy lại mã (được kích hoạt, btw, bằng một nút).
- Nếu người dùng hủy cấp phép ứng dụng, người đó sẽ được nhắc lại bằng hộp thoại ủy quyền, thay vì hộp thoại báo lỗi
- Nếu anh từ chối ủy quyền, tôi sẽ gọi chức năng hiển thị lỗi/v.v.
Dưới đây là các mã có liên quan:
MyViewController.m
- (void)shareOnFacebook
{
Facebook *facebook = [[Facebook alloc] initWithAppId:myAppID];
[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] setFacebook:facebook];
[facebook release];
facebook = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] facebook];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
if (![facebook isSessionValid]) {
[facebook authorize:[NSArray arrayWithObjects:@"publish_stream", nil] delegate:(MyAppDelegate *)[[UIApplication sharedApplication] delegate]];
}
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
//Giving the dictionary some parameters for posting defaults
[facebook dialog:@"feed" andParams:dictionary andDelegate:self]; //Note: we have 2 different delegates! appDelegate for connections & url switching, and self for dialogs
}
MyAppDelegate.h
@interface MyAppDelegate : NSObject <UIApplicationDelegate, FBSessionDelegate, FBDialogDelegate>
{
Facebook *facebook; // kept for facebook sharing, accessed only from MyViewController although delegate methods are handeled in here
}
@property (nonatomic, retain) Facebook *facebook;
@end
MyAppDelegate.m
- (void)fbDidLogin
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [self.facebook handleOpenURL:url];
}
Có thể tôi thiếu một số chức năng ủy nhiệm trên MyViewController không? Bởi vì tôi thấy vì một lý do nào đó mà tôi đã đánh dấu nó là triển khai thực hiện giao thức FBDialogDelegate, mặc dù anh ta không thực hiện bất kỳ chức năng nào từ đó.
Tôi thực sự rất vui nếu các bạn có thể giúp tôi, vì điều này cực kỳ bực bội đối với tôi. Tôi không thể tìm thấy gì về điều này trên internet, và tôi cảm thấy như im đắm đuối ở đây.
Tnx trước!
Nó có lẽ không phải là câu trả lời cho câu hỏi của bạn, nhưng có vẻ như với tôi một vấn đề bạn có thể có là trường hợp Facebook được tái tạo trên mỗi phần. Từ tài liệu có vẻ như cá thể Facebook thường được thêm vào AppDelegate và không bao giờ được gán lại khi ứng dụng đang chạy. Có lẽ kiểm tra mã này tôi đã viết cho một dự án tôi đang làm việc trên, nó có thể được dễ dàng hơn để giải quyết vấn đề của bạn (nó không hoàn hảo được nêu ra, nhưng dường như làm việc tốt như xa như chia sẻ là có liên quan): http://stackoverflow.com/câu hỏi/7085162/facebook-connect-class-với-singleton-access-token-issue/7085809 # 7085809 –