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

UIActivityViewController для Facebook не показывает текст по умолчанию

Я использую UIActivityViewController, который предоставляет некоторый текст по умолчанию и ссылку. Со всеми социальными средами (смс, электронная почта, твиттер) отображаются текст и URL по умолчанию. Тем не менее, с FB, когда отображается URL-адрес, текст по умолчанию не отображается (он просто пуст). Ниже приведен код:

    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];
        }
    }];

Обновление: Как отмечалось в других ниже, FB больше не позволяет предварительно заполнять. Вот еще одна ссылка на видео, в которой приводятся примеры того, что разрешено, а что нет: https://developers.facebook.com/docs/apps/review/prefill

4b9b3361

Ответ 1

Казалось бы, Facebook больше не хочет, чтобы разработчики предварительно заполняли сообщения текстом. Из https://developers.facebook.com/docs/sharing/ios#ios-integration:

Использование общей папки iOS зависит от политики платформы Facebook, включая раздел 2.3, в котором говорится, что приложения могут не заполняться заранее. В контексте общего доступа это означает, что приложения не могут предварительно заполнить поле начального текста shareline содержимым, которое ранее не было введено людьми при использовании этого приложения.

Кажется, они предпочли бы, чтобы разработчики использовали SDK:

В то время как вы можете напрямую использовать API-интерфейс контроллера открытого вида iOS (общий лист), есть несколько причин использовать родной диалог доступа к iOS, предоставленный SDK для Facebook. Использование диалогового окна native Share обеспечивает быстрый способ проверить, что люди подписались на Facebook на своих устройствах iOS 6+. Этот API также использует тот же блок стиля, что и другие части SDK для Facebook.

Ответ 2

Я нашел это, когда у вас установлено приложение Facebook. Удалив приложение Facebook, UIActivityViewController отображает предварительно заполненный текст правильно, и предварительный просмотр изображения также отличается. Он показывает URL-адрес сайта в нижней части изображения.

Ответ 3

Я сделал один трюк, чтобы поделиться текстом и изображением с UIActivityViewController в iOS. Сначала мне нужно найти, щелкнули ли пользователь значок facebook с UIActivityView, а затем откройте диалог общего доступа в facebook с текстом и изображением. Это единственный способ поделиться как текстом, так и изображением. Ниже мой код. Надеюсь, это сэкономит время для разработчиков. Так как Facebook изменил политику, и ее действительно сложно передать предварительный текст.

Добавьте UIActivityItemSource в .h файл в качестве делегата

Это будет вызываться, когда пользователь нажимает кнопку совместного доступа, чтобы показать 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];

И когда пользователь нажимает на него значок facebook.

знак прагмы - протокол 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];

}

Ответ 4

Это расширение исправить проблему, проверьте ее! https://github.com/alexruperez/ARFacebookShareKitActivity

Запустите FBSDKShareKit из UIActivityViewController вместо общедоступного листка Facebook по умолчанию.

Ответ 5

Я обманул UIActivityViewController, чтобы использовать текст, добавив в общий массив предварительный просмотр изображения.