友盟集成(十四) —— 分享的工程實(shí)踐(一)

版本記錄

版本號 時間
V1.0 2018.06.22

前言

相信很多人用過友盟瞧挤,包括友盟的第三方登錄锡宋、分享以及統(tǒng)計(jì)。這里我們就分幾個模塊進(jìn)行詳細(xì)的說明 —— 移動統(tǒng)計(jì)(U - App)特恬、網(wǎng)站統(tǒng)計(jì)(U - Web)执俩、消息推送(U - Push)、社會化分享(U - Share)癌刽、游戲統(tǒng)計(jì)(U - Game)役首、互聯(lián)網(wǎng)運(yùn)營數(shù)據(jù)服務(wù)(Dplus) - 多維度、一站式显拜、精細(xì)化數(shù)據(jù)管理服務(wù)衡奥。感興趣的可以看上面幾篇。
1. 友盟集成(一) —— UShare模塊之快速集成(一)
2. 友盟集成(二) —— UShare模塊之快速集成(二)
3. 友盟集成(三) —— UShare模塊之第三方登錄(一)
4. 友盟集成(四) —— UShare模塊之進(jìn)階說明之第三方平臺SDK說明(一)
5. 友盟集成(五) —— UShare模塊之進(jìn)階說明之分享到第三方平臺(二)
6. 友盟集成(六) —— UShare模塊之進(jìn)階說明之分享面板UI(三)
7. 友盟集成(七) —— UShare模塊之進(jìn)階說明之自定義平臺(四)
8. 友盟集成(八) —— UShare模塊之進(jìn)階說明之U-Share API說明(五)
9. 友盟集成(九) —— UShare模塊之UShare常見問題 (六)
10. 友盟集成(十) —— UShare模塊之UShare日志說明 (七)
11. 友盟集成(十一) —— 幾個遇到的坑之QQ授權(quán)名稱的設(shè)置(一)
12. 友盟集成(十二) —— 幾個遇到的坑之HTTP分享到微博失斣盾(二)
13. 友盟集成(十三) —— 幾個遇到的坑之分享到QQ不顯示縮略圖(三)

分享界面的搭建

這個分享設(shè)計(jì)圖如下所示:

這個其實(shí)沒什么好說的矮固,就簡單的說幾點(diǎn)吧。

  • 定義一個單獨(dú)的View類JJShareMenuView譬淳,并設(shè)置代理到直播間VC中档址。
  • 盡量用xib少用純代碼方式,因?yàn)閤ib更加直觀而且在類中的代碼會很少邻梆,看著更加清爽守伸。
  • 別忘記配置白名單,因?yàn)閕OS9以后就已經(jīng)要求這么做了浦妄。
  • 別忘記配置URL scheme尼摹,在Info - URL Types,這個不同平臺配置方式不同校辩,具體怎么配置窘问,在三方登錄的時候已經(jīng)說過了。

視圖層次沒什么好說的宜咒,就這些吧惠赫。


模型的創(chuàng)建

在分享前我們需要從服務(wù)端拉取數(shù)據(jù),拉取數(shù)據(jù)以后需要轉(zhuǎn)化為我們客戶端分享需要的數(shù)據(jù)類型故黑。

這里新建一個類JJShareModel儿咱,在這里面進(jìn)行數(shù)據(jù)轉(zhuǎn)換,轉(zhuǎn)換后的數(shù)據(jù)就是待分享的數(shù)據(jù)场晶。

#import <Foundation/Foundation.h>

@interface JJShareModel : NSObject

@property (nonatomic, copy) NSString *urlStr;
@property (nonatomic, copy) NSString *titleStr;
@property (nonatomic, copy) NSString *descStr;
@property (nonatomic, copy) NSString *text;              //對于純文本文本不能為空混埠,否則失敗
@property (nonatomic, copy) NSString *imageStr;
@property (nonatomic, copy) NSString *thumbImageStr;
@property (nonatomic, assign) BOOL isSwitchOn;

