iOS Share GIF (анимированное изображение) не работает

прошло почти 2 дня, что я ищу решение своей проблемы, но я не был успешным, я хочу поделиться GIF( анимированное изображение) на Facebook, Twitter, электронной почте, WhatsApp , используя "UIActivityViewController".

Это мой код :

NSURL *imagePath = [NSURL URLWithString:@"http://sth.gif"];
NSData *animatedGif = [NSData dataWithContentsOfURL:imagePath];

NSArray *sharingItems = [NSArray arrayWithObjects: animatedGif,stringToShare, nil];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil];

когда я делюсь в электронной почте его анимированные и его работа идеально, но в Twitter, Facebook, whatsApp GIF не анимированные и его как изображение ... Я уже прочитал все вопросы Stack-overflow о такая же проблема, как этой или этой или этой но это не работает для меня.

3 ответов


пока база на днях исследований выяснила, что:

TWITTER : для обмена GIF на twitter пришлось использовать twitter API и создать составной запрос для достижения цели и его работы очень хорошо.

FACEBOOK: я поделился некоторыми GIF на Facebook, используя FACEBOOKSHAREKIT, но я не знаю, почему иногда gif анимированы, иногда нет.

INSTAGRAM: чтобы поделиться gif на Instagram пришлось конвертировать GIFS в MP4 (или любые другие видеоформаты , принятые Instagram), затем сохраните его в Camera roll, а затем поделитесь им, он немного скручен, но работает очень хорошо.

в WhatsApp: Он не поддерживает GIF вообще. ПРОЧИТАЙТЕ ОБНОВЛЕНИЕ

чтобы сделать все это, я не мог использовать "UIActivityViewController", поэтому решил создать пользовательскую страницу общего доступа. если кто-нибудь знает, что добавить здесь, чтобы помочь мне и другим, пожалуйста, скажите мне (особенно о Фейсбук.) Заранее спасибо

обновление

в WhatsApp : благодаря @AmmarShahid, как он упоминал в комментариях, Whatsapp теперь поддерживает gif.


столкнулся с подобной проблемой и много гуглил, но все же не идеальное решение, лучшее, что я придумал здесь:

используйте элемент uiactivityitemprovider и extend - (id) {} для другого типа UIActivityType:

Twitter: по умолчанию uiactivityviewcontroller Twitter share еще не поддерживает его, который он "уменьшит" его как неподвижный JPG. Однако как-то он работает для GIF меньше 100kb (протестирован в iOS 9), и я не знаю, почему. Поэтому я должен использовать SLRequest для загрузки GIF, как учили в здесь. Когда SLRequest выполнен и возвращается, отклоните UIActivityViewController. Недостатком этого является отсутствие предварительного просмотра общего листа, и пользователи больше не могут вводить собственное сообщение.

Facebook: на самом деле это намного проще! Просто загрузите GIF в Giphy, затем предоставьте URL Giphy UIActivityViewController вместо содержимого файла, Facebook распознает его и покажет анимированный GIF

- (id)item
{    
    if ([self.activityType isEqualToString:UIActivityTypePostToFacebook]) {
        // Upload to Giphy
        ...
        return [NSURL URLWithString:giphyURL];
    }
    if ([self.activityType isEqualToString:UIActivityTypePostToTwitter]) {
        // Use SLRequest to share instead
        ...
        // Dismiss the UIActivityViewController (I am using Unity)
        [UnityGetGLViewController() dismissViewControllerAnimated:NO completion: NULL];
        return nil;
    }
}

полный код в мой GitHub, Я на самом деле iOS newb, поэтому некоторые эксперты, пожалуйста, исправьте меня и код, если это возможно


/ / поделиться GIF-файл: WhatsApp

    NSURL *imageUrl =[self.ImageArray objectAtIndex:currentPhotoIndex];
    NSString *path=imageUrl.absoluteString;
    NSArray *strings = [path componentsSeparatedByString:@"/"];
    NSString *mygif=[strings objectAtIndex:strings.count-1];

    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *dataPath = [documentsPath stringByAppendingPathComponent:@"/MrHRamani"];

    NSString *filePath = [dataPath stringByAppendingPathComponent:mygif];

    NSURL *urll=[NSURL fileURLWithPath:filePath];
    NSLog(@"imag %@",imageUrl);
    self.documentationInteractionController.delegate = self;
    self.documentationInteractionController.UTI = @"net.whatsapp.image";
    self.documentationInteractionController = [self setupControllerWithURL:urll usingDelegate:self];
    [self.documentationInteractionController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];