美文网首页
iOS 系统分享弹出不支持此类型

iOS 系统分享弹出不支持此类型

作者: KODIE | 来源:发表于2019-10-12 22:06 被阅读0次

场景:

我需要在我的应用内置一个分享的功能,方便用户分享给他们的好友,以便产品增长自然量。

问题

我设置完成之后分享的时候分享给微信,其中的图片始终出不来,我起初以为是图片比较大加载不出来的问题。后面看到别的应用能够分享图片,但是仅仅是分享图片,那我也想分享图片。后面单独设置图片后,出现了弹出不支持此类型的对话框

解决

设置分享的时候,加入item的时候有问题。

代码如下:

+ (void)customShareWithShareText:(NSString *)shareText shareImage:(UIImage *)shareImage shareUrl:(NSString *)shareUrlStr{
    // 1、设置分享的内容,并将内容添加到数组中
    NSMutableArray *tempArrayM = [NSMutableArray array];
    if (shareText.length) {
        [tempArrayM addObject:shareText];
    }
    NSData *imageData = nil;
    if (shareImage) {
        imageData = UIImagePNGRepresentation(shareImage);
        [tempArrayM addObject:imageData];
    }
    NSURL *shareUrl = nil;
    if (shareUrlStr.length) {
        shareUrl = [NSURL URLWithString:shareUrlStr];
        [tempArrayM addObject:shareUrl];
    }
    NSArray *items = tempArrayM.copy;
    
    if (items.count == 0) {
        return;
    }
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
    if (@available(iOS 11.0, *)) {//UIActivityTypeMarkupAsPDF是在iOS 11.0 之后才有的
        activityVC.excludedActivityTypes = @[UIActivityTypeMessage,UIActivityTypeMail,UIActivityTypeOpenInIBooks,UIActivityTypeMarkupAsPDF];
    } else if (@available(iOS 9.0, *)) {//UIActivityTypeOpenInIBooks是在iOS 9.0 之后才有的
        activityVC.excludedActivityTypes = @[UIActivityTypeMessage,UIActivityTypeMail,UIActivityTypeOpenInIBooks];
    }else {
        activityVC.excludedActivityTypes = @[UIActivityTypeMessage,UIActivityTypeMail];
    }
    activityVC.completionWithItemsHandler = ^(UIActivityType  _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
        if (completed) {
            NSLog(@"%@",@"分享成功");
        }else {
            NSLog(@"%@",@"分享失败");
        }
    };
    //这儿一定要做iPhone与iPad的判断,因为这儿只有iPhone可以present,iPad需pop,所以这儿actVC.popoverPresentationController.sourceView = self.view;在iPad下必须有,不然iPad会crash,self.view你可以换成任何view,你可以理解为弹出的窗需要找个依托。
    UIViewController *vc = [KODUtilService KOD_getTopViewController];
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        activityVC.popoverPresentationController.sourceView = vc.view;
        [vc presentViewController:activityVC animated:YES completion:nil];
    } else {
        [vc presentViewController:activityVC animated:YES completion:nil];
    }
}

看代码发现,其实我刚开始设置的时候,直接传的是UIimage类型,而不是把图片转成二进制即NSData类型,转完之后就没问题了。

NSData *mageData = UIImagePNGRepresentation(shareImage);

PS: 顺便说一下在iPad上是需要pop出来的,多一行代码即:

activityVC.popoverPresentationController.sourceView = vc.view;

希望大家使用系统分享成功,以上~

相关文章

网友评论

      本文标题:iOS 系统分享弹出不支持此类型

      本文链接:https://www.haomeiwen.com/subject/cwikuctx.html