- (instancetype)initWithDict:(NSDictionary *)dict feed:(JJFeed *)feed;

@end

具體實(shí)現(xiàn)就不多說了,就是將傳入的字典以及直播間的Feed流通過處理為該類的屬性賦值诗轻,獲取對應(yīng)的待分享數(shù)據(jù)钳宪。


開始分享

這里采用一個單例,管理分享和友盟之間的對接,以及從自己的服務(wù)端下載數(shù)據(jù)吏颖。

首先根據(jù)不同分享類型搔体,構(gòu)建出不同的分享數(shù)據(jù)。

// 獲取messageObject對象
- (UMSocialMessageObject *)gainMessageObjectWithType:(UMSocialPlatformType)platformType model:(JJShareModel *)shareModel shareType:(JJShareToolType)shareType
{
    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
    messageObject.text = shareModel.text;
    messageObject.title = shareModel.titleStr;
    
    switch (shareType) {

        // 純文本分享
        case JJShareToolType_Text:
        {
            messageObject.text = shareModel.text;
        }
            break;

        // 分享圖片
        case JJShareToolType_Image:
        {
            UMShareImageObject *shareObject = [[UMShareImageObject alloc] init];
            shareObject.thumbImage = _To_Str(shareModel.thumbImageStr);
            [shareObject setShareImage:shareModel.imageStr];
            // notice:非https的不能分享圖片半醉,受三方和蘋果政策
//            shareObject.thumbImage = @"https://thirdqq.qlogo.cn/qqapp/101477482/214274B4C4204F99A8813FBF36C4504B/40";
//            [shareObject setShareImage:@"https://thirdqq.qlogo.cn/qqapp/101477482/214274B4C4204F99A8813FBF36C4504B/40"];

            messageObject.shareObject = shareObject;
        }
            break;

        // 分享圖文 只有新浪支持疚俱,微信/QQ僅支持圖或文本分享
        case JJShareToolType_ImageAndText:
        {
            UMShareImageObject *shareObject = [[UMShareImageObject alloc] init];
            shareObject.thumbImage = _To_Str(shareModel.thumbImageStr);
            [shareObject setShareImage:_To_Str(shareModel.imageStr)];

            messageObject.shareObject = shareObject;
        }
            break;

        // Web鏈接,主流的都支持這個類型
        case JJShareToolType_Web:
        {
            UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:shareModel.titleStr descr:shareModel.descStr thumImage:shareModel.thumbImageStr];
            shareObject.webpageUrl = shareModel.urlStr;

            messageObject.shareObject = shareObject;
        }
            break;

        // 音樂鏈接缩多,主流的都支持這種類型
        case JJShareToolType_Music:
        {
            UMShareMusicObject *shareObject = [UMShareMusicObject shareObjectWithTitle:shareModel.titleStr descr:shareModel.descStr thumImage:shareModel.thumbImageStr];
            shareObject.musicUrl = shareModel.urlStr;

            messageObject.shareObject = shareObject;
        }
            break;

        // 視頻鏈接呆奕,主流的都支持這種類型
        case JJShareToolType_Video:
        {
            UMShareVideoObject *shareObject = [UMShareVideoObject shareObjectWithTitle:shareModel.titleStr descr:shareModel.descStr thumImage:shareModel.thumbImageStr];
            shareObject.videoUrl = shareModel.urlStr;

            messageObject.shareObject = shareObject;
        }
            break;

        default:
            break;
    }
    return messageObject;
}

接著,調(diào)用友盟的方法衬吆,進(jìn)行分享

