對友盟分享(Umeng-Share)的功能封裝

weixin_34308389發表於2018-04-17

對友盟分享(Umeng-Share)的功能封裝


引言

本文件針對友盟分享(6.9.0)進行了功能封裝,完成的對於 文字圖片網頁 分享功能封裝,如有其它封裝要求請根據本文件的封裝思路和友盟分享 api再進行功能封裝。
?話不多言,看看程式碼吧。

封裝主要完成幾部

  • Cocoapods 整合友盟分享 SDK
  • 配置SSO白名單
  • 配置URL Scheme
  • AppDelegate+UMeng
  • UmengEnclosed
2093550-8c0b531778aa0268.png
App + Umeng.png

Cocoapods 整合、白名單、URL Scheme

這部分太囉嗦,也沒有必要,需要的直接去官方文件查閱 U-Share整合文件

AppDelegate+UMeng

這裡是對 AppDelegate 做了一個 Category 分類處理,在 AppDelegate 中好區別去其他第三方平臺 SDK 註冊和配置來呼叫U-Share SDK 的呼叫。
這部分就不多說了,大家都懂,直接上程式碼。

  1. AppDelegate+UMeng.h

    #import "AppDelegate.h"
    
    @interface AppDelegate (UMeng)
    // 友盟系統配置和註冊
    - (BOOL)umengapplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
    // 設定系統回撥
    // 支援所有iOS系統
    - (BOOL)umengapplication:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
        
    // 僅支援iOS9以上系統,iOS8及以下系統不會回撥
    - (BOOL)umengapplication:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options;
        
    // 2.支援目前所有iOS系統
    - (BOOL)umengapplication:(UIApplication *)application handleOpenURL:(NSURL *)url;
    @end
    
  2. AppDelegate+UMeng.m
    此部分程式碼過多隻展示部分邏輯,有需要請到 GDMiao/UmengEnclosed 下載檢視。

    a. // 友盟系統配置和註冊

    // 友盟系統配置和註冊
    - (BOOL)umengapplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // UMConfigure 通用設定,請參考SDKs整合做統一初始化。
        [UMConfigure initWithAppkey:@"你的UMAPPKey" channel:@"App Store"];
        [UMConfigure setLogEnabled:YES];
        // U-Share 平臺設定
        [self configUSharePlatforms]; // 配置參考官方文件
        [self confitUShareSettings];  // 配置參考官方文件
        return YES; 
    }
    

    b. 系統回撥

    // 1.支援所有iOS系統
    - (BOOL)umengapplication:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        //6.3的新的API呼叫,是為了相容國外平臺(例如:新版facebookSDK,VK等)的呼叫[如果用6.2的api呼叫會沒有回撥],對國內平臺沒有影響
        BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];
        if (!result) {
            // 其他如支付等SDK的回撥
        }
        return result;
    }
    
    // 2.僅支援iOS9以上系統,iOS8及以下系統不會回撥
    - (BOOL)umengapplication:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
    {
        //6.3的新的API呼叫,是為了相容國外平臺(例如:新版facebookSDK,VK等)的呼叫[如果用6.2的api呼叫會沒有回撥],對國內平臺沒有影響
        BOOL result = [[UMSocialManager defaultManager]  handleOpenURL:url options:options];
        if (!result) {
            // 其他如支付等SDK的回撥
        }
        return result;
    }
    
    // 3.支援目前所有iOS系統
    - (BOOL)umengapplication:(UIApplication *)application handleOpenURL:(NSURL *)url
    {
         BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
         if (!result) {
            // 其他如支付等SDK的回撥
         }
         return result;
    }
    

UmengEnclosed

