1. 程式人生 > >友盟分享遇到的坑

友盟分享遇到的坑

最近做分享功能,用了友盟分享,遇到了很多坑(以前都沒有遇到過),所以就分享了一下 之前做的分享,大都是分享的都是本地的圖片,加上標題,內容 現在這個專案要求分享從伺服器獲得的圖片, 下面是友盟分享的程式碼,利用預設的分享介面
[UMSocialSnsService presentSnsIconSheetView:self
                                         appKey:UM_APPKEY
                                      shareText:[NSString stringWithFormat:@"%@ %@",shareText,shareURL]
                                     shareImage:image
                                shareToSnsNames:@[UMShareToQzone,UMShareToQQ,UMShareToWechatSession,UMShareToWechatTimeline,UMShareToSina]
                                       delegate:self];
第一個引數:在哪個Controller上新增分享介面 第二個引數:友盟的APPKey 第三個引數:分享的文字(如果要分享的新浪微博的話,需要把分享的連結載入分享的內容後面,上面的程式碼就是) 第四個引數:你要分享的圖片(UIImage型別或者NSData型別,我都用UIImage型別) 第五個引數:你所要分享的平臺(順序自定,預設的分享介面會根據該資料的順序排序) 第六個引數:代理,self 分享伺服器上的資料:連結,圖片,標題,內容 1.把圖片轉換為NSData型別,然後再把NSData型別轉換為UIImage型別
NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:shareImage]];
UIImage * image = [UIImage imageWithData:data];
2.最好記得設定一個預設圖片
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