Получите пустую страницу при входе в систему, обменивайтесь ею и т. Д. С помощью 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;
Другие вопросы по тегам