ios - data - open graph facebook example
El contenido compartido de Facebook solo comparte URL en iOS 9 (8)
Compartir FBSDKShareLinkContent
con FBSDKShareDialog
funciona bien en iOS 8 pero no puede compartir imageURL
, contentTitle
, contentDescription
en dispositivos iOS 9.
La aplicación está construida con iOS 9 SDK, Xcode 7, Facebook SDK 4.7.0, todas las acciones mencionadas en Preparing Your Apps for iOS9 están listas . La aplicación actualmente no está disponible en App Store y la aplicación de Facebook está en modo dev.
El código para presentar el diálogo es bastante común (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()
En iOS 9 Facebook SDK presenta un diálogo nativo sin imagen, título y descripción:
En el momento en que se presenta el cuadro de diálogo, cuando se instala la aplicación FB en el dispositivo iOS 9, se produce un error, que cuando se resuelve agregando la URL respectiva a Info.plist no soluciona el problema. Es solo la declaración de registro que ya no aparece.
-canOpenURL: failed for URL: "fbapi20150629:/" - error: "This app is not allowed to query for scheme fbapi20150629"
Esto da como resultado una publicación vacía:
Sin embargo, en iOS 8, el diálogo se presenta a través de la aplicación FB O abre en la aplicación Safari vc cuando la aplicación FB no está instalada.
Por el bien de la comparación, el mismo código funciona desde dispositivos con iOS 8:
ACTUALIZAR:
Mientras que la respuesta de @ rednuht a continuación resuelve el problema inicial, vale la pena señalar el caso específico de la aplicación URL especificada por @ sophie-fader
El siguiente código funcionó como un amuleto para mí en todo tipo de situaciones:
@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()
}
El título de Facebook se compartirá si ponemos en blanco FBSDKShareLinkContent
contentURL.
Como por ejemplo:
content.contentURL = [[NSURL alloc] initWithString:@"http://"];
Estaba teniendo el mismo problema, y la solución que estoy usando es establecer el modo de Diálogo Compartir para usar la aplicación nativa.
Estoy usando Obj-C, pero debería ser más o menos lo mismo en 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];
En iOS 9, el usuario obtiene el diálogo de cambio de aplicación, pero funciona bien. También hay FBSDKShareDialogModeWeb
, que no tiene el diálogo de cambio de aplicación, pero tampoco muestra la imagen.
El valor predeterminado es FBSDKShareDialogModeAutomatic
, que elige FBSDKShareDialogModeShareSheet
, que es lo que está viendo.
ACTUALIZACIÓN : Este es el comportamiento en iOS9 para los modos de diálogo disponibles:
-
FBSDKShareDialogModeAutomatic
: utiliza ShareSheet, que es el caso OP -
FBSDKShareDialogModeShareSheet
: ídem -
FBSDKShareDialogModeNative
: funciona si el usuario tiene instalada la aplicación FB, de lo contrario falla silenciosamente. Presenta el diálogo de cambio de aplicación. -
FBSDKShareDialogModeBrowser
: comparte sin imagen -
FBSDKShareDialogModeWeb
: comparte sin imagen -
FBSDKShareDialogModeFeedBrowser
: funciona según lo previsto -
FBSDKShareDialogModeFeedWeb
: funciona según lo previsto
"Navegador" abre Safari a pantalla completa, "Web" abre un cuadro de diálogo de vista web.
Me gustaría ir con cualquiera de las dos últimas opciones para iOS9 y automática para iOS8.
Facebook comparte el diálogo dentro de su aplicación con título, descripción e imagen:
- iOS:
dialog.mode = FBSDKShareDialogMode.ShareSheet // No probado
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)
- Implementación desde la web: el título del enlace compartido, la descripción y la imagen deberían ser la respuesta de la url, que trajo automáticamente Facebook. Ex:
meta http-equiv = "content-type" content = "text / html; charset = utf-8"> title> MI SHRED URL TITLE meta content = ''"+ imageUrl +"'' propiedad = ''og: image'' />
Si comparte un sitio web del que es el webmaster, lo mejor que puede hacer es compartir el contenido contentURL
. A continuación, siga la información aquí para agregar el marcado de Open Graph a su archivo HTML: https://developers.facebook.com/docs/sharing/webmasters
Facebook raspará la información de la página web y poblará todos los campos desde allí. Para asegurarse de que los valores se vean correctos, ejecute el depurador:
https://developers.facebook.com/tools/debug/
En esa página, puedes forzar nuevamente el raspado, que se almacenará en caché.
para deshacerse del mensaje de error: -canOpenURL: failed for URL: "fbapi20150629:/" - error: "This app is not allowed to query for scheme fbapi20150629"
error -canOpenURL: failed for URL: "fbapi20150629:/" - error: "This app is not allowed to query for scheme fbapi20150629"
, puede agregar la siguiente línea en la <key>LSApplicationQueriesSchemes</key>
array en info.plist de su proyecto:
<string>fbapi20150629</string>
La solución para el problema es establecer el modo de Diálogo Compartir para usar la aplicación nativa. En iOS9, swift 2.0
Para la primera pregunta: el contenido de Facebook Share puede compartir url que no sea iTunes con la descripción del contenido. Si iTunes url se comparte, no compartirá nuestra descripción.
Siguiente: estaba teniendo el mismo problema, el botón Compartir de FB me redirecciona al navegador y la solución alternativa que estoy usando es establecer el modo de Diálogo Compartir para usar la aplicación nativa.
Esto ocurre constantemente si la URL que está compartiendo es una URL de la tienda de aplicaciones de iTunes. Cambiar la URL a cualquier otro sitio web resolvió el problema. https://developers.facebook.com/docs/sharing/ios "
Nota: si su aplicación comparte enlaces a las tiendas iTunes o Google Play, no publicamos ninguna imagen o descripción que especifique en el recurso compartido. En su lugar, publicamos información de la aplicación que robamos directamente de la tienda de aplicaciones con Webcrawler. Esto puede no incluir imágenes. Para obtener una vista previa de un enlace compartido a iTunes o Google Play, ingrese su URL en el Depurador de 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()
}
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];