友盟分享遇到的坑
阿新 • • 發佈:2019-01-29
最近做分享功能,用了友盟分享,遇到了很多坑(以前都沒有遇到過),所以就分享了一下
之前做的分享,大都是分享的都是本地的圖片,加上標題,內容
現在這個專案要求分享從伺服器獲得的圖片,
下面是友盟分享的程式碼,利用預設的分享介面
今天居然又遇到了個深坑 在專案中,需要分享視訊,分享圖片,分享圖連結 1.分享圖文連結 ,下面只是Q分享的程式碼,用的是友盟預設的分享檢視
2.分享視訊(橫屏時,用的是自定義的分享檢視)
正確程式碼(注:必須重新設定urlResource,否則分享的型別會亂,雖然分享的是視訊,但是連結可能是圖片,或者是一個網頁連結)
第一個引數:在哪個Controller上新增分享介面 第二個引數:友盟的APPKey 第三個引數:分享的文字(如果要分享的新浪微博的話,需要把分享的連結載入分享的內容後面,上面的程式碼就是) 第四個引數:你要分享的圖片(UIImage型別或者NSData型別,我都用UIImage型別) 第五個引數:你所要分享的平臺(順序自定,預設的分享介面會根據該資料的順序排序) 第六個引數:代理,self 分享伺服器上的資料:連結,圖片,標題,內容 1.把圖片轉換為NSData型別,然後再把NSData型別轉換為UIImage型別[UMSocialSnsService presentSnsIconSheetView:self appKey:UM_APPKEY shareText:[NSString stringWithFormat:@"%@ %@",shareText,shareURL] shareImage:image shareToSnsNames:@[UMShareToQzone,UMShareToQQ,UMShareToWechatSession,UMShareToWechatTimeline,UMShareToSina] delegate:self];
2.最好記得設定一個預設圖片NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:shareImage]]; UIImage * image = [UIImage imageWithData:data];
if (!image) {
image = [UIImage imageNamed:@"AppIcon"];
}
3.設定標題
[UMSocialData defaultData].extConfig.title = shareTitle;
4.為了分享不會失敗,設定預設連結,
if ([shareURL isEqualToString:@""] || shareURL.length == 0) {
shareURL = DEFAULT_URL;
}
5.設定分享連結(大坑),如果不存在,分享QQ(分享失敗,打不開QQ),分享到微信(資訊顯示傳送失敗),所以最好要有第4步[UMSocialData defaultData].extConfig.qqData.url = shareURL;
[UMSocialData defaultData].extConfig.wechatSessionData.url = shareURL;
[UMSocialData defaultData].extConfig.wechatTimelineData.url = shareURL;
[UMSocialData defaultData].extConfig.qzoneData.url = shareURL;
6.不要輕易設定,設定下面的東西,發現分享只有一張圖片,其他的型別也是
[[UMSocialData defaultData].urlResource setResourceType:UMSocialUrlResourceTypeImage url:@""];
如果按照上面的做,應該不會有什麼問題了,當然,這只是我的個人看法
下面是完整程式碼
-(void)share{
//分享
NSDictionary * shareDic = _currentInfo.shareInfo;
HRShareInfoModel * model =[HRShareInfoModel objectWithKeyValues:shareDic];
NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:model.shareImage]];
UIImage * image = [UIImage imageWithData:data];
if (!image) {
image = [UIImage imageNamed:@"AppIcon"];
}
//標題
[UMSocialData defaultData].extConfig.title = model.shareTitle;
if ([model.shareURL isEqualToString:@""] || model.shareURL.length == 0) {
model.shareURL = DEFAULT_URL;
}
//連結
[UMSocialData defaultData].extConfig.qqData.url = model.shareURL;
[UMSocialData defaultData].extConfig.wechatSessionData.url = model.shareURL;
[UMSocialData defaultData].extConfig.wechatTimelineData.url = model.shareURL;
[UMSocialData defaultData].extConfig.qzoneData.url = model.shareURL;
[UMSocialSnsService presentSnsIconSheetView:self
appKey:UM_APPKEY
shareText:[NSString stringWithFormat:@"%@ %@",model.shareText,model.shareURL]
shareImage:image
shareToSnsNames:@[UMShareToQzone,UMShareToQQ,UMShareToWechatSession,UMShareToWechatTimeline,UMShareToSina]
delegate:self];
}
今天居然又遇到了個深坑 在專案中,需要分享視訊,分享圖片,分享圖連結 1.分享圖文連結 ,下面只是Q分享的程式碼,用的是友盟預設的分享檢視
<span style="font-size:14px;">UMSocialUrlResource * urlResource = [[UMSocialUrlResource alloc]initWithSnsResourceType:UMSocialUrlResourceTypeImage url:model.shareImage];</span><pre name="code" class="objc">[UMSocialData defaultData].extConfig.qqData.title = model.shareTitle;
[UMSocialData defaultData].extConfig.qqData.shareText = model.shareText;
[UMSocialData defaultData].extConfig.qqData.url = model.shareURL;
[UMSocialData defaultData].extConfig.qqData.urlResource= urlResource;<pre name="code" class="objc">[UMSocialSnsService presentSnsIconSheetView:self
appKey:UM_APPKEY
shareText:nil
shareImage:nil
shareToSnsNames:@[UMShareToWechatSession,UMShareToWechatTimeline,UMShareToQQ,UMShareToQzone,UMShareToSina]
delegate:self];
2.分享視訊(橫屏時,用的是自定義的分享檢視)
錯誤程式碼
UMSocialUrlResource * resourec = [UMSocialData defaultData].urlResource;
[resourec setResourceType:UMSocialUrlResourceTypeVideo url:model.videoUrl];
[[UMSocialDataService defaultDataService] postSNSWithTypes:@[type] content:model.title image:nil location:nil urlResource:resourec presentedController:nil completion:^(UMSocialResponseEntity *response){
if (response.responseCode == UMSResponseCodeSuccess) {
NSLog(@"分享成功!");
}
}];
正確程式碼(注:必須重新設定urlResource,否則分享的型別會亂,雖然分享的是視訊,但是連結可能是圖片,或者是一個網頁連結)
UMSocialUrlResource * resourec = [UMSocialData defaultData].urlResource;
[resourec setResourceType:UMSocialUrlResourceTypeVideo url:model.videoUrl];
[UMSocialData defaultData].extConfig.wechatSessionData.urlResource = resourec;
[UMSocialData defaultData].extConfig.sinaData.urlResource = resourec;
[UMSocialData defaultData].extConfig.sinaData.shareText = [NSString stringWithFormat:@"%@%@",model.title,model.videoUrl];
[UMSocialData defaultData].extConfig.wechatTimelineData.urlResource = resourec;
[UMSocialData defaultData].extConfig.qqData.urlResource = resourec;
[UMSocialData defaultData].extConfig.qzoneData.urlResource = resourec;
[[UMSocialDataService defaultDataService] postSNSWithTypes:@[type] content:model.title image:nil location:nil urlResource:resourec presentedController:nil completion:^(UMSocialResponseEntity *response){
if (response.responseCode == UMSResponseCodeSuccess) {
NSLog(@"分享成功!");
}
}];
3.分享圖片
錯誤程式碼 (注:必須重新設定urlResource,否則分享的型別會亂,分享的結果可能是個圖文連結,也可能是個視訊)
UMSocialUrlResource * resourec = [UMSocialData defaultData].urlResource;
[resourec setResourceType:UMSocialUrlResourceTypeImage url:nil];
[[UMSocialDataService defaultDataService] postSNSWithTypes:@[type] content:nil image:image location:nil urlResource:nil presentedController:nil completion:^(UMSocialResponseEntity *response){
if (response.responseCode == UMSResponseCodeSuccess) {
NSLog(@"分享成功!");
}
}];
正確程式碼
UMSocialUrlResource * resourec = [UMSocialData defaultData].urlResource;
[resourec setResourceType:UMSocialUrlResourceTypeImage url:nil];
[UMSocialData defaultData].extConfig.wechatSessionData.urlResource = resourec;
[UMSocialData defaultData].extConfig.sinaData.urlResource = resourec;
[UMSocialData defaultData].extConfig.sinaData.shareText = @"浦東新聞臺";
[UMSocialData defaultData].extConfig.wechatTimelineData.urlResource = resourec;
[UMSocialData defaultData].extConfig.qqData.urlResource = resourec;
[UMSocialData defaultData].extConfig.qzoneData.urlResource = resourec;
[[UMSocialDataService defaultDataService] postSNSWithTypes:@[type] content:nil image:image location:nil urlResource:nil presentedController:nil completion:^(UMSocialResponseEntity *response){
if (response.responseCode == UMSResponseCodeSuccess) {
NSLog(@"分享成功!");
}
}];
注:如果專案中同時出現多種分享型別的話,分享的時候都需要去設定urlSource