友盟集成(八) —— UShare模块之进阶说明之U-Share API说明(五)

版本记录

版本号 时间
V1.0 2018.04.05

前言

相信很多人用过友盟,包括友盟的第三方登录、分享以及统计。这里我们就分几个模块进行详细的说明 —— 移动统计(U - App)、网站统计(U - Web)、消息推送(U - Push)、社会化分享(U - Share)、游戏统计(U - Game)、互联网运营数据服务(Dplus) - 多维度、一站式、精细化数据管理服务。感兴趣的可以看上面几篇。
1. 友盟集成(一) —— UShare模块之快速集成(一)
2. 友盟集成(二) —— UShare模块之快速集成(二)
3. 友盟集成(三) —— UShare模块之第三方登录(一)
4. 友盟集成(四) —— UShare模块之进阶说明之第三方平台SDK说明(一)
5. 友盟集成(五) —— UShare模块之进阶说明之分享到第三方平台(二)
6. 友盟集成(六) —— UShare模块之进阶说明之分享面板UI(三)
7. 友盟集成(七) —— UShare模块之进阶说明之自定义平台(四)

U-Share API说明

1. 引用头文件

#import <UMShare/UMShare.h>

2. 接口类UMSocialManager

获取类实例

[UMSocialManager defaultManager]

打开日志

/**
 *  打开日志
 *
 *  @param isOpen YES代表打开,No代表关闭
 */
- (void)openLog:(BOOL)isOpen;

设置平台的appkey

/**
 *  设置平台的appkey
 *
 *  @param platformType 平台类型 @see UMSocialPlatformType
 *  @param appKey       appKey 
 *  @param appSecret    appSecret (有些平台没有,可以不传)
 *  @param redirectURL  redirectURL (回调地址)
 */
- (BOOL)setPlaform:(UMSocialPlatformType)platformType
            appKey:(NSString *)appKey
         appSecret:(NSString *)appSecret
       redirectURL:(NSString *)redirectURL;

分享接口

/**
 *  分享接口
 *
 *  @param platformType @see UMSocialPlatformType
 *  @param shareObject
 *  @param currentViewController 用于弹出类似邮件分享、短信分享等这样的系统页面
 *  @param completion   回调
 *  @discuss currentViewController 只正对sms,email等平台需要传入viewcontroller的平台,其他不需要的平台可以传入nil
 */
- (void)shareToPlatform:(UMSocialPlatformType)platformType
          messageObject:(UMSocialMessageObject *)messageObject
  currentViewController:(id)currentViewController
             completion:(UMSocialRequestCompletionHandler)completion;

授权并获取用户信息接口

/**
 *  授权并获取用户信息
 *  @param currentViewController 用于弹出类似邮件分享、短信分享等这样的系统页面
 *  @param completion   回调
 */
- (void)getUserInfoWithPlatform:(UMSocialPlatformType)platformType
          currentViewController:(id)currentViewController
                     completion:(UMSocialRequestCompletionHandler)completion;
/**
 *  获得从sso或者web端回调到本app的回调
 *
 *  @param url 第三方sdk的打开本app的回调的url
 *
 *  @return 是否处理  YES代表处理成功,NO代表不处理
 */
-(BOOL)handleOpenURL:(NSURL *)url;
/**
 *  动态的增加用户自定义的PlatformProvider
 *
 *  @param userDefinePlatformProvider 用户自定义的userDefinePlatformProvider必须实现UMSocialPlatformProvider
 *  @param platformType               @see platformType platformType的有效范围在 (UMSocialPlatformType_UserDefine_Begin,UMSocialPlatformType_UserDefine_End)之间
 *
 *  @return YES代表返回成功,NO代表失败
 *  @disuss 在调用此函数前,必须先设置对应的平台的配置信息 @see - (BOOL)setPlaform:(UMSocialPlatformType)platformType appKey:(NSString *)appKey appSecret:(NSString *)appSecret redirectURL:(NSString *)redirectURL;
 */
-(BOOL)addAddUserDefinePlatformProvider:(id<UMSocialPlatformProvider>)userDefinePlatformProvider
             withUserDefinePlatformType:(UMSocialPlatformType)platformType;