這部分是對友盟分享的關鍵封裝,定製了 文字字、圖片、網頁 三種分享,分鐘分享有固定的引數形式。

  1. UmengEnclosed.h

    #pragma mark -- 定製Text型別分享皮膚預定義平臺
    /**
    文字分享
     @param vc         分享方法呼叫的 Controller
     @param socialType 分享平臺選擇
     @param sharetype  分享型別選擇
     @param data       分享型別固定引數 data = @"text"
     */
    - (void)customTextShareWithVC:(id)vc SocialType:(SocialType)socialType shareType:(ShareType)sharetype textData:(id)data;
    
    #pragma mark -- 定製Image型別分享皮膚預定義平臺
    /**
     圖片分享
     @param vc         分享方法呼叫的 Controller
     @param socialType 分享平臺選擇
     @param sharetype  分享型別選擇
     @param data       分享型別固定引數 {"thumb":"thumbImgurl","original":@"originalImgurl"}
     */
    - (void)customImageShareWithVC:(id)vc SocialType:(SocialType)socialType shareType:(ShareType)sharetype imgUrlData:(id)data;
    
    #pragma mark -- 定製Web型別分享皮膚預定義平臺
    /**
     網頁分享
     @param vc         分享方法呼叫的 Controller
     @param socialType 分享平臺選擇
     @param sharetype  分享型別選擇
     @param data       分享型別固定引數 {"title":"","descr":"","weburl":@""}
     */
    - (void)customWebShareWithVC:(id)vc SocialType:(SocialType)socialType shareType:(ShareType)sharetype webData:(id)data;
    
  2. UmengEnclosed.m

    a. 此部分根據 SocialType 定製分享皮膚,根據ShareType定製分享方法,data 根骨分享方法配置引數。

    #pragma mark -- 定製自己的分享皮膚預定義平臺
    /**
     配置分享皮膚 和 分享型別
     @param vc         分享方法呼叫的 Controller
     @param socialType 分享平臺選擇
     @param sharetype  分享型別選擇
     @param data       分享型別引數
     */
    - (void)shareMenuViewWithVC:(id)vc SocialType:(SocialType)socialType ShareType:(ShareType)sharetype date:(id)data
    {
        _vc = vc;
        if (socialType == SType_sina_wx_qq) {
            [UMSocialUIManager setPreDefinePlatforms:@[@(UMSocialPlatformType_Sina),@(UMSocialPlatformType_WechatSession),@(UMSocialPlatformType_WechatTimeLine),@(UMSocialPlatformType_QQ),@(UMSocialPlatformType_Qzone)]];
        
        } else {
            //[UMSocialUIManager setPreDefinePlatforms:@[@(UMSocialPlatformType_Sina),@(UMSocialPlatformType_QQ),@(UMSocialPlatformType_WechatSession)]];
        }
        __weak typeof(self) weakself = self;
        
        [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
            // 根據獲取的platformType確定所選平臺進行下一步操作
            __strong typeof(self) strongself = weakself;
    
            switch (sharetype) {
                case ShareText:
                    [strongself shareTextToPlatformType:platformType date:data]; // 根據友盟文件定製方法
                    break;
                case SharePictures:
                    [strongself shareImageToPlatformType:platformType date:data];
                    break;
                case SharePicturesAndText_sina:
                    
                    break;
                case ShareWebPages:
                    [strongself shareWebPageToPlatformType:platformType date:data];
                    break;
                case ShareMusic:
                    
                    break;
                case ShareVideo:
                    
                    break;
                case ShareWeChatExpression:
                    
                    break;
                case ShareWeChatPrograms:
                    
                    break;
                default:
                    break;
            }
        }];
    }
    

    b. 分享文字

    // 分享文字
    - (void)shareTextToPlatformType:(UMSocialPlatformType)platformType date:(id)data
    {
        NSString *text = data;
        //建立分享訊息物件
        UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
        //設定文字
        messageObject.text = text;
        //呼叫分享介面
        [[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self.vc completion:^(id data, NSError *error) {
            if (error) {
                NSLog(@"************Share fail with error %@*********",error);
            }else{
                NSLog(@"response data is %@",data);
            }
        }];
    }
    

    c.呼叫文字分享定製方法

    /**
     文字分享
     @param vc         分享方法呼叫的 Controller
     @param socialType 分享平臺選擇
     @param sharetype  分享型別選擇
     @param data       分享型別固定引數 data = @"text"
     */
    - (void)customTextShareWithVC:(id)vc SocialType:(SocialType)socialType shareType:(ShareType)sharetype textData:(id)data
    {
        [self shareMenuViewWithVC:vc SocialType:socialType ShareType:sharetype date:data];
    }
    

    d.不一一舉例詳情請參考 GDMiao/UmengEnclosed 下載檢視。

具體呼叫

#import "UmengEnclosed.h"

- (IBAction)umengSharedAciton:(id)sender {
  UmengEnclosed *umeng = [UmengEnclosed sharedUmengEnclosed];
  [umeng customTextShareWithVC:self SocialType:SType_sina_wx_qq shareType:ShareText textData:@"OK"];
}

結語

本次封裝只定制我我方 APP 的對應分享的部分功能,如有需要請更加文件自行定製。
如果您能讀到點這裡我非常感謝。

相關文章