對友盟分享(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
的呼叫。
這部分就不多說了,大家都懂,直接上程式碼。
-
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
-
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
這部分是對友盟分享的關鍵封裝,定製了 文字字、圖片、網頁 三種分享,分鐘分享有固定的引數形式。
-
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;
-
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 的對應分享的部分功能,如有需要請更加文件自行定製。
如果您能讀到點這裡我非常感謝。
相關文章
- Android 友盟社會化分享的整合與封裝Android封裝
- 實現友盟分享
- React Native 結合友盟實現分享React Native
- JS功能封裝JS封裝
- 分享個自己封裝的限流trait封裝AI
- 聊聊redisTemplate對lettuce的封裝Redis封裝
- 動態代理功能封裝封裝
- 分享:用promise封裝ajaxPromise封裝
- 封裝 avm 元件經驗分享封裝元件
- Golang 對MongoDB的操作簡單封裝GolangMongoDB封裝
- 對Flutter路由管理庫Fluro的封裝Flutter路由封裝
- 如何根據業務封裝自己的功能元件封裝元件
- IOS原生接入友盟推送iOS
- 在RN專案上對axios的封裝iOS封裝
- 友盟整合(十二) —— 幾個遇到的坑之HTTP分享到微博失敗(二)HTTP
- echarts常用功能封裝|抽象為mixinEcharts封裝抽象
- Swift-定位,編碼/反編碼功能的封裝Swift封裝
- vue-cli 3.0 + 對 axios 封裝VueiOS封裝
- go對get、post請求封裝Go封裝
- vue中對axios進行封裝VueiOS封裝
- 【JavaScript框架封裝】公共框架的封裝JavaScript框架封裝
- 【封裝小技巧】is 系列方法的封裝封裝
- python-對requests請求簡單的封裝Python封裝
- 對於封裝react元件的一些思考封裝React元件
- 對api請求封裝的探索和總結API封裝
- iOS 面向協議方式封裝空白頁功能iOS協議封裝
- iOS 面向協議封裝全屏旋轉功能iOS協議封裝
- TCP 封裝的隧道對於擁塞控制的意義TCP封裝
- 聊聊jedis連線池對commons-pool的封裝封裝
- 基於Promise實現對Ajax的簡單封裝Promise封裝
- Dapper的封裝、二次封裝、官方擴充套件包封裝,以及ADO.NET原生封裝APP封裝套件
- Vue功能篇 - 3.封裝axios請求庫Vue封裝iOS
- 海康網路相機C#封裝庫分享C#封裝
- 使用 EPPlus 封裝的 excel 表格匯入功能 (.net core c#)封裝ExcelC#
- 【封裝那些事】 缺失封裝封裝
- 前端對接微信分享功能完全指南前端
- 寫給園友們的一封求助信
- 通過JNI對C++進行封裝C++封裝