objective-c xcode facebook uiactivityviewcontroller

objective c - UIActivityViewController para Facebook no muestra el texto predeterminado



objective-c xcode (5)

Descubrí que sucede cuando tienes instalada la aplicación de Facebook. Al eliminar la aplicación de Facebook, UIActivityViewController muestra el texto precargado correctamente y la vista previa de la imagen también es diferente. Muestra la url del sitio en la parte inferior de la imagen.

Estoy usando un UIActivityViewController que proporciona un texto predeterminado y un enlace. Con todos los medios sociales (sms, correo electrónico, twitter) se muestran el texto y la URL predeterminados. Sin embargo, con FB mientras se muestra la imagen de URL, el texto predeterminado no se muestra (simplemente está en blanco). A continuación está el código:

NSString *shareStr = [NSString stringWithFormat:@""some text"]; NSURL *website = [NSURL URLWithString:@"website"]; NSArray *shareAray = @[shareStr,website]; [self viewWillDisappear:YES]; UIActivityViewController *activityController = [[UIActivityViewController alloc]initWithActivityItems:shareAray applicationActivities:nil]; if([activityController respondsToSelector:@selector(popoverPresentationController)] ) activityController.popoverPresentationController.barButtonItem = self.shareButton; [self presentViewController:activityController animated:YES completion:nil]; [activityController setCompletionHandler:^(NSString *activityType, BOOL completed){ if (!activityType || UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { [self viewWillAppear:YES]; } }];

Actualización: Como se señaló en lo que otros dicen a continuación, FB ya no permite el pre-llenado. Aquí hay otro enlace a un video que da ejemplos de lo que está permitido y lo que no: https://developers.facebook.com/docs/apps/review/prefill



He hecho un truco para compartir texto e imagen desde UIActivityViewController en iOS. Primero necesito encontrar si el usuario ha hecho clic en el ícono de Facebook desde UIActivityView y luego abre el cuadro de diálogo compartido de Facebook con texto e imagen. Esta es la única forma de compartir tanto para texto como para imagen. A continuación está mi código. Espero que esto pueda ahorrarle tiempo a los desarrolladores. Dado que Facebook ha cambiado sus políticas y es realmente difícil compartir el texto de precompletado.

Agregue UIActivityItemSource en .h archivo como delegado

Se llamará a esto cuando el usuario haga clic en el botón compartir para mostrar UIActivityViewController .

NSString *textObject = [NSString stringWithFormat:@"%@, %@",shareString,timeDuration]; NSMutableArray *activityItems = [NSMutableArray arrayWithObjects:self, textObject, shareImage, nil]; activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; [self presentViewController:activityController animated:YES completion:nil];

Y cuando el usuario haga clic en el icono de Facebook desde allí.

pragma mark - Protocolo UIActivityItemSource

- (id)activityViewController:(UIActivityViewController )activityViewController itemForActivityType:(NSString )activityType { if ([activityType isEqualToString:UIActivityTypePostToFacebook]) { [self dismissViewControllerAnimated:activityController completion:nil]; [self performSelector:@selector(postToFacebook) withObject:self afterDelay:1.0];} return nil; } -(void)postToFacebook { [FBSDKSettings setAppID:@""]; NSArray *imagesListingArray = [[item objectForKey:@"imgs"] valueForKey:@"img"]; NSString * shareImage = [imagesListingArray objectAtIndex:0]; FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init]; content.contentTitle = @"F-Spot"; content.contentDescription = [NSString stringWithFormat:@"%@ %@", [item valueForKey:@"event_name"],[item valueForKey:@"duration"]]; content.imageURL = [NSURL URLWithString:shareImage]; FBSDKShareDialog *shareDialog = [[FBSDKShareDialog alloc] init]; shareDialog.mode = FBSDKShareDialogModeNative; if(shareDialog.canShow) { shareDialog.mode = FBSDKShareDialogModeFeedBrowser; } shareDialog.shareContent = content; shareDialog.delegate = self; [shareDialog show]; }


Hice UIActivityViewController en UIActivityViewController para usar el texto al agregar una imagen de vista previa a la matriz de compartir.


Parece que Facebook ya no quiere que los desarrolladores completen las publicaciones con texto. Desde https://developers.facebook.com/docs/sharing/ios#ios-integration :

El uso de la hoja de acciones de iOS está sujeto a la Política de la Plataforma de Facebook, incluida la sección 2.3, que establece que las aplicaciones pueden no llenarse previamente. En el contexto de la hoja para compartir, esto significa que las aplicaciones pueden no completar previamente el campo de texto inicial de la hoja de compartir con contenido que no fue ingresado por las personas anteriormente en el uso de la aplicación.

Parece que preferirían que los desarrolladores usen el SDK:

Si bien puede utilizar la API de controlador de vista nativa de iOS (hoja de compartir) directamente, hay varias razones para usar el diálogo Compartir de iOS nativo proporcionado por el SDK de Facebook. El uso del diálogo Share nativo proporciona una manera rápida de probar que las personas se hayan registrado en Facebook en sus dispositivos iOS 6+. Esta API también usa el mismo bloque de estilo que otras partes del SDK de Facebook.