FBSDKShareDialog из Facebook SDK не работает на iOS9?

С помощью Xcode7 я обновляю Facebook SDK до модуля FBSDKShareKit (4.6.0). И я добавил схему Facebook в белый список, как показано ниже. ссылка: https://developers.facebook.com/docs/ios/ios9

<key>LSApplicationQueriesSchemes</key>
<array>
        <string>fbapi</string>
        <string>fb-messenger-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
</array>

Однако следующий код показывает социальный диалог iOS по умолчанию только на iOS9. Тот же код с тем же двоичным файлом на iOS8 может открыть приложение Facebook и правильно отобразить диалоговое окно общего доступа.

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.example.com"]];
content.contentDescription = @"Test";
[FBSDKShareDialog showFromViewController:self withContent:content delegate:nil];

Я предполагаю, что приложение Facebook не найдено на iOS9, а затем показывает социальный диалог по умолчанию. Даже сообщение об ошибке не появилось.

Я ничего не пропустил? Или это ошибка iOS9?


person derjohng    schedule 18.09.2015    source источник
comment
У меня та же проблема. Я думаю, что следовал всему документу. Если приложение Facebook не найдено, оно все равно должно использовать веб-форму обмена. А в симуляторе работает нормально.   -  person mrhangz    schedule 18.09.2015


Ответы (2)


Я предполагаю, что Facebook изменил поведение, потому что в iOS 9 теперь появляется диалоговое окно с вопросом, хотите ли вы «Открыть Facebook?» при переключении приложений. Даже для FBSDKLoginManager метод переключения приложений (собственный) кажется менее предпочтительным, чем модальный UIWebView.

Тем не менее, вы все равно можете принудительно переключить диалоговое окно общего доступа на приложение Facebook (при условии, что у вас настроен plist вашего приложения, как описано в https://developers.facebook.com/docs/ios/ios9), используя этот метод:

FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fbauth2://"]]){
    dialog.mode = FBSDKShareDialogModeNative;
}
else {
    dialog.mode = FBSDKShareDialogModeBrowser; //or FBSDKShareDialogModeAutomatic
}
dialog.shareContent = content;
dialog.delegate = self;
dialog.fromViewController = self;
[dialog show];
person wilsontgh    schedule 18.09.2015
comment
Большое спасибо. Это работает, и это то, что я хочу. ^^ - person derjohng; 18.09.2015
comment
Кроме того, это не будет работать, если приложение fb не установлено, поэтому вам лучше проверить его, а если оно не установлено, используйте вместо него FBSDKShareDialogModeFeedBrowser. - person mrhangz; 18.09.2015
comment
@mrhangz Я отредактировал решение, включив в него проверку, установлено ли приложение Facebook. Я предполагал, что он автоматически переключится на другие режимы, но это не так. Спасибо! Кроме того, я предпочитаю FBSDKShareDialogModeBrowser FBSDKShareDialogModeFeedBrowser. - person wilsontgh; 19.09.2015
comment
Мне это кажется ошибкой facebook sdk. Я не мог использовать ничего, кроме FBSDKShareDialogModeFeedBrowser (даже автоматического), если он у вас работает, это здорово :) - person mrhangz; 29.09.2015
comment
Будьте осторожны с этим решением, потому что с 4.1 есть значительные изменения в списке исключений для iOS9. - person Resty; 22.01.2016
comment
да, ни один из этих резервных режимов не работает на iOS9, если не установлено приложение Facebook - person Cbas; 17.03.2016
comment
Только что протестировано на iOS 11. dialog.mode = FBSDKShareDialogModeBrowser — это то, что мне нужно было сделать, если приложение Facebook не установлено, иначе оно ничего не покажет. ???????? - person Alex Wally; 02.11.2017
comment
Можно ли поделиться фотографией с Facebook с помощью FBSDKShareKit без собственного приложения Facebook? Я пробовал с кодом ниже let share_dialog = FBSDKShareDialog() share_dialog.mode = .browser share_dialog.delegate = self share_dialog.fromViewController = self share_dialog.shareContent = content share_dialog.show() Не работает. - person Neelam Pursnani; 03.08.2018

В iOS 9 ниже приведено единственное решение, которое помогло мне определить, установлено ли приложение facebook на устройстве или нет:

 NSString *urlString = @"fbapi://";
    NSURL *url1 = [NSURL URLWithString:urlString];

    if ([[UIApplication sharedApplication] canOpenURL:url1]) {
        [[UIApplication sharedApplication] openURL:url1];
    }
    else {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itunes link for download app"]];
    }
person TharakaNirmana    schedule 26.08.2016