在iOS 8中使用logInWithReadPermissions登录时效果很好,但是在更新到iOS 9后不久它就会打开Safari或模态UIWebView。
有没有人有同样的问题?
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login setLoginBehavior:FBSDKLoginBehaviorNative];
[login logInWithReadPermissions:@[@"public_profile",@"email"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
NSLog(@"");
}];
您想要更改默认登录行为,如下所示
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logOut];
login.loginBehavior = FBSDKLoginBehaviorSystemAccount;
[login logInWithReadPermissions:@[@"public_profile", @"email", @"gender",@"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
if (error)
{
// Process error
}
else if (result.isCancelled)
{
// Handle cancellations
}
else
{
// Now that we are authorized to view public profile and email, request that data get data from 'me'
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields" : @"first_name, last_name,email,name,gender,birthday"}] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
{
}];
}
}];
如果用户没有在“设置”应用下填写他们的Facebook用户名和密码,则会弹出safari。
解! iOS 9.2.1 Facebook SDK 4.10.0
更改:
NSOperatingSystemVersion iOS9Version = { .majorVersion = 9, .minorVersion = 0, .patchVersion = 0 };
BOOL useNativeFlow = ![FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS9Version];
至:
BOOL useNativeFlow = YES;
更改:
BOOL useNativeDialog = [serverConfiguration useNativeDialogForDialogName:FBSDKDialogConfigurationNameLogin];
至:
BOOL useNativeDialog = YES;
如果要使用其他功能,请进行相同的更改。例如:App Invite。
现在,应用程序使用原生Facebook应用程序登录。
这个解决方案适合我。希望能帮助到你。
附:升级FB SDK后别忘了进行更改。
从现在开始您可以将loginBehavior更改为FBSDKLoginBehaviorSystemAccount,以便FBSDKLoginManager从iOS Facebook设置获取Facebook登录用户;)
FBSDKLoginManager *fbLogin = [[FBSDKLoginManager alloc] init];
fbLogin.loginBehavior = FBSDKLoginBehaviorSystemAccount;
来自FBSDKLoginManager:
声明:FBSDKLoginBehaviorSystemAccount 描述:如果该应用程序无法使用该帐户(未由用户配置或由SDK确定),则此行为将回退到FBSDKLoginBehaviorNative。 注意:如果该应用程序无法使用该帐户(未由用户配置或由SDK确定),则此行为将回退到FBSDKLoginBehaviorNative。
使用20150708在iOS 9中为我解决了它。
链接到SDK:https://developers.facebook.com/resources/FacebookSDKs-iOS-20150708.pkg
如果要在iOS 9上使用最新的SDK以及本机登录行为
编辑FBSDKServerConfiguration.m
的函数以始终返回true
- (BOOL)useNativeDialogForDialogName:(NSString *)dialogName
{
return @YES;
}
如果没有安装Facebook应用程序,回归Safari仍然有效
我注意到在两个更改日志中:
Facebook SDK for iOS Changelog v4.x
(v4.6.0 - 2015年9月10日)此外,SDK对话框(如Login,Like,Share Dialogs)会根据设备自动确定最佳UI,包括SFSafariViewController而不是Safari。按照我们的准备iOS 9指南。
Facebook SDK for iOS Changelog v3.x
(v3.24.0 - 2015年9月10日)此外,SDK对话框(如Login,Like,Share Dialogs)会根据设备自动确定最佳UI,包括SFSafariViewController而不是Safari。按照我们的准备iOS 9指南。
我按照这里的文件:https://developers.facebook.com/docs/ios/ios9
添加第2点和第3点后,我的应用程序切换到原生的Facebook应用程序登录...
如果你想要一个模态打开并从Safari或Facebook应用程序中单独询问facebook凭据,只需使用最新的facebook sdk并设置登录行为
FBSDKLoginManager *fbLogin = [[FBSDKLoginManager alloc] init];
[login setLoginBehavior:FBSDKLoginBehaviorWeb];
这将使注销过程更方便,减少用户的混淆。
将此版本与CocoaPods一起使用:
pod 'FBSDKCoreKit', '4.4.0'
pod 'FBSDKLoginKit', '4.4.0'
pod 'FBSDKShareKit', '4.4.0'
在swift中当您选择登录行为是Web时,然后打开webView popUp。没有登录重定向到safari浏览器
// Try to login with permissions
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web