Подтвердить что ты не робот

Facebook share content содержит только URL-адрес в iOS 9

Share FBSDKShareLinkContent с FBSDKShareDialog отлично работает в iOS 8, но не имеет возможности использовать imageURL, contentTitle, contentDescription на устройствах iOS 9.

Приложение построено с помощью iOS 9 SDK, Xcode 7, Facebook SDK 4.7.0, все действия, упомянутые в Подготовка ваших приложений для iOS9 сделано. Приложение в настоящее время недоступно в App Store, а приложение Facebook находится в режиме dev.

Код для представления диалога довольно распространен (Swift 2.0):

let content = FBSDKShareLinkContent()

content.contentURL = <URL to the app in the App Store>
content.imageURL = <valid image URL>
content.contentTitle = <some title>
content.contentDescription = <some descr>

let shareDialog = FBSDKShareDialog()
shareDialog.fromViewController = viewController
shareDialog.shareContent = content
shareDialog.delegate = self

if !shareDialog.canShow() {
    print("cannot show native share dialog")
}

shareDialog.show()

В iOS 9 Facebook SDK представлен собственный диалог без изображения, названия и описания: В iOS 9 Facebook SDK представлен собственный диалог без изображения, названия и описания

В то время, когда представлен диалог, когда приложение FB установлено на устройстве iOS 9, появляется ошибка, которая при разрешении путем добавления соответствующего URL-адреса в Info.plist не устраняет проблему. Это просто оператор журнала, который больше не отображается.

-canOpenURL: failed for URL: "fbapi20150629:/" - error: "This app is not allowed to query for scheme fbapi20150629"

В результате получается пустое сообщение: пустое сообщение, совместно используемое из внешнего вида устройства iOS 9 из Интернета

В iOS 8, однако, диалог представлен через приложение FB или открывается в приложении Safari vc, когда приложение FB не установлено.

Для сравнения, тот же код работает с устройствами iOS 8:

iOS 8 share post appearance

UPDATE:

В то время как @rednuht ответ ниже, решает исходную проблему, стоит отметить AppStore URL-специфический случай, на который указывает @Sophie-фейдер

4b9b3361

Ответ 1

У меня была такая же проблема, и обходной путь, который я использую, заключается в том, чтобы установить режим "Общий диалог" для использования собственного приложения.

Я использую Obj-C, но должен быть почти таким же в Swift:

FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.fromViewController = viewController;
dialog.shareContent = content;
dialog.mode = FBSDKShareDialogModeNative; // if you don't set this before canShow call, canShow would always return YES
if (![dialog canShow]) {
    // fallback presentation when there is no FB app
    dialog.mode = FBSDKShareDialogModeFeedBrowser;
}
[dialog show];

В iOS 9 пользователь получает диалог переключения приложений, но он работает нормально. Там также FBSDKShareDialogModeWeb, в котором нет диалогового окна переключения приложений, но оно также не отображается.

По умолчанию используется FBSDKShareDialogModeAutomatic, который выбирает FBSDKShareDialogModeShareSheet, что вы видите.

UPDATE. Это поведение в iOS9 для доступных диалоговых режимов:

  • FBSDKShareDialogModeAutomatic: использует ShareSheet, который является случаем OP
  • FBSDKShareDialogModeShareSheet: ditto
  • FBSDKShareDialogModeNative: работает, если у пользователя установлено приложение FB, в противном случае он не работает. Представляет диалоговое окно приложения-переключателя.
  • FBSDKShareDialogModeBrowser: акции без изображения
  • FBSDKShareDialogModeWeb: акции без изображения
  • FBSDKShareDialogModeFeedBrowser: работает по назначению
  • FBSDKShareDialogModeFeedWeb: работает по назначению

"Браузер" открывает полноэкранный режим Safari, "Веб" открывает диалог веб-просмотра.

Я бы воспользовался одним из двух последних вариантов для iOS9 и Automatic для iOS8.

Ответ 2

Решение проблемы заключается в том, чтобы установить режим общего доступа для использования собственного приложения. В iOS9, swift 2.0

Для первого вопроса: Facebook Share content может распространять URL-адрес, отличный от iTunes, с описанием содержимого. Если URL-адрес iTunes является общим, он не разделяет наше описание.

Далее: у меня была такая же проблема, нажатие кнопки FB Share переадресовывает меня в браузер, и обходной путь, который я использую, заключается в том, чтобы установить режим общего доступа для использования собственного приложения.

