15.申請第三方賬號,登錄新浪微博開放平臺(點(diǎn)擊鏈接)
進(jìn)行分享、授權(quán)操作需要在第三方平臺創(chuàng)建應(yīng)用并提交審核,友盟默認(rèn)提供了大多數(shù)平臺的測試賬號,但如果需要將分享、授權(quán)來源、分享到QQ、Qzone的icon更改為自己APP的應(yīng)用,就需要自己申請第三方賬號。
點(diǎn)擊鏈接
Snip20160831_146.png
移動(dòng)應(yīng)用
Snip20160831_153.png
立即接入
Snip20160831_154.png
創(chuàng)建新應(yīng)用
Snip20160831_155.png
基本信息
Snip20160831_171.png
高級信息
Snip20160831_168.png
我的應(yīng)用
Snip20160831_170.png
16.配置URL schemes (使用友盟社會(huì)化組件的微博SSO功能,需要按照文檔要求在xcode設(shè)置url scheme)
Snip20160831_172.png
17.應(yīng)用跳轉(zhuǎn)(SSO等)
如果你的應(yīng)用使用了如SSO授權(quán)登錄或跳轉(zhuǎn)分享功能,在iOS9下就需要增加一個(gè)可跳轉(zhuǎn)的白名單,指定對應(yīng)跳轉(zhuǎn)App的URL Scheme,否則將在第三方平臺判斷是否跳轉(zhuǎn)時(shí)用到的canOpenURL時(shí)返回NO,進(jìn)而只進(jìn)行webview授權(quán)或授權(quán)/分享失敗。
同樣在info.plist增加:
LSApplicationQueriesSchemeswechatweixinsinaweibohdsinaweibosinaweibossoweibosdkweibosdk2.5mqqapimqqmqqOpensdkSSoLoginmqqconnectmqqopensdkdatalinemqqopensdkgrouptribesharemqqopensdkfriendmqqopensdkapimqqopensdkapiV2mqqopensdkapiV3mqzoneopensdkwtloginmqqwtloginmqq2mqqwpamqzonemqzonev2mqzonesharewtloginqzonemqzonewxmqzoneopensdkapiV2mqzoneopensdkapi19mqzoneopensdkapimqqbrowsermttbrowseralipayalipaysharerenreniosrenrenapirenrenrenreniphonelaiwangssoyixinyixinopenapiinstagramwhatsapplinefbapifb-messenger-apifbauth2fbshareextension
18.設(shè)置友盟Appkey
#import"UMSocial.h"http:// 友盟的基本授權(quán)[UMSocialData setAppKey:@"57c5128467e58e23f5003d16"];// 處理分享錯(cuò)誤[UMSocialData openLog:YES];
Snip20160831_173.png
19 .配置新浪微博Appkey(不是友盟Appkey)
//第一個(gè)參數(shù)為新浪appkey,第二個(gè)參數(shù)為新浪secret,第三個(gè)參數(shù)是新浪微博回調(diào)地址,這里必須要和你在新浪微博后臺設(shè)置的回調(diào)地址一致。[UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:@"987580732"secret:@"433c734aeb2660e10e4f97f10ace9481"RedirectURL:@"http://sns.whalecloud.com/sina2/callback"];
Snip20160831_176.png
20.添加系統(tǒng)回調(diào)方法
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{BOOLresult = [UMSocialSnsService handleOpenURL:url];if(result ==FALSE) {//調(diào)用其他SDK,例如支付寶SDK等}else{NSLog(@"分享成功");? ? ? ? ? ? }returnresult;}
Snip20160831_177.png
21.設(shè)置分享的內(nèi)容
Snip20160831_178.png
演示
101.64.gif
(友盟分享四)利用友盟單獨(dú)集成QQ和QQ空間
1.登錄友盟
2.點(diǎn)擊U-Share
Snip20160830_66.png
3.點(diǎn)擊SDK及文檔,選擇蘋果設(shè)備
Snip20160830_67.png
4.點(diǎn)擊SDK下載
Snip20160830_69.png
5.選擇你需要的版本,進(jìn)行下載
Snip20160830_71.png
6.然后利用CocoaPods集成或手動(dòng)集成,我們采取手動(dòng)集成,CocoaPods集成簡單。
Snip20160830_89.png
7.創(chuàng)建xcode項(xiàng)目文件
8.1解壓SDK壓縮包,將形如UMSocial_Sdk_Extra_Frameworks
目錄下的TencentOpenAPI文件夾拖到工程中
Snip20160830_128.png
8.2解壓SDK壓縮包,將形如UMSocial_Sdk_x.x.x的文件夾拖入工程目錄:
Snip20160830_129.png
9.添加SDK依賴的系統(tǒng)庫文件
Snip20160830_130.png
10.登錄友盟
Snip20160830_74.png
11.找到U-Share,然后選擇立即使用
Snip20160830_76.png
12.選擇添加新應(yīng)用
Snip20160830_132.png
13.填寫應(yīng)用基本信息。目的:獲取AppKey
Snip20160830_133.png
14.獲取了CoderZb-QQandZone應(yīng)用對應(yīng)的唯一的AppKey
Snip20160830_134.png
15.申請第三方賬號,即騰訊開放平臺(點(diǎn)擊鏈接),選擇移動(dòng)應(yīng)用,填寫相關(guān)應(yīng)用信息并提交審核。
Snip20160901_200.png
Snip20160901_199.png
Snip20160901_196.png
Snip20160901_197.png
經(jīng)過一天的時(shí)間,終于審核通過了
Snip20160901_253.png
16.應(yīng)用跳轉(zhuǎn)(SSO等).如果你的應(yīng)用使用了如SSO授權(quán)登錄或跳轉(zhuǎn)分享功能,在iOS9下就需要增加一個(gè)可跳轉(zhuǎn)的白名單,指定對應(yīng)跳轉(zhuǎn)App的URL Scheme,否則將在第三方平臺判斷是否跳轉(zhuǎn)時(shí)用到的canOpenURL時(shí)返回NO,進(jìn)而只進(jìn)行webview授權(quán)或授權(quán)/分享失敗。在info.plist增加
LSApplicationQueriesSchemeswechatweixinsinaweibohdsinaweibosinaweibossoweibosdkweibosdk2.5mqqapimqqmqqOpensdkSSoLoginmqqconnectmqqopensdkdatalinemqqopensdkgrouptribesharemqqopensdkfriendmqqopensdkapimqqopensdkapiV2mqqopensdkapiV3mqzoneopensdkwtloginmqqwtloginmqq2mqqwpamqzonemqzonev2mqzonesharewtloginqzonemqzonewxmqzoneopensdkapiV2mqzoneopensdkapi19mqzoneopensdkapimqqbrowsermttbrowseralipayalipaysharerenreniosrenrenapirenrenrenreniphonelaiwangssoyixinyixinopenapiinstagramwhatsapplinefbapifb-messenger-apifbauth2fbshareextension
17.在Info.plist文件中配置如下屬性
Snip20160830_139.png
18.配置URL schemes
Snip20160901_201.png
19.友盟的基本授權(quán)
// 友盟的基本授權(quán)[UMSocialData setAppKey:@"57c4e6aee0f55a5286001ec9"];// 處理分享錯(cuò)誤[UMSocialData openLog:YES];
Snip20160830_142.png
20.添加QQ及Qzone到分享列表
#import"UMSocialQQHandler.h"http:// 在AppDelegate應(yīng)用入口方法打開集成手機(jī)QQ、Qzone開關(guān)[UMSocialQQHandler setQQWithAppId:@"1105588839"appKey:@"zuryj7sDwQW55x3Y"url:@"http://www.umeng.com/social"];
Snip20160901_202.png
21.添加系統(tǒng)回調(diào)方法
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{BOOLresult = [UMSocialSnsService handleOpenURL:url];if(result ==FALSE) {//調(diào)用其他SDK,例如支付寶SDK等}else{NSLog(@"分享成功");? ? ? ? ? ? }returnresult;}
Snip20160901_203.png
22.設(shè)置分享的內(nèi)容
#import"UMSocialData.h"#import"UMSocialSnsService.h"-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event{//如果需要分享回調(diào),請將delegate對象設(shè)置self,并實(shí)現(xiàn)下面的回調(diào)方法// shareToSnsNames:設(shè)置為nil,會(huì)把所有的分享平臺顯示出來。[UMSocialData defaultData].extConfig.title =@"分享的title";? ? [UMSocialData defaultData].extConfig.qqData.url =@"http://baidu.com";[UMSocialData defaultData].extConfig.qzoneData.url =@"http://baidu.com";? ? [UMSocialSnsService presentSnsIconSheetView:selfappKey:@"57c5480de0f55a8c5b001f32"shareText:@"友盟社會(huì)化分享讓您快速實(shí)現(xiàn)分享等社會(huì)化功能,http://umeng.com/social"shareImage:[UIImageimageNamed:@"icon"]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? shareToSnsNames:nildelegate:nil];UIView*view = [[UIViewalloc]init];? ? view.frame =CGRectMake(100,150,200,200);? ? view.backgroundColor = [UIColorredColor];? ? [self.view addSubview:view];? ? ? ? }
Snip20160901_204.png
效果
分享到qq好友
101.78.gif
分享到qq空間
101.79.gif
[分享-LS](https://pan.baidu.com/s/1qYamWXm密碼 fw2d)
注意:
1.提示這個(gè)警告是,你在友盟里面友盟其他的api時(shí),先得使用友盟的appkey
**Umeng SocialSDK --- You haven'tsetthe Umeng Appkey,please use [UMSocialData setAppKey:@"507fcab25270157b37000010"]; before you use other APIs.**
2.由于iOS9引入了AppTransportSecurity(ATS)特性,要求App訪問的網(wǎng)絡(luò)使用HTTPS協(xié)議,如果不做特殊設(shè)置,http請求會(huì)失敗,所以需要開發(fā)者在工程中增加設(shè)置以便可以發(fā)送http請求
拓展1:OAuth2.0和SSO授權(quán)的區(qū)分
-OAuth2.0:
一種安全的登陸協(xié)議,用戶的賬戶密碼不提交到本APP,而是提交到授權(quán)服務(wù)器,待服務(wù)器確認(rèn)后,返回本APP一個(gè)訪問令牌,本APP即可用該訪問令牌訪問資源服務(wù)器的資源。由于用戶的賬號密碼并不與本APP直接交互,而是與官方服務(wù)器交互,因而它是安全的。
SSO
全稱:Single Sign On,用戶只需登陸一次即可訪問相互信任的子系統(tǒng)。用戶訪問系統(tǒng)1時(shí),登陸成功后會(huì)返回一個(gè)ticket,當(dāng)用戶訪問系統(tǒng)2時(shí),會(huì)把ticket帶上,待驗(yàn)證合法后即可訪問系統(tǒng)2。聽起來跟cookie有點(diǎn)像,沒錯(cuò),Web-SSO便有基于cookie的實(shí)現(xiàn)方案。
以新浪微博為例,很多手機(jī)APP在點(diǎn)擊新浪授權(quán)時(shí),會(huì)跳到新浪客戶端的登陸頁面,這里就用到SSO技術(shù)啦。在本APP授權(quán)新浪微博時(shí),會(huì)先檢測手機(jī)是否安裝了新浪微博客戶端。
拓展2:
URL Scheme
為方便app之間互相調(diào)用而設(shè)計(jì)的。你可以通過一個(gè)類似URL的鏈接,通過系統(tǒng)的OpenURl來打開該app,并可以傳遞一些參數(shù)。每個(gè)URL必須能唯一標(biāo)識一個(gè)APP,如果你設(shè)置的URL與別的APP的URL沖突,此時(shí),你的APP不一定會(huì)被調(diào)用起來,原因是當(dāng)APP在安裝的時(shí)候就已經(jīng)在系統(tǒng)里面注冊了此APP的URL Scheme,如果你的一致但是是后安裝的,那么系統(tǒng)不會(huì)調(diào)用你的APP,因?yàn)槟愕腁PP設(shè)置的URL scheme被覆蓋了。
當(dāng)然系統(tǒng)的APP的URL Scheme是優(yōu)先級高的,不用想著能覆蓋系統(tǒng)APP的URL Scheme的注冊調(diào)用。
URL Scheme有什么作用:
iOS系統(tǒng)里面APP之間是相互隔離的,不像Android,每個(gè)組件都可以作為一個(gè)獨(dú)立的功能被其他APP調(diào)用,但是,IOS系統(tǒng)里面也需要完成類似于三方功能如支付、搜索跳轉(zhuǎn)、導(dǎo)航等等跨APP的功能,怎么實(shí)現(xiàn)呢,蘋果就使用了URL Scheme來實(shí)現(xiàn)了這個(gè)功能。通過各個(gè)APP設(shè)計(jì)的符合蘋果的統(tǒng)一規(guī)范的URL Scheme,系統(tǒng)就會(huì)自動(dòng)去調(diào)用相關(guān)的APP來完成你的請求。
比如:我們的APP需要使用支付寶的三方支付功能、我的APP需要使用微信分享好的文章,那么此時(shí)就可以通過URL Scheme來傳遞這些數(shù)據(jù)到支付寶APP或者微信APP,系統(tǒng)會(huì)通過這些APP的URL Scheme來調(diào)起這些APP,完成你所需要做的跨APP的功能。
(友盟登錄)
注:相比于友盟分享三的代碼,僅僅增加了增加了/******/中的內(nèi)容,所以要集成友盟登錄,必須先寫友盟分享3的代碼
AppDelegate.m文件
#import"AppDelegate.h"#import"UMSocial.h"#import"UMSocialSinaSSOHandler.h"@interfaceAppDelegate()@end@implementationAppDelegate- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {// 友盟的基本授權(quán)[UMSocialData setAppKey:@"57c5128467e58e23f5003d16"];// 處理分享錯(cuò)誤[UMSocialData openLog:YES];//第一個(gè)參數(shù)為新浪appkey,第二個(gè)參數(shù)為新浪secret,第三個(gè)參數(shù)是新浪微博回調(diào)地址,這里必須要和你在新浪微博后臺設(shè)置的回調(diào)地址一致。[UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:@"987580732"secret:@"433c734aeb2660e10e4f97f10ace9481"RedirectURL:@"http://sns.whalecloud.com/sina2/callback"];returnYES;}- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{BOOLresult = [UMSocialSnsService handleOpenURL:url];if(result ==FALSE) {//調(diào)用其他SDK,例如支付寶SDK等}else{NSLog(@"分享成功");? ? ? ? ? ? }returnresult;}@end
ViewController.m文件
#import"ViewController.h"#import"UMSocialData.h"#import"UMSocialSnsService.h"#import"UMSocial.h"@interfaceViewController()@end@implementationViewController- (void)viewDidLoad {? ? [superviewDidLoad];?? }-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event{//如果需要分享回調(diào),請將delegate對象設(shè)置self,并實(shí)現(xiàn)下面的回調(diào)方法// shareToSnsNames:設(shè)置為nil,會(huì)把所有的分享平臺顯示出來。[UMSocialData defaultData].extConfig.title =@"分享的title";? ? [UMSocialData defaultData].extConfig.qqData.url =@"http://baidu.com";? ? [UMSocialSnsService presentSnsIconSheetView:selfappKey:@"57c5480de0f55a8c5b001f32"shareText:@"友盟社會(huì)化分享讓您快速實(shí)現(xiàn)分享等社會(huì)化功能,http://umeng.com/social"shareImage:[UIImageimageNamed:@"icon"]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? shareToSnsNames:nildelegate:nil];UIView*view = [[UIViewalloc]init];? ? view.frame =CGRectMake(100,150,200,200);? ? view.backgroundColor = [UIColorredColor];? ? [self.view addSubview:view];/**************************************************************************************/UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina];? ? ? ? snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){//? ? ? ? ? 獲取微博用戶名、uid、token等if(response.responseCode == UMSResponseCodeSuccess) {NSDictionary*dict = [UMSocialAccountManager socialAccountDictionary];? ? ? ? ? ? UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:snsPlatform.platformName];NSLog(@"\nusername = %@,\n usid = %@,\n token = %@ iconUrl = %@,\n unionId = %@,\n thirdPlatformUserProfile = %@,\n thirdPlatformResponse = %@ \n, message = %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL, snsAccount.unionId, response.thirdPlatformUserProfile, response.thirdPlatformResponse, response.message);? ? ? ? ? ? ? ? ? ? }});/**************************************************************************************/}@end運(yùn)行結(jié)果
101.65.gif
[LS](https://pan.baidu.com/s/1mii2Bs0密碼 dqh2)
(友盟統(tǒng)計(jì))
1.登錄友盟
2.點(diǎn)擊U-App
3.選擇SDK及文檔
Snip20160901_206.png
Snip20160901_213.png
4.點(diǎn)擊步驟2中的立即使用
Snip20160901_207.png
5.添加新應(yīng)用
Snip20160901_208.png
6.填寫應(yīng)用基本信息
Snip20160901_209.png
7.獲取CoderZb-Statistics對應(yīng)的唯一的AppKey
Snip20160901_210.png
8.回到步驟3,選擇下載統(tǒng)計(jì)SDK
Snip20160901_212.png
Snip20160901_214.png
9.創(chuàng)建xocde項(xiàng)目
10.導(dǎo)入sdk
Snip20160901_216.png
11..添加友盟統(tǒng)計(jì)需要的framework
Snip20160901_217.png
12.配置AppDelegate.m文件
#import"UMMobClick/MobClick.h"UMConfigInstance.appKey = @"57c7854867e58e4dc6000fc0";? ? UMConfigInstance.channelId = @"App Store";? ? UMConfigInstance.eSType = E_UM_GAME;//僅適用于游戲場景,應(yīng)用統(tǒng)計(jì)不用設(shè)置[MobClick startWithConfigure:UMConfigInstance];//配置以上參數(shù)后調(diào)用此方法初始化SDK!
Snip20160901_218.png
13.設(shè)置發(fā)送策略為啟動(dòng)app就發(fā)送.
如果不設(shè)置為BATCH,則發(fā)送到后臺進(jìn)行統(tǒng)計(jì)的時(shí)間不是確定的[已驗(yàn)證]
UMConfigInstance.ePolicy = BATCH;// 啟動(dòng)app就發(fā)送
101.68.gif
14.頁面的統(tǒng)計(jì)
#import- (void)viewWillAppear:(BOOL)animated{? ? [superviewWillAppear:animated];? ? [MobClick beginLogPageView:@"PageOne"];//("PageOne"為頁面名稱,可自定義)}- (void)viewWillDisappear:(BOOL)animated{? ? [superviewWillDisappear:animated];? ? [MobClick endLogPageView:@"PageOne"];}
Snip20160901_230.png
15.添加事件
添加計(jì)數(shù)事件
Snip20160901_220.png
Snip20160901_222.png
Snip20160901_223.png
添加計(jì)算事件
Snip20160901_225.png
Snip20160901_227.png
16.xcode中實(shí)現(xiàn)計(jì)數(shù)事件和計(jì)算事件
#import-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event{NSLog(@"要在這個(gè)界面統(tǒng)計(jì)");// 計(jì)數(shù)事件[MobClick event:@"touch"];// 計(jì)算事件[MobClick event:@"Calcu"attributes:@{@"book":@"Swift Fundamentals"} counter:110];}
Snip20160901_229.png
17.開啟日志(例如查看計(jì)數(shù)事件,計(jì)算事件頁面的統(tǒng)計(jì)的日志)
// 開啟日志查看。如果不設(shè)置,在xocde控制臺將不會(huì)輸出日志內(nèi)容(內(nèi)容包括計(jì)數(shù)事件,頁面的統(tǒng)計(jì))[MobClick setLogEnabled:YES];
101.69.gif
18.在友盟后臺查看計(jì)數(shù)事件和計(jì)算事件
101.70.gif
19.集成測試
Snip20160901_236.png
注冊測試設(shè)備
Snip20160901_241.png
復(fù)制代碼到xcode中。目的:獲得打印出的內(nèi)容,然后粘貼到"設(shè)備識別信息選項(xiàng)"
Snip20160901_243.png
獲取設(shè)備識別信息選項(xiàng)(一定要真機(jī)運(yùn)行xcode項(xiàng)目)
Class cls =NSClassFromString(@"UMANUtil");? ? SEL deviceIDSelector =@selector(openUDIDString);NSString*deviceID =nil;if(cls && [cls respondsToSelector:deviceIDSelector]){? ? ? ? deviceID = [cls performSelector:deviceIDSelector];? ? }NSData* jsonData = [NSJSONSerializationdataWithJSONObject:@{@"oid": deviceID}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? options:NSJSONWritingPrettyPrintederror:nil];NSLog(@"%@", [[NSStringalloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
Snip20160901_250.png
確定
Snip20160901_252.png
創(chuàng)建成功
Snip20160901_248.png
20.開啟實(shí)時(shí)發(fā)送
UMConfigInstance.ePolicy = REALTIME;//實(shí)時(shí)發(fā)送? 只在“集成測試”設(shè)備的DEBUG模式下有效
Snip20160901_249.png
21.運(yùn)行到真機(jī)設(shè)備中,并在友盟后臺的集成測試選項(xiàng)卡中查看