場(chǎng)景:
我需要在我的應(yīng)用內(nèi)置一個(gè)分享的功能,方便用戶分享給他們的好友,以便產(chǎn)品增長(zhǎng)自然量。
問(wèn)題
我設(shè)置完成之后分享的時(shí)候分享給微信,其中的圖片始終出不來(lái),我起初以為是圖片比較大加載不出來(lái)的問(wèn)題。后面看到別的應(yīng)用能夠分享圖片,但是僅僅是分享圖片,那我也想分享圖片。后面單獨(dú)設(shè)置圖片后,出現(xiàn)了彈出不支持此類(lèi)型的對(duì)話框
解決
設(shè)置分享的時(shí)候,加入item的時(shí)候有問(wèn)題。
代碼如下:
+ (void)customShareWithShareText:(NSString *)shareText shareImage:(UIImage *)shareImage shareUrl:(NSString *)shareUrlStr{
// 1、設(shè)置分享的內(nèi)容,并將內(nèi)容添加到數(shù)組中
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的判斷,因?yàn)檫@兒只有iPhone可以present,iPad需pop,所以這兒actVC.popoverPresentationController.sourceView = self.view;在iPad下必須有,不然iPad會(huì)crash,self.view你可以換成任何view,你可以理解為彈出的窗需要找個(gè)依托。
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];
}
}
看代碼發(fā)現(xiàn),其實(shí)我剛開(kāi)始設(shè)置的時(shí)候,直接傳的是UIimage類(lèi)型,而不是把圖片轉(zhuǎn)成二進(jìn)制即NSData類(lèi)型,轉(zhuǎn)完之后就沒(méi)問(wèn)題了。
NSData *mageData = UIImagePNGRepresentation(shareImage);
PS: 順便說(shuō)一下在iPad上是需要pop出來(lái)的,多一行代碼即:
activityVC.popoverPresentationController.sourceView = vc.view;
希望大家使用系統(tǒng)分享成功,以上~