最近兩天都在學習友盟分享和登錄,因為自己作為一名新手開發者第一次接觸友盟,并且友盟分享的SDK在6.0后與前面的版本改動比較大,所以在學習的過程中遇到了許多的問題,在其他網頁中許多的資料和使用教程都是基于5.0-5.3版本的,因此我想寫一篇關于友盟最新版本(v6.3.0)的使用心得。簡單記錄一下我使用的步驟,希望對第一次接觸新版本的朋友們有所幫助。
①友盟分享基本功能集成
一、下載SDK
1.1 登錄友盟官網
1.2 點擊導航欄上的產品->運營工具->U-Share
1.3 點擊查看SDK->選擇蘋果設備文檔
1.4 點擊右上角的SDK下載按鈕進入SDK下載頁面
1.5 選擇你需要的版本,進行下載
在這里我就選擇默認的平臺(微信、QQ、微博)你們也可以按照自己的需求選擇所需要的分享平臺進行下載SDK
當然也可以通過Cocoapods集成(比較方便)
- Document - U-Share SDK文檔
- UMSocialDemo - U-Share SDK Demo(如點選下載)
- UMSocial - U-Share SDK核心目錄
UMSocialSDK - U-Share SDK核心framework
UMSocialUI - U-Share 分享UI資源、分享面板framework
SocialLibraries - 所選擇下載的第三方平臺SDK及U-Share鏈接庫
二、注冊友盟開發者賬號、添加新應用、獲取APPKey
2.1 注冊:地址:https://i.umeng.com/signup
2.2 登錄后添加新應用: 同1.2 打開U-Share 選擇立即使用
2.3 點擊左上角全部應用
2.4 點擊添加新應用,填寫應用相關信息獲取唯一Appkey
三、集成U-Share v6.3.0到自己的項目中
3.1 新建項目然后把UMSocial
文件夾拖入項目中:
3.2 在
Bulid Setting
找到Other Linker Flags
,添加-ObjC
3.3加入依賴系統庫(下面分別有微信、微博、QQ所需要的依賴系統庫)
四、U-Share SDK平臺配置(iOS9+)
4.1需要有友盟及第三方平臺的AppKey和AppSecret 具體參照:第三方賬號申請及綁定
4.2 我的項目只使用了微信和微博的分享
注意點:
1.在第三方平臺創建應用,如果只是用來測試的話,是不用填寫AppStore ID的,只要創建應用就會生成appKey和appSecret并且可以拿來測試,但是Bundle ID一定要和測試應用的一致!
2.QQ:一定要填寫正確應用調試者賬號!如果你在騰訊開放平臺登錄的賬號和你測試的賬號不一致,就會出錯!
3.Sina:一定要按照文檔中說的修改安全域名以及設置授權回調頁,并且還要在友盟后臺綁定
4.3 配置各平臺URL Scheme
URL Scheme是通過系統找到并跳轉對應app的一類設置,通過向項目中的info.plist文件中加入URL types可使用第三方平臺所注冊的appkey信息向系統注冊你的app,當跳轉到第三方應用授權或分享后,可直接跳轉回你的app。具體參照:http://www.lxweimin.com/p/f367b4a5e871
4.4 配置SSO白名單(iOS9/10)
如果你的應用使用了如SSO授權登錄或跳轉到第三方分享功能,在iOS9/10下就需要增加一個可跳轉的白名單,即LSApplicationQueriesSchemes,否則將在SDK判斷是否跳轉時用到的canOpenURL時返回NO,進而只進行webview授權或授權/分享失敗。 在項目中的info.plist中加入應用白名單,右鍵info.plist選擇source code打開(plist具體設置在Build Setting -> Packaging -> Info.plist File可獲取plist路徑) 請根據選擇的平臺對以下配置進行裁剪:
<key>LSApplicationQueriesSchemes</key>
<array>
<!-- 微信 URL Scheme 白名單-->
<string>wechat</string>
<string>weixin</string>
<!-- 新浪微博 URL Scheme 白名單-->
<string>sinaweibohd</string>
<string>sinaweibo</string>
<string>sinaweibosso</string>
<string>weibosdk</string>
<string>weibosdk2.5</string>
<!-- QQ、Qzone URL Scheme 白名單-->
<string>mqqapi</string>
<string>mqq</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqconnect</string>
<string>mqqopensdkdataline</string>
<string>mqqopensdkgrouptribeshare</string>
<string>mqqopensdkfriend</string>
<string>mqqopensdkapi</string>
<string>mqqopensdkapiV2</string>
<string>mqqopensdkapiV3</string>
<string>mqqopensdkapiV4</string>
<string>mqzoneopensdk</string>
<string>wtloginmqq</string>
<string>wtloginmqq2</string>
<string>mqqwpa</string>
<string>mqzone</string>
<string>mqzonev2</string>
<string>mqzoneshare</string>
<string>wtloginqzone</string>
<string>mqzonewx</string>
<string>mqzoneopensdkapiV2</string>
<string>mqzoneopensdkapi19</string>
<string>mqzoneopensdkapi</string>
<string>mqqbrowser</string>
<string>mttbrowser</string>
<!-- 支付寶 URL Scheme 白名單-->
<string>alipay</string>
<string>alipayshare</string>
<!-- 釘釘 URL Scheme 白名單-->
<string>dingtalk</string>
<string>dingtalk-open</string>
<!-- 點點蟲 URL Scheme 白名單-->
<string>laiwangsso</string>
<!-- 易信 URL Scheme 白名單-->
<string>yixin</string>
<string>yixinopenapi</string>
<!-- instagram URL Scheme 白名單-->
<string>instagram</string>
<!-- whatsapp URL Scheme 白名單-->
<string>whatsapp</string>
<!-- line URL Scheme 白名單-->
<string>line</string>
<!-- Facebook URL Scheme 白名單-->
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<!-- Kakao URL Scheme 白名單-->
<!-- 注:以下第一個參數需替換為自己的kakao appkey-->
<!-- 格式為 kakao + "kakao appkey"-->
<string>kakaofa63a0b2356e923f3edd6512d531f546</string>
<string>kakaokompassauth</string>
<string>storykompassauth</string>
<string>kakaolink</string>
<string>kakaotalk-4.5.0</string>
<string>kakaostory-2.9.0</string>
<!-- pinterest URL Scheme 白名單-->
<string>pinterestsdk.v1</string>
<!-- Tumblr URL Scheme 白名單-->
<string>tumblr</string>
<!-- 印象筆記 -->
<string>evernote</string>
<string>en</string>
<string>enx</string>
<string>evernotecid</string>
<string>evernotemsg</string>
<!-- 有道云筆記-->
<string>youdaonote</string>
<string>ynotedictfav</string>
<string>com.youdao.note.todayViewNote</string>
<string>ynotesharesdk</string>
<!-- Google+-->
<string>gplus</string>
<!-- Pocket-->
<string>pocket</string>
<string>readitlater</string>
<string>pocket-oauth-v1</string>
<string>fb131450656879143</string>
<string>en-readitlater-5776</string>
<string>com.ideashower.ReadItLaterPro3</string>
<string>com.ideashower.ReadItLaterPro</string>
<string>com.ideashower.ReadItLaterProAlpha</string>
<string>com.ideashower.ReadItLaterProEnterprise</string>
<!-- VKontakte-->
<string>vk</string>
<string>vk-share</string>
<string>vkauthorize</string>
</array>
五、 初始化U-Share及第三方平臺
以下代碼根據自己的需要進行選擇,一定要設置對appKey和appSecret
AppDelegate.m中加入以下代碼
5.1初始化U-Share及第三方平臺
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//打開日志
[[UMSocialManager defaultManager]openLog:YES];
//設置友盟appkey
[[UMSocialManager defaultManager]setUmSocialAppkey:@"你在友盟創建的AppKey"];
//獲取友盟social版本號
NSLog(@"友盟版本: %@", [UMSocialGlobal umSocialSDKVersion]);
//設置微信的appID和appKey
[[UMSocialManager defaultManager]setPlaform:UMSocialPlatformType_WechatSession
appKey:@"wxdc1e388c3822c80b"
appSecret:@"3baf1193c85774b3fd9d18447d76cab0"
redirectURL:@"http://mobile.umeng.com/social"
];
//設置微博的appID和appkey
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina
appKey:@"3210168487"
appSecret:@"617fe71b46f0dff305a364c27a465dac"
redirectURL:@"http://sns.whalecloud.com/sina2/callback"
];
//如果不想顯示平臺下的某些類型,可用以下接口設置
/*
[[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[
@(UMSocialPlatformType_QQ),@(UMSocialPlatformType_WechatFavorite)
]
];*/
return YES;
}
5.2設置系統回調
#if __IPHONE_OS_VERSION_MAX_ALLOWED >100000
- (BOOL)application:(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;
}
#endif
- (BOOL)application:(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;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
if (!result) {
// 其他如支付等SDK的回調
}
return result;
}
六、第三方平臺分享
這一步就離成功不遠了,現在你想要分享的控制器中加入以下代碼
6.1彈出分享面板
#import <UShareUI/UShareUI.h>
//點擊分享按鈕
- (IBAction)share:(id)sender {
__weak typeof(self) weakSelf = self;
//顯示分享面板
[UMSocialUIManager showShareMenuViewInView:nil sharePlatformSelectionBlock:^(UMSocialShareSelectionView *shareSelectionView, NSIndexPath *indexPath, UMSocialPlatformType platformType) {
// 根據platformType調用相關平臺進行分享
if (platformType == UMSocialPlatformType_WechatSession) {
[weakSelf shareWebPageToPlatformType:UMSocialPlatformType_WechatSession];
} else if () {
}
...
}];
}
6.2 - (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType
- (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType
{
//創建分享消息對象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
//創建音樂內容對象
UMShareMusicObject *shareObject = [UMShareMusicObject shareObjectWithTitle:@"分享標題" descr:@"分享內容描述" thumImage:[UIImage imageNamed:@"分享圖片名"]];
//設置音樂網頁播放地址
shareObject.musicUrl = @"http://c.y.qq.com/v8/playsong.html?songid=108782194&source=yqq#wechat_redirect";
messageObject.shareObject = shareObject;
//調用分享接口
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
if (error) {
NSLog(@"************Share fail with error %@*********",error);
}else{
NSLog(@"response data is %@",data);
}
}];
}
設置分享內容
下面我列舉幾個常用的分享內容具體參照官方給出的文檔
http://dev.umeng.com/social/ios/進階文檔#2
a.分享文本
- (void)shareTextToPlatformType:(UMSocialPlatformType)platformType
{
//創建分享消息對象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
//設置文本
messageObject.text = @"社會化組件UShare將各大社交平臺接入您的應用,快速武裝App。";
//調用分享接口
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
if (error) {
NSLog(@"************Share fail with error %@*********",error);
}else{
NSLog(@"response data is %@",data);
}
}];
}
b.分享圖片
- (void)shareImageToPlatformType:(UMSocialPlatformType)platformType
{
//創建分享消息對象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
//創建圖片內容對象
UMShareImageObject *shareObject = [[UMShareImageObject alloc] init];
//如果有縮略圖,則設置縮略圖
shareObject.thumbImage = [UIImage imageNamed:@"icon"];
[shareObject setShareImage:@"https://mobile.umeng.com/images/pic/home/social/img-1.png"];
//分享消息對象設置分享內容對象
messageObject.shareObject = shareObject;
//調用分享接口
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
if (error) {
NSLog(@"************Share fail with error %@*********",error);
}else{
NSLog(@"response data is %@",data);
}
}];
}
c.分享圖文(新浪支持,微信/QQ僅支持圖或文本分享)
- (void)shareImageAndTextToPlatformType:(UMSocialPlatformType)platformType
{
//創建分享消息對象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
//設置文本
messageObject.text = @"社會化組件UShare將各大社交平臺接入您的應用,快速武裝App。";
//創建圖片內容對象
UMShareImageObject *shareObject = [[UMShareImageObject alloc] init];
//如果有縮略圖,則設置縮略圖
shareObject.thumbImage = [UIImage imageNamed:@"icon"];
[shareObject setShareImage:@"https://www.umeng.com/img/index/demo/1104.4b2f7dfe614bea70eea4c6071c72d7f5.jpg"];
//分享消息對象設置分享內容對象
messageObject.shareObject = shareObject;
//調用分享接口
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
if (error) {
NSLog(@"************Share fail with error %@*********",error);
}else{
NSLog(@"response data is %@",data);
}
}];
}
d.分享網頁
- (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType
{
//創建分享消息對象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
//創建網頁內容對象
UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:@"分享標題" descr:@"分享內容描述" thumImage:[UIImage imageNamed:@"icon"]];
//設置網頁地址
shareObject.webpageUrl =@"http://mobile.umeng.com/social";
//分享消息對象設置分享內容對象
messageObject.shareObject = shareObject;
//調用分享接口
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
if (error) {
NSLog(@"************Share fail with error %@*********",error);
}else{
NSLog(@"response data is %@",data);
}
}];
}
七、分享面板UI設置
友盟6.0+版本的分享UI相對以前版本來說不僅更加美觀,而且支持自定義,通過修改SDK中的
UMSocialUI
的類,能夠獲得自己想要的分享UI。具體可以參照下面這篇文章:http://www.lxweimin.com/p/7fd968d6094f
八、U-Share第三方平臺登錄集成
7.1第三方登錄的定義
第三方登錄主要用于簡化用戶登錄流程,通過用戶擁有的微博、QQ、微信等第三方賬號進行登錄并且構建APP自己的登錄賬號體系。
7.2如何實現三方登錄
三方登錄所添加的SDK和分享功能相同,在這里不再復述,具體工程配置、系統回調及URL scheme配置參考對應分享文檔即可 分享文檔
最終通過調用登錄接口,獲取用戶在第三方平臺的用戶ID、頭像等資料完成賬號體系的構建
7.3 三方登錄支持的平臺
國內平臺
微信、QQ、新浪、騰訊微博、人人網、豆瓣
國外平臺
Facebook、Twitter、linkedIn、Kakao
下面是登錄實現代碼:(獲取登錄微信用戶的信息,并輸出在控制臺中)
[[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_WechatSession currentViewController:nil completion:^(id result, NSError *error) {
if (error) {
} else {
UMSocialUserInfoResponse *resp = result;
// 授權信息
NSLog(@"Wechat uid: %@", resp.uid);
NSLog(@"Wechat openid: %@", resp.openid);
NSLog(@"Wechat accessToken: %@", resp.accessToken);
NSLog(@"Wechat refreshToken: %@", resp.refreshToken);
NSLog(@"Wechat expiration: %@", resp.expiration);
// 用戶信息
NSLog(@"Wechat name: %@", resp.name);
NSLog(@"Wechat iconurl: %@", resp.iconurl);
NSLog(@"Wechat gender: %@", resp.gender);
// 第三方平臺SDK源數據
NSLog(@"Wechat originalResponse: %@", resp.originalResponse);
}
}];
關于最新版U-Share的分享和登錄集成大概的內容就寫完了,還有其他許多細節,希望讀者幫忙補充。最后如果喜歡這篇文章的話,請幫忙點下??。