web-dev-qa-db-fra.com

Le contenu de partage Facebook ne partage que l'URL dans iOS 9

Partager FBSDKShareLinkContent avec FBSDKShareDialog fonctionne correctement sous iOS 8 mais ne parvient pas à partager imageURL, contentTitle, contentDescription sur des appareils iOS 9.

L'application est construite avec iOS 9 SDK, Xcode 7, Facebook SDK 4.7.0, toutes les actions mentionnées dans Préparation de vos applications pour iOS9 sont terminées. L'application n'est actuellement pas disponible dans l'App Store et l'application Facebook est en mode dev.

Le code pour présenter le dialogue est assez commun (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()

Sur iOS 9, le kit de développement logiciel Facebook présente un dialogue natif sans image, titre et description: On iOS 9 Facebook SDK presents native dialog with no image, title and description

Au moment où la boîte de dialogue s'affiche, lorsque l'application FB est installée sur un périphérique iOS 9, il se produit une erreur qui, une fois résolue en ajoutant l'URL respective à Info.plist, ne résout pas le problème. C'est juste la déclaration du journal qui n'apparaît plus.

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

Cela se traduit par un poste vide: empty post shared from iOS 9 device appearance from the web

Sur iOS 8, cependant, la boîte de dialogue est présentée via l'application FB OR ouvre Safari vc dans l'application lorsque l'application FB n'est pas installée.

À des fins de comparaison, le même code fonctionne à partir d'appareils iOS 8:

iOS 8 share post appearance

UPDATE:

Alors que la réponse de @ rednuht ci-dessous résout le problème initial, il convient de noter à propos de cas spécifique à l'URL AppStore signalé par @ sophie-fader

38
Yevhen Dubinin

J'avais le même problème et la solution de contournement que j'utilise est de configurer le mode Dialogue de partage pour utiliser l'application native.

J'utilise Obj-C, mais devrait être à peu près le même dans 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];

Dans iOS 9, l'utilisateur obtient la boîte de dialogue de changement d'application, mais cela fonctionne correctement. Il y a aussi FBSDKShareDialogModeWeb, qui n'a pas de dialogue de changement d'application, mais ne montre pas non plus l'image.

La valeur par défaut est FBSDKShareDialogModeAutomatic, qui choisit FBSDKShareDialogModeShareSheet, ce que vous voyez.

UPDATE : il s'agit du comportement sous iOS9 pour les modes de dialogue disponibles:

  • FBSDKShareDialogModeAutomatic: utilise ShareSheet, qui est le cas OP
  • FBSDKShareDialogModeShareSheet: idem
  • FBSDKShareDialogModeNative: fonctionne si l'application FB est installée sur l'utilisateur, sinon échoue en mode silencieux. Présente le dialogue app-switch.
  • FBSDKShareDialogModeBrowser: partages sans image
  • FBSDKShareDialogModeWeb: partages sans image
  • FBSDKShareDialogModeFeedBrowser: fonctionne comme prév
  • FBSDKShareDialogModeFeedWeb: fonctionne comme prév

"Navigateur" ouvre Safari en plein écran, "Web" ouvre une boîte de dialogue de visualisation Web.

Je choisirais l'une des deux dernières options pour iOS9 et Automatique pour iOS8.

58
rednuht

La solution au problème consiste à définir le mode Dialogue de partage pour utiliser l'application native. Dans iOS9, Swift 2.0

Pour la première question: le contenu Facebook Share peut partager l’URL autre que iTunes avec la description du contenu. Si l'URL iTunes est partagé, il ne partagera pas notre description.

Suivant: J'avais le même problème, le fait de cliquer sur le bouton Partager FB me redirige vers le navigateur et la solution de contournement que j'utilise consiste à définir le mode Dialogue de partage pour utiliser l'application native.

Cela se produit régulièrement si l'URL que vous partagez est une URL d'iTunes App Store. Changer l'URL d'un autre site Web a résolu le problème. https://developers.facebook.com/docs/sharing/ios "

Remarque: si votre application partage des liens vers les magasins iTunes ou Google Play, nous ne publions aucune image ni description que vous spécifiez dans le partage. Au lieu de cela, nous publions des informations sur les applications que nous extrayons de l'App Store directement avec Webcrawler. Cela peut ne pas inclure les images. Pour prévisualiser un lien partagé avec iTunes ou Google Play, entrez votre URL dans le débogueur d’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()
 }
10
ViJay Avhad

se débarrasser du message d'erreur: -canOpenURL: failed for URL: "fbapi20150629:/" - error: "This app is not allowed to query for scheme fbapi20150629", vous pouvez ajouter la ligne suivante dans le <key>LSApplicationQueriesSchemes</key> tableau dans l'info.plist de votre projet:

<string>fbapi20150629</string>

7
dzhuowen

Si vous partagez un site Web dont vous êtes le webmaster, la meilleure chose à faire est simplement de partager le contentURL. Suivez ensuite les informations ici pour ajouter le balisage Open Graph à votre fichier HTML: https://developers.facebook.com/docs/sharing/webmasters

Facebook récupère les informations de la page Web et remplit tous les champs à partir de cette page. Pour vous assurer que les valeurs semblent correctes, exécutez le débogueur:

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

Sur cette page, vous pouvez réellement forcer à nouveau le scrap, qui sera mis en cache.

2
jsonfellin

Dialogue de partage Facebook dans votre application avec titre, description et image:

  1. iOS:

dialog.mode = FBSDKShareDialogMode.ShareSheet // Non essayé

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. Implémentation à partir du Web: le titre du lien partagé, la description et l'image doivent être la réponse de l'URL, qui est automatiquement apportée par Facebook. Ex:

meta http-equiv = "content-type" content = "text/html; charset = utf-8"> titre> MON TITRE DE L'URL SHRED meta content = '"+ imageUrl +"' property = 'og: image' />

2
Yogesh Lolusare

Le code ci-dessous a fonctionné comme un charme pour moi dans tous les types de situations:

@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()
}
2
Pradeep Mittal

Le titre de Facebook sera partagé si nous rendons vide FBSDKShareLinkContent contentURL.

Comme par exemple:

content.contentURL = [[NSURL alloc] initWithString:@"http://"];
0
tania_S
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];
0
Praveen Sevta