Получите пустую страницу при входе в систему, обменивайтесь ею и т. Д. С помощью SDK Facebook на iOS 10 с SDK Facebook 4.15.1
Я получаю эту ошибку при использовании FBSDKLoginKit, FBSDKShareKit, чтобы войти в систему, поделиться ссылкой и как ссылка в моем приложении. Я использовал FBSDKLoginButton для входа
@property (nonatomic, strong) IBOutlet FBSDKLoginButton *loginButton;
- (void)viewDidLoad {
[super viewDidLoad];
self.loginButton.publishPermissions = @[@"publish_actions"];
}
Используя FBSDKShareKit, чтобы поделиться:
- (FBSDKShareDialog *)getShareDialogWithContentURL:(FBSDKShareLinkContent *)content
{
FBSDKShareDialog *shareDialog = [[FBSDKShareDialog alloc] init];
shareDialog.shareContent = content;
return shareDialog;
}
- (IBAction)ShareAppOnFB:(UIButton *)sender {
FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
FBSDKShareDialog *facebookShareDialog = [self getShareDialogWithContentURL:content];
if ([facebookShareDialog canShow]) {
[FBSDKShareDialog showFromViewController:self.parentViewController
withContent:content
delegate:self];
}
}
Использование FBSDKShareKit для лайка:
FBSDKLikeButton *like = [[FBSDKLikeButton alloc] init];
like.objectID = @"";
like.frame = CGRectOffset(like.frame, 50, 100);
[self.view addSubview:like];
Все отлично работает на iOS 9 и iOS 8, но когда я обновляюсь до Xcode 8 и запускаюсь на iOS 10, я сразу получаю пустую страницу, когда нажимаю кнопку "Вход", "Поделиться" и "Нравится", и после этого ничего не происходит. Я попытался обновить до SDK Facebook 4.15.1, но ничего лучше, эта ошибка все еще происходит. Кто-нибудь знает, как исправить эту ошибку на iOS 10?
1 ответ
FB SDK использует SFSafariViewController, и, по-видимому, в iOS 10 он может быть представлен только из корневых контроллеров представления. Решение состоит в том, чтобы создать новый экземпляр UIWindow, добавить простой UIViewController в качестве корневого контроллера представления и вызвать FB SDK с этим новым UIViewController:
UIViewController* socialVC = [[UIViewController alloc] init];
// window instance needs to be retained
self.socialWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.socialWindow.rootViewController = socialVC;
// show new window in top of every other UIs
self.socialWindow.windowLevel = UIWindowLevelStatusBar + 10;
[self.socialWindow makeKeyAndVisible];
// show FB Share Dialog
[FBSDKShareDialog showFromViewController:socialVC withContent:content delegate:self];
Не забудьте скрыть окно, когда вызывается делегат FB SDK:
self.socialWindow.hidden = YES;