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

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

引言

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

??话不多言,看看代码吧。

封装主要完成几部

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

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

    这部分是对友盟分享的关键封装,定制了 文本字、图片、网页 三种分享,分钟分享有固定的参数形式。

  3. 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;
  4. 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

原文地址:https://www.cnblogs.com/ting-miao/p/9213821.html

时间: 2024-11-05 01:35:41

对友盟分享(Umeng-Share)的功能封装的相关文章

iOS之友盟分享

http://dev.umeng.com/social/ios/share/quick-integration 注意:苹果审核政策需求,建议对未安装的客户端平台进行隐藏,在设置QQ.微信Appid之后调用方法: [UMSocialConfig hiddenNotInstallPlatforms:@[UMShareToQQ, UMShareToQzone, UMShareToWechatSession, UMShareToWechatTimeline]]; 这个接口只对默认分享平面平台有隐藏功能,

友盟分享--集成QQ和微信

随着社交工具的应用范围越来越广,分享一些内容的功能也开始要求实现了. 用得比较多的第三方,比如说友盟,比如说Share等等... 前几天刚用友盟写了集成QQ和微信客户端的功能,觉得有必要分享一下. 在这之前,你需要有一个友盟的appkey...(木有的可去注册),并下载你所要的SDK: #import "UMSocial.h" //设置友盟分享社会化组件appkey    [UMSocialData setAppKey:UM_appkey]; 先说集成QQ的吧: 首先,在UMSocia

Android 友盟分享详细集成过程及所遇问题解决

最近项目需要针对微信.朋友圈.QQ.QQ空间集成友盟分享的功能,说实话,我也是第一次做,期间碰到过很多问题,这篇随笔就来写一下我是怎么集成友盟分享的,还有碰到哪些问题,都是怎样解决的! 其实集成友盟并不是很难,跟着集成文档一步一步走下来就可以,而且下载的友盟SDK会附带Demo,但是Demo中有很多东西是用不上的,所以就需要我们选择性的摘取有用的部分! 如需转载请注明出处:http://www.cnblogs.com/upwgh/p/6382085.html 1-获取友盟Appkey 如果你之前

phoneGap在iOS上的简单使用:自定义实现友盟分享插件

说明:本插件仅针对个人当前项目,参照支付宝支付插件类进行开发,不保证对任何项目都具有通用性,代码仅供参考. 找到项目中的config.xml文件,在相似位置插入如下代码: <feature name="UM_SharePlugin"> <param name="ios-package" value="UM_SharePlugin"/> </feature> 具体插件类代码如下: // // UM_SharePl

关于友盟分享

友盟分享不单单是申请友盟分享的key就行了,在进行qq.微信的分享时还需要再额外申请key才行. 以下是官方给出的使用具体操作方法: 由于苹果审核政策需求,建议大家对未安装客户端平台进行隐藏,在设置QQ.微信AppID之后调用下面的方法,[UMSocialConfig hiddenNotInstallPlatforms:@[UMShareToQQ, UMShareToQzone, UMShareToWechatsession, UMShareToWechatTimeline]]; 1.  分享流

IOS 集成友盟分享

#import <Foundation/Foundation.h> @interface UMSocialSinaHandler : NSObject +(void)openSSOWithRedirectURL:(NSString *)redirectURL; @end #import "AppDelegate.h" #import "UMSocial.h" #import "UMSocialSinaHandler.h" @inter

友盟分享(微信分享,微博分享,Facebook分享)

最近写了友盟分享,已经完全实现了,从最一开始的申请APPID到最后分享成功,跟大家细致的分享一下,希望对读者有帮住 一.  分享流程介绍 1.下载友盟分享的SDK并导入 需要注意的是要导入很多头文件:(具体步骤移步:http://dev.umeng.com/social/ios/quick-integration) Security.framework libiconv.dylib SystemConfiguration.framework CoreGraphics.Framework libs

iOS开发-友盟分享(3)

iOS 友盟分享 这个主要是提到如何通过友盟去自定义分享的步骤: 一.肯定要去友盟官网下载最新的SDK包,然后将SDK导入到你的工程文件夹里面去: 二.注册友盟账号,将你的APP添加到你的账号里面然后获取到一个Key; 三.  在AppDelegate内设置友盟AppKey -(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [UM

友盟分享Demo

友盟分享SDK下载及官方文档 http://dev.umeng.com/social/ios/detail-share 1.注册应用获取App友盟Appkey(556d14ad67e58eb084003fed) 2.下载SDK并导入工程内 3.添加库文件 /友盟分享 注意添加类库 libz.1.1.3.dylib libstdc++.dylib /** 需添加类库 Security.framework libiconv.dylib SystemConfiguration.framework Co