iOS应用程序中的Facebook连接
在我的新iOS应用程序中,我必须登录Facebook并获取用户详细信息。我已经阅读了这里的教程,并研究了美味和其他样品。但我无法理解流程 我创建了一个用于Facebook登录的示例项目(代码如下)——但有以下主要问题:iOS应用程序中的Facebook连接,ios,facebook,facebook-sdk-3.0,Ios,Facebook,Facebook Sdk 3.0,在我的新iOS应用程序中,我必须登录Facebook并获取用户详细信息。我已经阅读了这里的教程,并研究了美味和其他样品。但我无法理解流程 我创建了一个用于Facebook登录的示例项目(代码如下)——但有以下主要问题: 当我再次点击登录按钮时,为什么应用程序会要求授权?在我在Facebook上点击一次“OK”之后 下面是我的代码- @实现AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchin
- 当我再次点击登录按钮时,为什么应用程序会要求授权?在我在Facebook上点击一次“OK”之后
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// See if the app has a valid token for the current state.
if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded)
{
// To-do, show logged in view --- LOGGED IN : Already Login
// Yes, so just open the session (this won't display any UX).
UIWindow *window = [UIApplication sharedApplication].keyWindow;
ViewController *rootViewController = (ViewController *)window.rootViewController;
[rootViewController openSession];
}
return YES;
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
return [FBSession.activeSession handleOpenURL:url];
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[FBSession.activeSession handleDidBecomeActive];
}
@implementation ViewController
@synthesize lblStatus;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
lblStatus.text = @"Login Now";
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)login:(id)sender
{
[self openSession];
}
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen:
{
// Connection is Open
lblStatus.text = @"FBSessionStateOpen";
}
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
{
[FBSession.activeSession closeAndClearTokenInformation];
// Connection is Closed / Login Failed
lblStatus.text = @"FBSessionStateClosed";
}
break;
default:
break;
}
}
- (void)openSession
{
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:YES
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error)
{
[self sessionStateChanged:session state:state error:error];
}];
}
答案-->
谢谢nerowolfe的建议
下面是我连接到Facebook的完整解决方案。我的下一个任务是现在获取用户数据
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
return [FBSession.activeSession handleOpenURL:url];
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[FBSession.activeSession handleDidBecomeActive];
}
--------------------------
@implementation ViewController
@synthesize lblStatus;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
lblStatus.text = @"Login Now";
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)login:(id)sender
{
[self openSession];
}
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen:
{
// Connection is Open
lblStatus.text = @"FBSessionStateOpen";
}
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
{
[FBSession.activeSession closeAndClearTokenInformation];
// Connection is Closed / Login Failed
lblStatus.text = @"FBSessionStateClosed";
}
break;
default:
break;
}
}
- (void)openSession
{
if(FBSession.activeSession.isOpen)
{
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:NO
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error)
{
[self sessionStateChanged:session state:state error:error];
}];
}
else
{
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:YES
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error)
{
[self sessionStateChanged:session state:state error:error];
}];
}
}
- (IBAction)logout:(id)sender
{
[FBSession.activeSession closeAndClearTokenInformation];
if(FBSession.activeSession.isOpen)
lblStatus.text = @"Open Still";
else
lblStatus.text = @"Close";
}
只是没有显示登录
- (void)openSession
{
if(FBSession.activeSession.isOpen)
{
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:NO
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error)
{
[self sessionStateChanged:session state:state error:error];
}];
}
}
只是没有显示登录
- (void)openSession
{
if(FBSession.activeSession.isOpen)
{
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:NO
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error)
{
[self sessionStateChanged:session state:state error:error];
}];
}
}
是的,这很有帮助。现在,当会话打开时,我不再看到登录屏幕/授权屏幕。另一件事是-如果我想使用其他用户登录-如何注销或终止当前会话-在您发布的代码上有两件事-1。FBSession.activeSession.isOpen:这意味着我们正在检查会话是否处于活动状态,然后只进入内部。我们是否应该检查“会话是否未激活”?2.“allowLoginUI:是”和“allowLoginUI:否”-这有什么影响?当然,正如你所希望的。我只是给你指路。。。顺便说一句,当然,对于使用facebook sdk方法,您需要在FBRequest*postLocRequest=[FBRequest RequestForPlacesArchatCoordination:currentLocation radiusInMeters:1000结果限制:1搜索文本:self.location.name];postLocRequest.session=FBSession.activeSession;是的,这很有帮助。现在,当会话打开时,我不再看到登录屏幕/授权屏幕。另一件事是-如果我想使用其他用户登录-如何注销或终止当前会话-在您发布的代码上有两件事-1。FBSession.activeSession.isOpen:这意味着我们正在检查会话是否处于活动状态,然后只进入内部。我们是否应该检查“会话是否未激活”?2.“allowLoginUI:是”和“allowLoginUI:否”-这有什么影响?当然,正如你所希望的。我只是给你指路。。。顺便说一句,当然,对于使用facebook sdk方法,您需要在FBRequest*postLocRequest=[FBRequest RequestForPlacesArchatCoordination:currentLocation radiusInMeters:1000结果限制:1搜索文本:self.location.name];postLocRequest.session=FBSession.activeSession;