Facebook не отображается в UIActivityViewController, но твиттер делает

My iOS - это 8.1.2, и я использую UIActivityViewController для совместного использования. Я нажимаю на кнопку и позволяю UIActivityViewController представить

- (IBAction)UIActivityTypeButtonClick:(id)sender {

NSString* [email protected]"I am sharing this text";
NSArray* [email protected][text];
UIActivityViewController * activityVC=[[UIActivityViewController alloc]initWithActivityItems:sharedArray applicationActivities:nil];
[email protected][];
[self presentViewController:activityVC animated:YES completion:nil];
}

Я получаю это

enter image description here

Я получаю Сообщение, Twitter, Почта, WhatsApp и Подробнее.
При нажатии Дополнительно я получаю это.

enter image description here Где FACEBOOK. У меня есть приложение facebook в моем iPhone, и оно настроено с моим идентификатором тоже в настройках. Но facebook никогда не появляется здесь. Twitter делает. Это ошибка или что? Пожалуйста, предложите

Спасибо

Ответы

Ответ 1

Я впервые увидел это, когда Facebook обновил свое приложение 24 апреля. Обычный обмен текстами в Facebook не работает, пока установлено приложение Facebook. После его удаления он снова появится.

Если вы попытаетесь поделиться URL-адресом или изображением вместе с простым текстом, вы увидите Facebook как опцию, но текстовое поле будет пустым. Изображение или URL-адрес будут прикреплены без проблем.

Я разместил образец проекта, который воспроизводит эту проблему на github:

https://github.com/djr/UIActivityViewController-Facebook

Это не ответ, но довольно ясно, что проблема вызвана приложением Facebook.

EDIT:

Это не идеально, но я создал обходное решение. Не забывайте, что вам нужно будет прикрепить изображение или URL для этого.

  • Определите, установлено ли у пользователя приложение Facebook. Если да, то дайте им какое-то информационное сообщение.

    BOOL facebookIsInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]];
    BOOL isUserLoggedInWithFacebook = [SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook];
    
    if(isUserLoggedInWithFacebook && facebookIsInstalled)
    {
        // Explain that they have to copy and paste in order to share on Facebook
    }
    
  • Создайте подкласс UIActivityItemProvider и переопределите

    - (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
    {
        NSString *stringToShare = @"string to share";
    
        if([activityType isEqualToString:UIActivityTypePostToFacebook] ||
           [activityType isEqualToString:@"com.facebook.Facebook.ShareExtension"] ||
           [activityType.lowercaseString rangeOfString:@"facebook"].length) 
           // Because who knows when they are going to change the activityType string?
        {
            // Automatically copy the text for them
            [[UIPasteboard generalPasteboard] setString:stringToShare];
        }
    
        return stringToShare;
    }
    
  • Сообщите пользователю, что им нужно вставить в текстовое поле Facebook, чтобы поделиться.

  • Убейте его на Facebook.

Ответ 2

Я подтверждаю, что сообщил djr - если текст приложения FB больше не используется. Я удалил приложение FB и теперь использую как текстовые, так и графические работы.

Ответ 3

Facebook хотел бы, чтобы вы использовали свой SDK. Они заблокировали возможность установки исходного текста. (Не знаете, как.) Проверьте мой ответ в подобном сообщении:

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

Желательным решением (из Facebook) является использование их SDK.

Ответ 4

NSString* [email protected]"I am sharing this text";
NSURL *myWebsite = [NSURL URLWithString:@"http://www.website.com/"];
//  UIImage * myImage =[UIImage imageNamed:@"myImage.png"];
NSArray* [email protected][text,myWebsite];
 UIActivityViewController * activityVC=[[UIActivityViewController alloc]initWithActivityItems:sharedArray applicationActivities:nil];
NSArray *excludedActivities = @[];

activityVC.excludedActivityTypes=excludedActivities;
[self presentViewController:activityVC animated:YES completion:nil];

Ответ 5

Чтобы показать кнопку общего доступа к facebook, вы должны добавить изображение в массив элементов активности... это может быть ошибкой на стороне яблока, но я не видел открытого радара об этой проблеме.

Также обратите внимание, что текст iOS 8.3 по какой-то причине не может быть добавлен в facebook. при добавлении текста вы представляете только пустое текстовое поле.

UIImage *image = [UIImage imageNamed:@"__some_image__file"];

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[image]
                                                                                     applicationActivities:nil];

[self presentViewController:activityViewController animated:YES completion:nil];