取消授权接口

/**
 *  取消授权
 *
 *  @param platformType @see UMSocialPlatformType
 *  @param completion   回调
 */
- (void)cancelAuthWithPlatform:(UMSocialPlatformType)platformType
                    completion:(UMSocialRequestCompletionHandler)completion;

判断平台是否安装

/**
 *  平台是否安装
 *
 *  @param platformType 平台类型 @see UMSocialPlatformType
 *
 *  @return YES 代表安装,NO 代表未安装
 *  @note 在判断QQ空间的App的时候,QQApi判断会出问题
 */
-(BOOL) isInstall:(UMSocialPlatformType)platformType;

动态的删除PlatformProvider,不管是预定义还是用户自定义的

/**
 *  动态的删除不想显示的平台,不管是预定义还是用户自定义的
 *
 *  @param platformTypeArray 平台类型数组
 */
-(void) removePlatformProviderWithPlatformTypes:(NSArray *)platformTypeArray;
/**
 *  动态的删除PlatformProvider,不管是预定义还是用户自定义的
 *
 *  @param platformType @see UMSocialPlatformType
 */
-(void) removePlatformProviderWithPlatformType:(UMSocialPlatformType)platformType;

/**
 *  获得对应的平台类型platformType的PlatformProvider
 *
 *  @param platformType @see platformType
 *
 *  @return 返回继承UMSocialPlatformProvider的handle
 */
-(id<UMSocialPlatformProvider>)platformProviderWithPlatformType:(UMSocialPlatformType)platformType;

3. 分享类数据结构

分享消息类UMSocialMessageObject

@interface UMSocialMessageObject : NSObject


/**
 * @param text 文本内容
 * @note 非纯文本分享文本
 */
@property (nonatomic, copy) NSString  *text;

/**
 * 分享的所媒体内容对象
 */
@property (nonatomic, strong) UMShareObject *shareObject;

/**
 * 其他相关参数,见相应平台说明
 */
@property (nonatomic, strong) NSDictionary *moreInfo;

+ (UMSocialMessageObject *)messageObject;

+ (UMSocialMessageObject *)messageObjectWithMediaObject:(id)mediaObject;


@end

基本分享类型UMShareObject

UMShareObject是所有多媒体内容的基类,多媒体内容包括图片、音乐、视频、网页等。纯文本分享不属于多媒体,只需要设置UMSocialMessageObject的text属性就可以。

@interface UMShareObject : NSObject
/**
 * 标题
 * @note 标题的长度依各个平台的要求而定
 */
@property (nonatomic, copy) NSString *title;

/**
 * 描述
 * @note 描述内容的长度依各个平台的要求而定
 */
@property (nonatomic, copy) NSString *descr;

/**
 * 缩略图 UIImage或者NSData类型或者NSString类型(图片url)
 */
@property (nonatomic, strong) id thumbImage;


/**
 * @param title 标题
 * @param descr 描述
 * @param thumImage 缩略图(UIImage或者NSData类型,或者image_url)
 *
 */
+ (id)shareObjectWithTitle:(NSString *)title
                     descr:(NSString *)descr
                 thumImage:(id)thumImage;
+ (void)um_imageDataWithImage:(id)image completion:(void (^)(NSData *image))completion;
@end

分享图片类(参考父类UMShareObject)

@interface UMShareImageObject : UMShareObject

/** 图片内容 (可以是UIImage类对象,也可以是NSdata类对象,也可以是图片链接imageUrl NSString类对象)
 * @note 图片大小根据各个平台限制而定
 */
@property (nonatomic, retain) id shareImage;

@end

分享音乐数据结构(参考父类UMShareObject)

@interface UMShareMusicObject : UMShareObject

/** 音乐网页的url地址
 * @note 长度不能超过10K
 */
@property (nonatomic, retain) NSString *musicUrl;
/** 音乐lowband网页的url地址
 * @note 长度不能超过10K
 */
@property (nonatomic, retain) NSString *musicLowBandUrl;
/** 音乐数据url地址
 * @note 长度不能超过10K
 */
