友盟集成(八) —— UShare模塊之進(jìn)階說明之U-Share API說明(五)

版本記錄

版本號 時間
V1.0 2018.04.05

前言

相信很多人用過友盟,包括友盟的第三方登錄、分享以及統(tǒng)計。這里我們就分幾個模塊進(jìn)行詳細(xì)的說明 —— 移動統(tǒng)計(U - App)、網(wǎng)站統(tǒng)計(U - Web)、消息推送(U - Push)、社會化分享(U - Share)、游戲統(tǒng)計(U - Game)、互聯(lián)網(wǎng)運營數(shù)據(jù)服務(wù)(Dplus) - 多維度、一站式、精細(xì)化數(shù)據(jù)管理服務(wù)。感興趣的可以看上面幾篇。
1. 友盟集成(一) —— UShare模塊之快速集成(一)
2. 友盟集成(二) —— UShare模塊之快速集成(二)
3. 友盟集成(三) —— UShare模塊之第三方登錄(一)
4. 友盟集成(四) —— UShare模塊之進(jìn)階說明之第三方平臺SDK說明(一)
5. 友盟集成(五) —— UShare模塊之進(jìn)階說明之分享到第三方平臺(二)
6. 友盟集成(六) —— UShare模塊之進(jìn)階說明之分享面板UI(三)
7. 友盟集成(七) —— UShare模塊之進(jìn)階說明之自定義平臺(四)

U-Share API說明

1. 引用頭文件

#import <UMShare/UMShare.h>

2. 接口類UMSocialManager

獲取類實例

[UMSocialManager defaultManager]

打開日志

/**
 *  打開日志
 *
 *  @param isOpen YES代表打開,No代表關(guān)閉
 */
- (void)openLog:(BOOL)isOpen;

設(shè)置平臺的appkey

/**
 *  設(shè)置平臺的appkey
 *
 *  @param platformType 平臺類型 @see UMSocialPlatformType
 *  @param appKey       appKey 
 *  @param appSecret    appSecret (有些平臺沒有,可以不傳)
 *  @param redirectURL  redirectURL (回調(diào)地址)
 */
- (BOOL)setPlaform:(UMSocialPlatformType)platformType
            appKey:(NSString *)appKey
         appSecret:(NSString *)appSecret
       redirectURL:(NSString *)redirectURL;

分享接口

/**
 *  分享接口
 *
 *  @param platformType @see UMSocialPlatformType
 *  @param shareObject
 *  @param currentViewController 用于彈出類似郵件分享、短信分享等這樣的系統(tǒng)頁面
 *  @param completion   回調(diào)
 *  @discuss currentViewController 只正對sms,email等平臺需要傳入viewcontroller的平臺,其他不需要的平臺可以傳入nil
 */
- (void)shareToPlatform:(UMSocialPlatformType)platformType
          messageObject:(UMSocialMessageObject *)messageObject
  currentViewController:(id)currentViewController
             completion:(UMSocialRequestCompletionHandler)completion;

授權(quán)并獲取用戶信息接口

/**
 *  授權(quán)并獲取用戶信息
 *  @param currentViewController 用于彈出類似郵件分享、短信分享等這樣的系統(tǒng)頁面
 *  @param completion   回調(diào)
 */
- (void)getUserInfoWithPlatform:(UMSocialPlatformType)platformType
          currentViewController:(id)currentViewController
                     completion:(UMSocialRequestCompletionHandler)completion;
/**
 *  獲得從sso或者web端回調(diào)到本app的回調(diào)
 *
 *  @param url 第三方sdk的打開本app的回調(diào)的url
 *
 *  @return 是否處理  YES代表處理成功,NO代表不處理
 */
-(BOOL)handleOpenURL:(NSURL *)url;
/**
 *  動態(tài)的增加用戶自定義的PlatformProvider
 *
 *  @param userDefinePlatformProvider 用戶自定義的userDefinePlatformProvider必須實現(xiàn)UMSocialPlatformProvider
 *  @param platformType               @see platformType platformType的有效范圍在 (UMSocialPlatformType_UserDefine_Begin,UMSocialPlatformType_UserDefine_End)之間
 *
 *  @return YES代表返回成功,NO代表失敗
 *  @disuss 在調(diào)用此函數(shù)前,必須先設(shè)置對應(yīng)的平臺的配置信息 @see - (BOOL)setPlaform:(UMSocialPlatformType)platformType appKey:(NSString *)appKey appSecret:(NSString *)appSecret redirectURL:(NSString *)redirectURL;
 */
