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

标签: Umeng U-Share 封装
30人阅读 评论(0) 收藏 举报
分类:

对友盟分享(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 的对应分享的部分功能,如有需要请更加文档自行定制。
如果您能读到点这里我非常感谢。

查看评论

友盟分享到QQ时,能分享成功,但是回调方法中只走到onStart()

今天在做友盟分享的时候遇到了一个奇怪的问题,分享到微信和朋友圈的时候 友盟分享的回调方法都可以打印出来,只有分享到QQ的时候,可以把内容分享到QQ第三方去,但是友盟的分享回调监听中 只走了onSt...
  • lgj860123
  • lgj860123
  • 2018-03-21 14:52:40
  • 12

Android中友盟第三方登录与分享自动集成的那些坑

自动集成的方式现在只支持微信,QQ,新浪三个平台,如果需要使用其它平台请选择手动集成。1:添加依赖   compile 'com.umeng.sdk:share-core:latest.integra...
  • apro_wang
  • apro_wang
  • 2018-04-13 10:28:29
  • 290

java.lang.NoClassDefFoundError: com.umeng.analytics.MobclickAgent 解决方法

原文地址:  http://www.186info.com/?p=224  android系统启动的时候报错java.lang.NoClassDefFoundError: com.umeng.an...
  • binyao02123202
  • binyao02123202
  • 2013-08-08 21:31:47
  • 10116

友盟第三方工具类

第一步:    将事先准备好的文件lib 于 res文件 直接复制进项目。    导入依赖 compile 'com.umeng.sdk:common:latest.integration' ...
  • a821265960
  • a821265960
  • 2018-03-21 10:44:20
  • 108

友盟,简单分享

准备: 1、在清单文件的Application中注册;
  • Melect
  • Melect
  • 2018-03-20 12:07:19
  • 114

动画,QQ登录,recycleview展示,fenxiang

///Myabapter             recycleview展示及点击条目进入web页面 package com.example.com.yuemoni.Abapter; impo...
  • weiyangmeng
  • weiyangmeng
  • 2018-04-06 19:43:16
  • 21

Android 3分钟实现多渠道打包签名

本文说明: 由于近期线上项目进行了重构,在项目打包签名上传到Android市场是遇到了问题,这里就和大家分享一下经验,同时也是本人第一次对项目进行重构。首先,我们要明白一个App的发布流程有哪些步骤,...
  • qq_35876753
  • qq_35876753
  • 2018-03-12 21:16:35
  • 58

对友盟分享的封装

对友盟分享的封装友盟分享比较繁琐,要导入各种包,各种图片资源,小编觉得这样做太累就把友盟需要的必要文件封装成aar文件,方便以后的使用,注意(aar文件适用于android studio),还没从ec...
  • u012927188
  • u012927188
  • 2016-06-24 18:24:44
  • 1606

项目实战:封装友盟,数据化监控应用

《从理论到实践,埋点专车费用明细模块》在简书首页、人人都是产品经理等各大媒体取得了不错的反响。正所谓授人以鱼不如授人以渔。今天我们从代码层面进行埋点实现,引入友盟并进行封装,然后视具体规划埋点,数据化...
  • hxqneuq2012
  • hxqneuq2012
  • 2017-06-01 16:58:09
  • 236

友盟第三方登录分享解析等

欢迎页面动画  activity-welcome xml version="1.0" encoding="utf-8"?> LinearLayout xmlns:android="h...
  • ch5211314
  • ch5211314
  • 2018-04-06 15:08:40
  • 26
    个人资料
    等级:
    访问量: 620
    积分: 73
    排名: 160万+
    文章分类
    文章存档