@property (nonatomic, retain) NSString *musicDataUrl;

/**音乐lowband数据url地址
 * @note 长度不能超过10K
 */
@property (nonatomic, retain) NSString *musicLowBandDataUrl;

@end

分享视频数据结构(参考父类UMShareObject)

@interface UMShareVideoObject : UMShareObject

/**
 视频网页的url

 @warning 不能为空且长度不能超过255
 */
@property (nonatomic, strong) NSString *videoUrl;

/**
 视频lowband网页的url

 @warning 长度不能超过255
 */
@property (nonatomic, strong) NSString *videoLowBandUrl;

/**
 视频数据流url

 @warning 长度不能超过255
 */
@property (nonatomic, strong) NSString *videoStreamUrl;

/**
 视频lowband数据流url

 @warning 长度不能超过255
 */
@property (nonatomic, strong) NSString *videoLowBandStreamUrl;

@end

分享网页数据结构(参考父类UMShareObject)

@interface UMShareWebpageObject : UMShareObject

/** 网页的url地址
 * @note 不能为空且长度不能超过10K
 */
@property (nonatomic, retain) NSString *webpageUrl;

@end

邮件分享数据结构(参考父类UMShareObject)

/*! @brief 分享消息中的邮件分享对象
 *
 * @see UMShareObject
 */
@interface UMShareEmailObject : UMShareObject

/**
 * 接收人
 */
@property (nonatomic, strong) NSArray *toRecipients;

/**
 * 抄送人
 */
@property (nonatomic, strong) NSArray *ccRecipients;

/**
 * 密送人
 */
@property (nonatomic, strong) NSArray *bccRecipients;

/**
 * 文本内容
 */
@property (nonatomic, copy) NSString *emailContent;

/**
 * 图片
 */
@property (nonatomic, strong) id emailImage;

/**
 * 文件(NSData)
 */
@property (nonatomic, strong) NSData *emailSendData;

/**
 * 文件格式
 */
@property (nonatomic, copy) NSString *fileType;

/**
 * 文件名
 */
@property (nonatomic, copy) NSString *fileName;

@end

短信分享数据结构(参考父类UMShareObject)

/*! @brief 分享消息中的短信分享对象
 *
 * @see UMSocialMessageObject
 */
@interface UMShareSmsObject : UMShareObject

/**
 * 接收人
 */
@property (nonatomic, strong) NSArray *recipients;

/**
 * 文本内容
 */
@property (nonatomic, copy) NSString *smsContent;

/**
 * 图片
 */
@property (nonatomic, strong) id smsImage;

/**
 * 文件数据(NSData)
 */
@property (nonatomic, strong) NSData *smsSendData;

/**
 * 文件格式
 */
@property (nonatomic, copy) NSString *fileType;

/**
 * 文件名称
 */
@property (nonatomic, copy) NSString *fileName;

/**
 * 文件地址url
 */
@property (nonatomic, copy) NSString *fileUrl;

@end

分享微信小程序(参考父类UMShareObject)

@interface WXMiniProgramObject : NSObject

/*! @brief WXMiniProgramObject对象
 *
 * @note 返回的WXMiniProgramObject对象是自动释放的
 */
+(WXMiniProgramObject *) object;

@property (nonatomic, strong) NSString *webpageUrl; //低版本网页链接

@property (nonatomic, strong) NSString *userName;   //小程序username

@property (nonatomic, strong) NSString *path;       //小程序页面的路径

@end

4. 分享回调类

接口返回数据结构基类

@interface UMSocialResponse : NSObject

@property (nonatomic, copy) NSString  *uid;//用户id
@property (nonatomic, copy) NSString  *openid;//QQ,微信用户openid,其他平台没有
@property (nonatomic, copy) NSString  *refreshToken;//
@property (nonatomic, copy) NSDate    *expiration;//授权token(accessToken)过期时间
@property (nonatomic, copy) NSString  *accessToken;
@property (nonatomic, copy) NSString  *unionId;
/**
 usid 兼容U-Share 4.x/5.x 版本,与4/5版本数值相同
 即,对应微信平台:openId,QQ平台openId,其他平台不变
 */