-(BOOL)addAddUserDefinePlatformProvider:(id<UMSocialPlatformProvider>)userDefinePlatformProvider
             withUserDefinePlatformType:(UMSocialPlatformType)platformType;

取消授權(quán)接口

/**
 *  取消授權(quán)
 *
 *  @param platformType @see UMSocialPlatformType
 *  @param completion   回調(diào)
 */
- (void)cancelAuthWithPlatform:(UMSocialPlatformType)platformType
                    completion:(UMSocialRequestCompletionHandler)completion;

判斷平臺是否安裝

/**
 *  平臺是否安裝
 *
 *  @param platformType 平臺類型 @see UMSocialPlatformType
 *
 *  @return YES 代表安裝,NO 代表未安裝
 *  @note 在判斷QQ空間的App的時候,QQApi判斷會出問題
 */
-(BOOL) isInstall:(UMSocialPlatformType)platformType;

動態(tài)的刪除PlatformProvider,不管是預(yù)定義還是用戶自定義的

/**
 *  動態(tài)的刪除不想顯示的平臺,不管是預(yù)定義還是用戶自定義的
 *
 *  @param platformTypeArray 平臺類型數(shù)組
 */
-(void) removePlatformProviderWithPlatformTypes:(NSArray *)platformTypeArray;
/**
 *  動態(tài)的刪除PlatformProvider,不管是預(yù)定義還是用戶自定義的
 *
 *  @param platformType @see UMSocialPlatformType
 */
-(void) removePlatformProviderWithPlatformType:(UMSocialPlatformType)platformType;

/**
 *  獲得對應(yīng)的平臺類型platformType的PlatformProvider
 *
 *  @param platformType @see platformType
 *
 *  @return 返回繼承UMSocialPlatformProvider的handle
 */
-(id<UMSocialPlatformProvider>)platformProviderWithPlatformType:(UMSocialPlatformType)platformType;

3. 分享類數(shù)據(jù)結(jié)構(gòu)

分享消息類UMSocialMessageObject

@interface UMSocialMessageObject : NSObject


/**
 * @param text 文本內(nèi)容
 * @note 非純文本分享文本
 */
@property (nonatomic, copy) NSString  *text;

/**
 * 分享的所媒體內(nèi)容對象
 */
@property (nonatomic, strong) UMShareObject *shareObject;

/**
 * 其他相關(guān)參數(shù),見相應(yīng)平臺說明
 */
@property (nonatomic, strong) NSDictionary *moreInfo;

+ (UMSocialMessageObject *)messageObject;

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


@end

基本分享類型UMShareObject

UMShareObject是所有多媒體內(nèi)容的基類,多媒體內(nèi)容包括圖片、音樂、視頻、網(wǎng)頁等。純文本分享不屬于多媒體,只需要設(shè)置UMSocialMessageObject的text屬性就可以。

@interface UMShareObject : NSObject
/**
 * 標(biāo)題
 * @note 標(biāo)題的長度依各個平臺的要求而定
 */
@property (nonatomic, copy) NSString *title;

/**
 * 描述
 * @note 描述內(nèi)容的長度依各個平臺的要求而定
 */
@property (nonatomic, copy) NSString *descr;

/**
 * 縮略圖 UIImage或者NSData類型或者NSString類型(圖片url)
 */
@property (nonatomic, strong) id thumbImage;


/**
 * @param title 標(biāo)題
 * @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

/** 圖片內(nèi)容 (可以是UIImage類對象,也可以是NSdata類對象,也可以是圖片鏈接imageUrl NSString類對象)
 * @note 圖片大小根據(jù)各個平臺限制而定
 */
@property (nonatomic, retain) id shareImage;

@end

分享音樂數(shù)據(jù)結(jié)構(gòu)(參考父類UMShareObject)

@interface UMShareMusicObject : UMShareObject

/** 音樂網(wǎng)頁的url地址
 * @note 長度不能超過10K
 */
@property (nonatomic, retain) NSString *musicUrl;
/** 音樂lowband網(wǎng)頁的url地址
 * @note 長度不能超過10K
 */
@property (nonatomic, retain) NSString *musicLowBandUrl;
/** 音樂數(shù)據(jù)url地址
 * @note 長度不能超過10K
 */
@property (nonatomic, retain) NSString *musicDataUrl;