Это происходит последовательно, если URL, который вы используете, является URL-адресом магазина iTunes. Изменение URL-адреса на другом веб-сайте решило проблему. https://developers.facebook.com/docs/sharing/ios"

Примечание. Если доля вашего приложения связана с магазинами iTunes или Google Play, мы не размещаем никаких изображений или описаний, которые вы указали в общей папке. Вместо этого мы публикуем информацию о приложении, которую мы очищаем из магазина приложений непосредственно с помощью Webcrawler. Это может не включать изображения. Чтобы просмотреть ссылку в iTunes или Google Play, введите URL-адрес в отладчик URL.

  func shareFB(sender: AnyObject){

    let content : FBSDKShareLinkContent = FBSDKShareLinkContent()

    content.contentURL = NSURL(string: "//URL other then iTunes/AppStore")
    content.contentTitle = "MyApp"
    content.contentDescription = "//Desc"

    content.imageURL = NSURL(string:"//Image URL")


    let dialog : FBSDKShareDialog = FBSDKShareDialog()
    dialog.mode = FBSDKShareDialogMode.Native
  // if you don't set this before canShow call, canShow would always return YES
    if !dialog.canShow() {
        // fallback presentation when there is no FB app
      dialog.mode = FBSDKShareDialogModeFeedBrowser
     }
    dialog.show()
 }

Ответ 3

чтобы избавиться от сообщения об ошибке: -canOpenURL: failed for URL: "fbapi20150629:/" - error: "This app is not allowed to query for scheme fbapi20150629", вы можете добавить следующую строку в массив <key>LSApplicationQueriesSchemes</key> в info.plist вашего проекта:

<string>fbapi20150629</string>

Ответ 4

Если вы делитесь веб-сайтом, на котором вы являетесь веб-мастером, самое лучшее, что можно сделать, это просто поделиться с ним contentURL. Затем следуйте указаниям здесь, чтобы добавить разметку Open Graph в ваш HTML файл: https://developers.facebook.com/docs/sharing/webmasters

Facebook очистит информацию с веб-страницы и заполнит все поля оттуда. Чтобы убедиться, что значения выглядят правильно, запустите отладчик:

https://developers.facebook.com/tools/debug/

На этой странице вы можете снова принудительно выполнить очистку, которая будет кэшироваться.

Ответ 5

Следующий код работал как шарм для меня во всех типах ситуаций:

@IBAction func facebookTap() {
    let content = FBSDKShareLinkContent()
    content.contentTitle = imageTitle
    content.contentURL =  URL(string: "http://technokriti.com/")
    content.imageURL = URL(string: self.imageURL)
    content.contentDescription = imageDescription

    let dialog : FBSDKShareDialog = FBSDKShareDialog()
    dialog.fromViewController = self
    dialog.shareContent = content
    dialog.mode = FBSDKShareDialogMode.feedWeb
    dialog.show()
}

Ответ 6

В диалоговом окне Facebook в вашем приложении с заголовком, описанием и изображением:

  • IOS:

dialog.mode = FBSDKShareDialogMode.ShareSheet//Не пробовал

or
//Working for me:


let linkcontent: FBSDKShareLinkContent = FBSDKShareLinkContent()
        linkcontent.contentURL = videoURL
 //       linkcontent.contentDescription = videoDesc
 //       linkcontent.contentTitle = videoTitle
 //       linkcontent.imageURL = imageURL
        FBSDKShareDialog.showFromViewController(self, withContent: linkcontent, delegate: self)
  1. Реализация из Интернета: название, описание и изображение общей ссылки должны быть ответом URL-адреса, который автоматически создается Facebook. Пример:

meta http-equiv = "content-type" content = "text/html; charset = utf-8" > название > MY SHRED URL TITLE meta content = ' "+ imageUrl +" ' свойство = 'og: image'/" >

Ответ 7

Заголовок Facebook станет общим, если мы сделаем FBSDKShareLinkContent contentURL пустым.

Как например:

content.contentURL = [[NSURL alloc] initWithString:@"http://"];

Ответ 8

This works for me:-

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:APP_STORE_LINK];
content.imageURL=[NSURL URLWithString:IMAGE_LINK];

FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.shareContent = content;
dialog.fromViewController = self;
dialog.mode = FBSDKShareDialogModeFeedBrowser;
[dialog show];