Facebook在app中授权对话框而不是在safari中

时间:2013-01-17 09:12:56

标签: iphone ios objective-c facebook facebook-ios-sdk

我希望用户在我的应用程序中使用他的facebook登录,但我不希望应用程序进入Safari然后返回应用程序。

我发现有些人通过在facebook.m

中调用此方法[self authorizeWithFBAppAuth:NO safariAuth:NO];来回答这个问题

我的问题是我没有facebook.m文件而我没有实现此功能。

我正在使用最新的facebook SDK 3.1我该如何解决?

感谢

2 个答案:

答案 0 :(得分:1)

以下是我在对话框中打开登录的操作。但它有两个缺点,因为如果用户在设置中有帐户,那么登录将不会要求他访问他的帐户。此方法将始终使用WebView(登录对话框)登录。

FBSession *session = [[FBSession alloc] initWithAppID:@"283938491920393" // here use your app id
                                          permissions:@[@"read_stream"] // you can change this parameter
                                      defaultAudience:FBSessionDefaultAudienceFriends 
                                      urlSchemeSuffix:@"fb"
                                   tokenCacheStrategy:nil];
        // Set the active session
[FBSession setActiveSession:session];

    // Open the session
[session openWithBehavior:FBSessionLoginBehaviorForcingWebView
                completionHandler:^(FBSession *session,
                                    FBSessionState status,
                                    NSError *error) {
                    // Respond to session state changes,
                    // ex: updating the view
                    if(!error && session.isOpen)
                    {
                        // user has logged in
                    }
                    else
                    {
                        if(error)
                        {
                           // error
                        }
                        else
                        {
                            // handle the session state change
                            [self session:session
                          hasChangedState:status
                                withError:error];
                        }
                    }
                }];

答案 1 :(得分:0)

你看过这个方法吗?

- (void)openWithBehavior:(FBSessionLoginBehavior)behavior
   completionHandler:(FBSessionStateHandler)handler;

这些是可用的行为:

typedef enum {
/*! Attempt Facebook Login, ask user for credentials if necessary */
FBSessionLoginBehaviorWithFallbackToWebView      = 0,
/*! Attempt Facebook Login, no direct request for credentials will be made */
FBSessionLoginBehaviorWithNoFallbackToWebView    = 1,
/*! Only attempt WebView Login; ask user for credentials */
FBSessionLoginBehaviorForcingWebView             = 2,
/*! Attempt Facebook Login, prefering system account and falling back to fast app switch         if necessary */
FBSessionLoginBehaviorUseSystemAccountIfPresent  = 3,
} FBSessionLoginBehavior;

您还可以在API之外管理整个网络/身份验证,然后在经过身份验证后设置活动会话令牌。