/**音樂lowband數(shù)據(jù)url地址
 * @note 長度不能超過10K
 */
@property (nonatomic, retain) NSString *musicLowBandDataUrl;

@end

分享視頻數(shù)據(jù)結(jié)構(gòu)(參考父類UMShareObject)

@interface UMShareVideoObject : UMShareObject

/**
 視頻網(wǎng)頁的url

 @warning 不能為空且長度不能超過255
 */
@property (nonatomic, strong) NSString *videoUrl;

/**
 視頻lowband網(wǎng)頁的url

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

/**
 視頻數(shù)據(jù)流url

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

/**
 視頻lowband數(shù)據(jù)流url

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

@end

分享網(wǎng)頁數(shù)據(jù)結(jié)構(gòu)(參考父類UMShareObject)

@interface UMShareWebpageObject : UMShareObject

/** 網(wǎng)頁的url地址
 * @note 不能為空且長度不能超過10K
 */
@property (nonatomic, retain) NSString *webpageUrl;

@end

郵件分享數(shù)據(jù)結(jié)構(gòu)(參考父類UMShareObject)

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

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

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

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

/**
 * 文本內(nèi)容
 */
@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

短信分享數(shù)據(jù)結(jié)構(gòu)(參考父類UMShareObject)

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

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

/**
 * 文本內(nèi)容
 */
@property (nonatomic, copy) NSString *smsContent;

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

/**
 * 文件數(shù)據(jù)(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; //低版本網(wǎng)頁鏈接

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

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

@end

4. 分享回調(diào)類

接口返回數(shù)據(jù)結(jié)構(gòu)基類

@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;//授權(quán)token(accessToken)過期時間
@property (nonatomic, copy) NSString  *accessToken;
@property (nonatomic, copy) NSString  *unionId;
/**
 usid 兼容U-Share 4.x/5.x 版本,與4/5版本數(shù)值相同
 即,對應(yīng)微信平臺:openId,QQ平臺openId,其他平臺不變
 */
@property (nonatomic, copy) NSString  *usid;

@property (nonatomic, assign) UMSocialPlatformType  platformType;//對應(yīng)的平臺類型
/**
 * 第三方原始數(shù)據(jù)
 */
@property (nonatomic, strong) id  originalResponse;

@end

分享結(jié)果數(shù)據(jù)結(jié)構(gòu)

@interface UMSocialShareResponse : UMSocialResponse

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

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

@end

授權(quán)結(jié)果數(shù)據(jù)結(jié)構(gòu)

@interface UMSocialAuthResponse : UMSocialResponse

@end

獲取用戶信息結(jié)果數(shù)據(jù)結(jié)構(gòu)

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

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

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

@end

5. 全局配置類

第三方平臺參數(shù)限制相關(guān)配置

U-Share增加了對分享類型的限制,比如對文本的截斷,對圖片的裁剪,以便用戶能夠不用考慮平臺的限制而成功的分享出去。 目前主要對新浪、微信、QQ及Facebook和Twitter平臺做了分享參數(shù)處理。

  • 配置類

其類別如下(請查看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

每個分享類型對應(yīng)相關(guān)的分享配置類:

UMSocialShareTextObject ---> UMSocialShareTextObjectConfig

UMSocialShareImageObject ---> UMSocialShareImageObjectConfig

UMSocialShareMusicObject --->UMSocialShareMusicObjectConfig

UMSocialShareVideoObject ---> UMSocialShareVideoObjectConfig

UMSocialShareWebpageObject ---> UMSocialShareVideoObjectConfig

UMSocialShareEmailObject ---> UMSocialShareEmailObjectConfig

UMSocialShareSmsObject ---> UMSocialShareSmsObjectConfig

UMSocialShareEmotionObject ---> UMSocialShareEmotionObjectConfig

UMSocialShareFileObject ---> UMSocialShareFileObjectConfig
  • 操作設(shè)置

增加了UMSocialGlobal的全局設(shè)置字段 :

thumblr_Tag thumblr平臺需要作為標(biāo)示的字段 tag。

isTruncateShareText對平臺的分享文本的時候,做規(guī)定的截斷,默認(rèn)開啟。

簡言之,開發(fā)者可以通過調(diào)用[UMSocialGlobal shareInstance].isTruncateShareText = NO; 設(shè)置不進(jìn)行文本截斷等額外處理,但在文本過長時會收到第三方平臺SDK返回的錯誤。

isUsingHttpsWhenShareContent當(dāng)前網(wǎng)絡(luò)請求是否用https

1)針對ios9系統(tǒng)以后強制使用https的網(wǎng)絡(luò)請求,針對分享的網(wǎng)絡(luò)圖片都必須是https的網(wǎng)絡(luò)圖片(此為蘋果官方要求)。
2)該函數(shù)默認(rèn)開啟https請求。
3)如果開啟ios9的請求后,自動會過濾ios的http的請求,并返回錯誤。

