我正在使用Xcode 4.3.1
在我的应用程序中,我尝试使用Facebook SSO。我的要求是应用程序第一次要求授权,之后应该检查应用程序是否经过用户授权并应转移到下一个进程(即使之后)设备中的任务被取消了。我没有那个授权窗口一次又一次地重复。
在Appdelegate中:
facebook=[[Facebook alloc]initWithAppId:appid andDelegate:first];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"%@Defaults:",[defaults objectForKey:@"FBAccessTokenKey"]);
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"])
{
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
accessToken=facebook.accessToken;
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
date=facebook.expirationDate;
}
In my view Controller:
-(IBAction)LoginClick:(id)sender
{
NSUserDefaults *defaults1 = [NSUserDefaults standardUserDefaults];
[defaults1 setObject:xapp.facebook.accessToken forKey:@"FBAccessTokenKey"];
[defaults1 setObject:xapp.facebook.expirationDate forKey:@"FBExpirationDateKey"];
[defaults1 synchronize];
if (![xapp.facebook isSessionValid])
{
permissions = [[NSArray alloc] initWithObjects:@"read_stream",@"publish_stream", nil];
[xapp.facebook authorize:permissions];
}
else if([xapp.facebook isSessionValid])
{
NSLog(@"Hiii");
permissions=nil;
[xapp.facebook authorize: nil];
}
}
如何在授权应用程序后使授权窗口不显示...
答案 0 :(得分:1)
好的,每次在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方法。 希望这对你有所帮助。干杯!