好的,每次在AppDelegate中运行应用程序时都要求权限。为了防止这种情况,您必须为权限创建一个单独的方法,只有在按下登录按钮并且是否允许应用程序时才会授予该方法。在你的AppDelegate中尝试这个:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self.window makeKeyAndVisible]; facebook = [[Facebook alloc] initWithAppId:@"YOURAPPID" andDelegate:self]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) { facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; } return YES; }
在AppDelegate中的fbDidLogIn方法之上添加此方法,您必须将FBUser协议添加到AppDelegate:
-(void)fbLogin:(id<FBUser>)_listener { listener = _listener; if(![facebook isSessionValid]) { NSArray* permissions = [[NSArray arrayWithObjects: @"publish_stream", @"read_stream", nil] retain]; [facebook authorize:permissions]; } else { [listener facebookDidLogin]; } }
在您的ViewController中修改您的登录方法,如下所示:
-(IBAction)LoginClick:(id)sender { YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; [appDelegate fbLogin:self]; }
FBUser.h是一个自定义头文件,用于定义协议方法 - (void)fbDidLogIn。这只是为了确保应用程序在每次启动时都不会要求登录权限。
#import <Foundation/Foundation.h> @protocol FBUser <NSObject> -(void)facebookDidLogin; @end
这样,只有在应用程序需要登录Facebook并执行某些操作时才会调用login方法。 希望这对你有所帮助。干杯!