isClearCacheWhenGetUserInfo 是否清除緩存在獲得用戶資料的時候,此需求存在用戶切換賬號的時候,獲得用戶信息的時候用緩存的數(shù)據(jù)申請導(dǎo)致用戶信息錯誤。

1)默認(rèn)設(shè)置為YES,代表請求用戶的時候需要請求緩存.

NO,代表不清除緩存,用緩存的數(shù)據(jù)請求用戶數(shù)據(jù)。

isUsingWaterMark 是否分享圖片的時候,加入水印功能。如果開啟的話,可以通過圖片的水印配置類warterMarkConfig來配置水印。

目前水印只提供圖片水印功能。 設(shè)置圖片水印的配置類為:

1)UMSocialWarterMarkConfig 水印配置類,方便以后擴展其他的水印形式。
2)UMSocialImageWarterMarkConfig 圖片配置類。

用戶可以通過以下兩種方式來配置用戶自定義的水印

1)如果用戶用默認(rèn)的參數(shù),只想換水印圖片的情況。

可以直接把路徑 UMSocialSDKResources.bundle/UMSocialWaterMark/umsocial_defaultwatermark.png 下的圖片換成自己的水印圖片。

注意圖片的名字和后綴必須一樣

step2: 在分享前設(shè)置開啟水印。

[UMSocialGlobal shareInstance].isUsingWaterMark = YES;

1)如果用戶用自己自定義的參數(shù)和水印圖片的情況。

step1: 在分享前設(shè)置開啟水印。

 [UMSocialGlobal shareInstance].isUsingWaterMark = YES;

step2:創(chuàng)建配置水印類,并賦值給warterMarkConfig。

//創(chuàng)建圖片水印配置類
    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;

    //創(chuàng)建水印配置類
    UMSocialWarterMarkConfig* warterMarkConfig = [[UMSocialWarterMarkConfig alloc] init];
    warterMarkConfig.stringAndImageWarterMarkPositon = UMSocialOnlyImageWarterMarkTopRight;
    [warterMarkConfig setUserDefinedImageWarterMarkConfig:imageWarterMarkConfig];

    //設(shè)置水印配置類
    [UMSocialGlobal shareInstance].warterMarkConfig = warterMarkConfig;

豆瓣、人人、騰訊微博授權(quán)編輯頁面配置

#import <UMShare/UMSocialPlatformConfig.h>

/**
 * 云端授權(quán)/分享編輯頁面配置類
 * 云端授權(quán)/分享頁面目前適用于騰訊微博、豆瓣、人人的授權(quán)和分享編輯頁面的自定義配置
 */
@interface UMSocialCloudViewConfig : NSObject

/**
 授權(quán)頁面
 */
@property (nonatomic, strong) NSString *authViewTitle;
@property (nonatomic, strong) UIColor *authViewTitleColor;
@property( nonatomic, strong) UIColor *authViewNavBarColor;
// button僅需改動title或image即可,touch事件內(nèi)部觸發(fā)
@property (nonatomic, strong) UIButton *authViewCloseButton;

@property (nonatomic, strong) NSString *editViewTitle;
@property (nonatomic, strong) UIColor *editViewTitleColor;
@property( nonatomic, strong) UIColor *editViewNavBarColor;
// button僅需改動title或image即可,touch事件內(nèi)部觸發(fā)
@property (nonatomic, strong) UIButton *editViewCloseButton;
@property (nonatomic, strong) UIButton *editViewShareButton;

6. Kakao

授權(quán)并獲取用戶信息(獲取uid、access token及用戶名等)

// 在需要進(jìn)行獲取用戶信息的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;

            // 授權(quán)信息
            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源數(shù)據(jù)
            NSLog(@"Kakao originalResponse: %@", resp.originalResponse);
        }
    }];
}

后記

本篇主要介紹了UShare模塊之進(jìn)階說明之U-Share API說明,感興趣的給個贊或者關(guān)注~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容