@property (nonatomic, copy) NSString  *usid;

@property (nonatomic, assign) UMSocialPlatformType  platformType;//对应的平台类型
/**
 * 第三方原始数据
 */
@property (nonatomic, strong) id  originalResponse;

@end

分享结果数据结构

@interface UMSocialShareResponse : UMSocialResponse

@property (nonatomic, copy) NSString  *message;//分享结果提示信息

+ (UMSocialShareResponse *)shareResponseWithMessage:(NSString *)message;

@end

授权结果数据结构

@interface UMSocialAuthResponse : UMSocialResponse

@end

获取用户信息结果数据结构

@interface UMSocialUserInfoResponse : UMSocialResponse
/**
 第三方平台昵称
 */
@property (nonatomic, copy) NSString  *name;

/**
 第三方平台头像地址
 */
@property (nonatomic, copy) NSString  *iconurl;

/**
 通用平台性别属性
 QQ、微信、微博返回 "男", "女"
 Facebook返回 "male", "female"
 */
@property (nonatomic, copy) NSString  *unionGender;

@end

5. 全局配置类

第三方平台参数限制相关配置

U-Share增加了对分享类型的限制,比如对文本的截断,对图片的裁剪,以便用户能够不用考虑平台的限制而成功的分享出去。 目前主要对新浪、微信、QQ及Facebook和Twitter平台做了分享参数处理。

  • 配置类

其类别如下(请查看UMSocialHandler.h文件):

@interface UMSocialHandler (UMSocialLimit)

-(BOOL) checkText:(NSString*)text withTextLimit:(NSUInteger)textLimit;

-(BOOL) checkData:(NSData*)data withDataLimit:(NSUInteger)dataLimit;

-(NSString*)truncationText:(NSString*)text withTextLimit:(NSUInteger)textLimit;

-(NSData*)compressImageData:(NSData*)imageData withImageLimit:(NSUInteger)imageLimit;

@end

每个分享类型对应相关的分享配置类:

UMSocialShareTextObject ---> UMSocialShareTextObjectConfig

UMSocialShareImageObject ---> UMSocialShareImageObjectConfig

UMSocialShareMusicObject --->UMSocialShareMusicObjectConfig

UMSocialShareVideoObject ---> UMSocialShareVideoObjectConfig

UMSocialShareWebpageObject ---> UMSocialShareVideoObjectConfig

UMSocialShareEmailObject ---> UMSocialShareEmailObjectConfig

UMSocialShareSmsObject ---> UMSocialShareSmsObjectConfig

UMSocialShareEmotionObject ---> UMSocialShareEmotionObjectConfig

UMSocialShareFileObject ---> UMSocialShareFileObjectConfig
  • 操作设置

增加了UMSocialGlobal的全局设置字段 :

thumblr_Tag thumblr平台需要作为标示的字段 tag。

isTruncateShareText对平台的分享文本的时候,做规定的截断,默认开启。

简言之,开发者可以通过调用[UMSocialGlobal shareInstance].isTruncateShareText = NO; 设置不进行文本截断等额外处理,但在文本过长时会收到第三方平台SDK返回的错误。

isUsingHttpsWhenShareContent当前网络请求是否用https

1)针对ios9系统以后强制使用https的网络请求,针对分享的网络图片都必须是https的网络图片(此为苹果官方要求)。
2)该函数默认开启https请求。
3)如果开启ios9的请求后,自动会过滤ios的http的请求,并返回错误。

isClearCacheWhenGetUserInfo 是否清除缓存在获得用户资料的时候,此需求存在用户切换账号的时候,获得用户信息的时候用缓存的数据申请导致用户信息错误。

1)默认设置为YES,代表请求用户的时候需要请求缓存.

NO,代表不清除缓存,用缓存的数据请求用户数据。

isUsingWaterMark 是否分享图片的时候,加入水印功能。如果开启的话,可以通过图片的水印配置类warterMarkConfig来配置水印。

目前水印只提供图片水印功能。 设置图片水印的配置类为:

