对友盟分享(Umeng-Share)的功能封装

对友盟分享(Umeng-Share)的功能封装


引言

本文档针对友盟分享(6.9.0)进行了功能封装,完成的对于 文字图片网页 分享功能封装,如有其它封装要求请根据本文档的封装思路和友盟分享 api再进行功能封装。
☺️话不多言,看看代码吧。

封装主要完成几部

  • Cocoapods 集成友盟分享 SDK
  • 配置SSO白名单
  • 配置URL Scheme
  • AppDelegate+UMeng
  • UmengEnclosed

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 的对应分享的部分功能,如有需要请更加文档自行定制。
如果您能读到点这里我非常感谢,希望给一颗鼓励的星星✨GDMiao/UmengEnclosed

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作者LiuYulei001,代码LYLShareManager。 简单封装友盟第三方平台分享功能; 首先下载友盟分享功能的SDK,并注册相关AppKey及第三方平台的AppKey; 然后按照友盟官网配置下工程,之后再使用此类; // 首先:配置第三方平台URL Scheme ->1->2->3->4 /** 1.打开日志 @param isOpen YES代表打开,No代表关闭 */ +(void)openLog:(BOOL)isOpen; /** 2.设置友盟AppKey @param UmSocialAppkey 友盟AppKey */ +(void)setUmSocialAppkey:(NSString *)UmSocialAppkey; /** 3.设置平台的appkey @param platform 平台类型 @see UMSocialPlatformType @param appKey 第三方平台的appKey(QQ平台为appID) @param appSecret 第三方平台的appSecret(QQ平台为appKey) @param redirectURL redirectURL */ +(BOOL)setPlatform:(UMSocialPlatformType)platform appKey:(NSString *)appKey appSecret:(NSString *)appSecret redirectURL:(NSString *)redirectURL; /** 4.获得从sso或者web端回调到本app的回调 << - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation >> @param URL 第三方sdk的打开本app的回调的url @return 是否处理 YES代表处理成功,NO代表不处理 */ +(BOOL)handleOpenURL:(NSURL *)URL; // 分享功能(适用自定义分享UI页面) /** 图文分享 @param platformType 平台类型 @see UMSocialPlatformType @param ContentText 文本(纯图可以为nil) @param thumbnail 缩略图 @param shareImage 分享图片 */ +(void)shareGraphicToPlatformType:(UMSocialPlatformType)platformType ContentText:(NSString *)ContentText thumbnail:(id)thumbnail shareImage:(id)shareImage success:(success)success failure:(failure)failure; /** 多媒体分享 @param platformType 平台类型 @see UMSocialPlatformType @param ShareContentType 分享多媒体类型 @see ShareContentType @param title 标题 @param contentDescription 分享描述 @param thumbnail 缩略图 @param url 内容网页地址 @param StreamUrl 数据流地址 */ +(void)shareMultimediaToPlatformType:(UMSocialPlatformType)platformType ShareContentType:(ShareContentType)ShareContentType title:(NSString *)title contentDescription:(NSString *)contentDescription thumbnail:(id)thumbnail url:(NSString *)url StreamUrl:(NSString *)StreamUrl success:(success)success failure:(failure)failure;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值