// 總的方法梁钾,根據(jù)分享平臺、類型以及數(shù)據(jù)模型進(jìn)行分享
- (void)shareToPlatformWithType:(JJSharePlatformType)platformType model:(JJShareModel *)shareModel shareType:(JJShareToolType)shareType
{
    UMSocialPlatformType umPlatformType = [self convertMyTypeToUMPlatformType:platformType];
    
    if (umPlatformType == UMSocialPlatformType_UnKnown || shareModel == nil || shareType == JJShareToolType_Unknown) {
        return;
    }

    UMSocialMessageObject *messageObject = [self gainMessageObjectWithType:umPlatformType model:shareModel shareType:shareType];
    
    //調(diào)用分享接口
    [[UMSocialManager defaultManager] shareToPlatform:umPlatformType messageObject:messageObject currentViewController:nil completion:^(id data, NSError *error) {
        if (error) {
            [[NSNotificationCenter defaultCenter] postNotificationName:kNotification_ShareFailure object:nil];
            [JJToastManager showToast:@"分享失敗"];
        }
        else{
            [[NSNotificationCenter defaultCenter] postNotificationName:kNotification_ShareSuccess object:nil];
            [JJToastManager showToast:@"分享成功"];
        }
    }];
}

幾個分享中遇到的問題

  1. 解決連續(xù)按鍵分享卡死問題

這里有一個情景就是連續(xù)點(diǎn)擊分享面板進(jìn)行分享逊抡,這個是不應(yīng)該這么做的陈轿,正確的做法應(yīng)該是點(diǎn)一個平臺進(jìn)行分享,在獲取分享成功還是失敗之前是不應(yīng)該去響應(yīng)再次的點(diǎn)擊的秦忿。

這里是在直播間控制器維護(hù)一個BOOL屬性值。

@property (nonatomic, assign) BOOL isShareing;

在分享的代理方法中蛾娶,加上這段代碼

if (self.isShareing == YES) {
    return;
}
self.isShareing = YES;

然后接受分享成功或者失敗的通知灯谣,在通知方法里面重置狀態(tài)

//分享成功
- (void)shareSuccessNotification
{
    self.isShareing = NO;
}

//分享失敗
- (void)shareFailureNotification
{
    self.isShareing = NO;
}

這就可以了嗎,不可以蛔琅,有的時候我們會按Home鍵從QQ等平臺回到我們的APP這時候沒有重置狀態(tài)isShareing還是YES胎许,這樣我們就沒辦法進(jìn)行第二次分享了。

所以要在下面這個方法中重置狀態(tài)

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onApplicationNotification:) name:UIApplicationDidBecomeActiveNotification object:nil];

- (void)onApplicationNotification:(NSNotification *)notify 
{    
    if(notify.name == UIApplicationDidBecomeActiveNotification) {
        self.isShareing = NO;
    }
}

后記

本篇主要講述了分享的工程實(shí)現(xiàn)以及遇到的幾個問題罗售,感興趣的給個贊或者關(guān)注~~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辜窑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寨躁,更是在濱河造成了極大的恐慌穆碎,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件职恳,死亡現(xiàn)場離奇詭異所禀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)放钦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門色徘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人操禀,你說我怎么就攤上這事褂策。” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵斤寂,是天一觀的道長耿焊。 經(jīng)常有香客問我,道長扬蕊,這世上最難降的妖魔是什么搀别? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮尾抑,結(jié)果婚禮上歇父,老公的妹妹穿的比我還像新娘。我一直安慰自己再愈,他們只是感情好榜苫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翎冲,像睡著了一般垂睬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抗悍,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天驹饺,我揣著相機(jī)與錄音,去河邊找鬼缴渊。 笑死赏壹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衔沼。 我是一名探鬼主播蝌借,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼指蚁!你這毒婦竟也來了菩佑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤凝化,失蹤者是張志新(化名)和其女友劉穎稍坯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缘圈,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劣光,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了糟把。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绢涡。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖遣疯,靈堂內(nèi)的尸體忽然破棺而出雄可,到底是詐尸還是另有隱情凿傅,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布数苫,位于F島的核電站聪舒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏虐急。R本人自食惡果不足惜箱残,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望止吁。 院中可真熱鬧被辑,春花似錦、人聲如沸敬惦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俄删。三九已至宏怔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畴椰,已是汗流浹背臊诊。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斜脂,地道東北人妨猩。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像秽褒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子威兜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容