1)UMSocialWarterMarkConfig 水印配置类,方便以后扩展其他的水印形式。
2)UMSocialImageWarterMarkConfig 图片配置类。

用户可以通过以下两种方式来配置用户自定义的水印

1)如果用户用默认的参数,只想换水印图片的情况。

可以直接把路径 UMSocialSDKResources.bundle/UMSocialWaterMark/umsocial_defaultwatermark.png 下的图片换成自己的水印图片。

注意图片的名字和后缀必须一样

step2: 在分享前设置开启水印。

[UMSocialGlobal shareInstance].isUsingWaterMark = YES;

1)如果用户用自己自定义的参数和水印图片的情况。

step1: 在分享前设置开启水印。

 [UMSocialGlobal shareInstance].isUsingWaterMark = YES;

step2:创建配置水印类,并赋值给warterMarkConfig

//创建图片水印配置类
    UMSocialImageWarterMarkConfig* imageWarterMarkConfig= [[UMSocialImageWarterMarkConfig alloc] init];
    imageWarterMarkConfig.warterMarkImage = [UIImage imageNamed:@"auth_icon"];
    imageWarterMarkConfig.warterMarkImageAlpha = 0.7;
    imageWarterMarkConfig.warterMarkImageScale = 0.4;
    imageWarterMarkConfig.paddingToHorizontalParentBorder = 20;
    imageWarterMarkConfig.paddingToVerticalParentBorder = 20;

    //创建水印配置类
    UMSocialWarterMarkConfig* warterMarkConfig = [[UMSocialWarterMarkConfig alloc] init];
    warterMarkConfig.stringAndImageWarterMarkPositon = UMSocialOnlyImageWarterMarkTopRight;
    [warterMarkConfig setUserDefinedImageWarterMarkConfig:imageWarterMarkConfig];

    //设置水印配置类
    [UMSocialGlobal shareInstance].warterMarkConfig = warterMarkConfig;

豆瓣、人人、腾讯微博授权编辑页面配置

#import <UMShare/UMSocialPlatformConfig.h>

/**
 * 云端授权/分享编辑页面配置类
 * 云端授权/分享页面目前适用于腾讯微博、豆瓣、人人的授权和分享编辑页面的自定义配置
 */
@interface UMSocialCloudViewConfig : NSObject

/**
 授权页面
 */
@property (nonatomic, strong) NSString *authViewTitle;
@property (nonatomic, strong) UIColor *authViewTitleColor;
@property( nonatomic, strong) UIColor *authViewNavBarColor;
// button仅需改动title或image即可,touch事件内部触发
@property (nonatomic, strong) UIButton *authViewCloseButton;

@property (nonatomic, strong) NSString *editViewTitle;
@property (nonatomic, strong) UIColor *editViewTitleColor;
@property( nonatomic, strong) UIColor *editViewNavBarColor;
// button仅需改动title或image即可,touch事件内部触发
@property (nonatomic, strong) UIButton *editViewCloseButton;
@property (nonatomic, strong) UIButton *editViewShareButton;

6. Kakao

授权并获取用户信息(获取uid、access token及用户名等)

// 在需要进行获取用户信息的UIViewController中加入如下代码

#import <UMShare/UMShare.h>

- (void)getAuthWithUserInfoFromKakao
{
    [[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_KakaoTalk currentViewController:nil completion:^(id result, NSError *error) {
        if (error) {

        } else {
            UMSocialUserInfoResponse *resp = result;

            // 授权信息
            NSLog(@"Kakao uid: %@", resp.uid);
            NSLog(@"Kakao accessToken: %@", resp.accessToken);
            NSLog(@"Kakao refreshToken: %@", resp.refreshToken);

            // 用户信息
            NSLog(@"Kakao name: %@", resp.name);
            NSLog(@"Kakao iconurl: %@", resp.iconurl);

            // 第三方平台SDK源数据
            NSLog(@"Kakao originalResponse: %@", resp.originalResponse);
        }
    }];
}

后记

本篇主要介绍了UShare模块之进阶说明之U-Share API说明,感兴趣的给个赞或者关注~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容