
在iOS開發(fā)中,當(dāng)我們需要集成多個平臺分享時,多數(shù)情況下我們會通過友盟,ShareSDK等第三方的分享平臺來加快開發(fā)進度,關(guān)于友盟分享的集成方法在其官網(wǎng)上以及有詳細指導(dǎo),這里簡單介紹下流程,文章后面分享一些在集成友盟分享時遇到的問題和解決方法。
導(dǎo)入框架
使用CocoaPods集成
pod 'UMengSocialCOM', '~> 5.2.1'
pod install手動下載時,將下面文件夾導(dǎo)入到工程路徑下。附:官方sdk下載頁面
UMSocial_Sdk_x.x.x 文件夾
UMSocial_Sdk_Extra_Frameworks 文件夾
添加系統(tǒng)需要的framework
target->Bulid Phases->Linked Binary and Libraries中增加以下框架:
Security.framework
libiconv.tbd
SystemConfiguration.framework
CoreGraphics.Framework
libsqlite3.tbd
CoreTelephony.framework
libstdc++.tbd
libz.tbd
ImageIO.framework在Bulid Settings---other linker flags增加
-ObjC
設(shè)置友盟appkey
在友盟官網(wǎng)上注冊賬號后,在首頁上選擇“友盟分享”后,進入友盟分享的管理頁,為自己的應(yīng)用注冊一個appkey。

得到appkey后,在AppDelegate中的-didFinishLaunchingWithOptions使用:
#import "UMSocial.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[UMSocialData setAppKey:@"上圖中得到的appkey"];
}
配置第三方APPID
在需要分享的平臺的開發(fā)者官網(wǎng)上為自己的應(yīng)用注冊信息,并拿到相應(yīng)的使用秘鑰
QQ申請地址: http://open.qq.com
微信申請地址:https://open.weixin.qq.com
新浪申請地址:http://open.weibo.com
將下面的方法同樣寫在AppDelegate的-didFinishLaunchingWithOptions方法中
//設(shè)置微信AppId、appSecret,分享url
[UMSocialWechatHandler setWXAppId:@"wxd930ea5d5a258f4f" appSecret:@"db426a9829e4b49a0dcac7b4162da6b6" url:@"http://www.umeng.com/social"];
//設(shè)置手機QQ 的AppId,Appkey,和分享URL,需要#import "UMSocialQQHandler.h"
[UMSocialQQHandler setQQWithAppId:@"100424468" appKey:@"c7394704798a158208a74ab60104f0ba" url:@"http://www.umeng.com/social"];
//打開新浪微博的SSO開關(guān),設(shè)置新浪微博回調(diào)地址,這里必須要和你在新浪微博后臺設(shè)置的回調(diào)地址一致。需要 #import "UMSocialSinaSSOHandler.h"
[UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:@"3921700954" secret:@"04b48b094faeb16683c32669824ebdad" RedirectURL:@"http://sns.whalecloud.com/sina2/callback"];
配置系統(tǒng)回調(diào)
在APPdelegate.m中增加下面的系統(tǒng)回調(diào)配置,注意如果同時使用微信支付、支付寶等其他需要改寫回調(diào)代理的SDK,請在if分支下做區(qū)分,否則會影響 分享、登錄的回調(diào)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
BOOL result = [UMSocialSnsService handleOpenURL:url];
if (result == FALSE) {
//調(diào)用其他SDK,例如支付寶SDK等
}
return result;
}
配置URL scheme
target->Info->URL Types 中添加 URL Schemes,根據(jù)分享需要選擇性添加,格式如下:
|平臺|url scheme設(shè)置格式|例子
|---|--|
|新浪|"wb"+"新浪appkey"|例如:wb126663232|
|微信|"微信應(yīng)用appId"|例如:wxd9a39c7122aa6516|
|QQ、QQ空間|1. “QQ”+十六進制appId(不足8位前面補0)|例如:QQ05FC5B14|
||2. “tencent“+appId,|:例如tencent100424468
調(diào)用默認風(fēng)格進行分享
如果想快速集成的話,可以直接使用友盟內(nèi)置分享UI界面
[UMSocialData defaultData].extConfig.title = @"分享的title";
[UMSocialData defaultData].extConfig.qqData.url = @"http://baidu.com";
[UMSocialSnsService presentSnsIconSheetView:self
appKey:@"507fcab25270157b37000010"
shareText:@"友盟社會化分享讓您快速實現(xiàn)分享等社會化功能,http://umeng.com/social"
shareImage:[UIImage imageNamed:@"icon"]
shareToSnsNames:@[UMShareToWechatSession,UMShareToWechatTimeline,UM ShareToSina,UMShareToQQ,UMShareToQzone]
delegate:self];
分享后回調(diào)方法:
-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
{
//根據(jù)`responseCode`得到發(fā)送結(jié)果,如果分享成功
if(response.responseCode == UMSResponseCodeSuccess)
{
//得到分享到的平臺名
NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
}
}
問題及解決方法
-
解決控制臺"This app is not allowed to query for scheme xxxx"問題
1 . info.plist -> NSApp Transport Security下新增(NS前綴可以省略)
NSAllowsArbitraryLoads : YES
2 . Info.plist -> LSApplicationQueriesSchemes (沒有就創(chuàng)建,Array類型),將所有的xxxx增加到數(shù)組中:

-
控制臺"The resource could not be loaded because the App Transport Security policy requires the use of a secure connection."錯誤
以iOS9 SDK編譯的工程會默認以SSL安全協(xié)議進行網(wǎng)絡(luò)傳輸,即HTTPS,如果依然使用HTTP協(xié)議請求網(wǎng)絡(luò)會報系統(tǒng)異常并中斷請求。
比較簡單的方法是在info.plist->NSAppTransportSecurity下增加
NSAllowsArbitraryLoads : YES
指定所有HTTP連接都可正常請求
-
解決AppStore上架問題
Additionally, we found that your app requires the installation of another app before it can be used, which is not in compliance with the App Store Review Guidelines. Apps should be able to run on launch, without requiring additional applications to be installed.
Specifically, we were required to install WeChat/QQ before we could use the sharing features in your app.
Please revise your app so that a user can use it upon launch. If your app requires authentication before use, please use a method that can authenticate users from within your app.
使用微信分享、登錄必須安裝微信客戶端,QQ登錄、QQ空間分享過程中必須安裝手機QQ客戶端,在未安裝客戶端的設(shè)備上測試會提示下載,這是不符合蘋果審核規(guī)則的。所以在調(diào)用前我們先調(diào)用微信SDK或QQ互聯(lián)SDK的方法檢測是否安裝微信/QQ客戶端
判斷方法在下面兩個頭文件內(nèi):
#import "WXApi.h"
#import <TencentOpenAPI/QQApiInterface.h>
創(chuàng)建一個可變數(shù)組存放可分享的平臺
//彈出前先檢測平臺是否安裝
NSMutableArray *platformArray = [[NSMutableArray alloc] init];
if ([WXApi isWXAppInstalled]) {
[platformArray addObject:UMShareToWechatTimeline];
[platformArray addObject:UMShareToWechatSession];
}
if ([QQApiInterface isQQInstalled]) {
[platformArray addObject:UMShareToQzone];
[platformArray addObject:UMShareToQQ];
}
//彈出分享平臺選擇界面
[UMSocialSnsService presentSnsIconSheetView:self
appKey:@"507fcab25270157b37000010"
shareText:@"友盟社會化分享讓您快速實現(xiàn)分享等社會化功能,http://umeng.com/social"
shareImage:[UIImage imageNamed:@"icon"]
shareToSnsNames:platformArray//使用上面的變量
delegate:self];
-
模擬器中運行報錯Undefined symbols for architecture i386
由于最新版本的QQ sdk_v_3.1.0中去除了i386架構(gòu)的支持因此,后續(xù)凡使用了新版友盟的,都只要在真機運行通過即可