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:
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:
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:
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
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 OPFBSDKShareDialogModeShareSheet
: idemFBSDKShareDialogModeNative
: 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 imageFBSDKShareDialogModeWeb
: partages sans imageFBSDKShareDialogModeFeedBrowser
: fonctionne comme prévFBSDKShareDialogModeFeedWeb
: 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.
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()
}
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>
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.
Dialogue de partage Facebook dans votre application avec titre, description et image:
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)
meta http-equiv = "content-type" content = "text/html; charset = utf-8"> titre> MON TITRE DE L'URL SHRED meta content = '"+ imageUrl +"' property = 'og: image' />
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()
}
Le titre de Facebook sera partagé si nous rendons vide FBSDKShareLinkContent
contentURL.
Comme par exemple:
content.contentURL = [[NSURL alloc] initWithString:@"http://"];
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];