友盟分享
友盟官网
集成文档
-
首先注册友盟账号 SDK下载
- 友盟个人中心中创建一个应用程序
- 新建项目 将友盟的库拖入工程中
- 配置项目环境跟添加需要的第三方库
- 在 AppDelegate文件内设置你的AppKey:
#import "UMSocial.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[UMSocialData setAppKey:@"507fcab25270157b37000010"];
}
- 在你的控制器View添加分享按钮 关联Action
- 在分享的方法里实现代码
#import "UMSocial.h"
[UMSocialData defaultData].extConfig.title = @"友盟分享测试";
// 这里设置是点击微信分享的内容进入的URL
[UMSocialData defaultData].extConfig.wechatSessionData.url = @"http://www.chemayi.com";
/**
* self代表在哪个控制器弹出默认的分享界面
*/
[UMSocialSnsService presentSnsIconSheetView:self // 在哪个控制器的View显示分享
appKey:@"5762b194e0f55a8a740001a5"
shareText:@"人生要有要有梦想"
shareImage:[UIImage imageNamed:@"1"]
shareToSnsNames:@[UMShareToWechatSession,UMShareToWechatTimeline,UMShareToSina,UMShareToQQ,UMShareToQzone, UMShareToEmail,UMShareToQQ, UMShareToFacebook, UMShareToYXSession, UMShareToLWSession, UMShareToAlipaySession, UMShareToDouban]
delegate:nil];
}
注意: 默认情况下微信跟朋友圈一些分享图标是不会显示出来的
通常点击弹出对应的分享的icon后,进入时一个webView,也就是需要OAuth2.0授权,需要用户输入账户名跟密码进行授权,但是目前一般App很少直接让用户输入密码跟账号,都是采取SSO授权
SSO授权
本质还是OAuth2.0 例如我们微信分享,当用户手机上已将安装微信客户端以后,点击微信分享后,自动通过已登录的微信账号进行授权分享
-
SSO授权通常配置的步骤(额外需要添加的步骤)
- 拿新浪微博举例
解压下载文件夹,将SinaSSO文件夹添加到工程。
在other linker flags增加-ObjC 选项,并添加ImageIO 系统framework
-
配置URL schemes
- 在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,格式为“wb”+新浪appkey,例如“wb126663232”
- 配置微博APPkey
#import "UMSocialSinaSSOHandler.h"
//第一个参数为新浪appkey,第二个参数为新浪secret,第三个参数是新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。
[UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:@"3921700954"
secret:@"04b48b094faeb16683c32669824ebdad"
RedirectURL:@"http://sns.whalecloud.com/sina2/callback"];
注意: 回调URL必须和后台保持一致,否则会返回错误码21322
- 添加系统回调
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
BOOL result = [UMSocialSnsService handleOpenURL:url];
if (result == FALSE) {
//调用其他SDK,例如支付宝SDK等
}
return result;
}
- 这样配置以后,我们在点击分享就直接进入新浪客户端
微信分享
微信开放平台
- 注册微信平台账号(需要审核)
- 管理账号
- 点击查看
- 添加相关文件
- 添加SDK依赖的系统库文件。(如果已经添加过就不需要添加了)
- 在新发布的iOS9系统上围绕用户数据的安全性和体验新增了一些安全特性,同时也影响了应用的实现以及集成方式,为了保证良好的稳定性和体验,需要做如下处理:
- 以iOS9 SDK编译的工程会默认以SSL安全协议进行网络传输,即HTTPS,如果依然使用HTTP协议请求网络会报系统异常并中断请求。目前可用如下两种方式保持用HTTP进行网络连接:
- A、在info.plist中加入安全域名白名单(右键info.plist用source code打开)
NSAppTransportSecurity
NSExceptionDomains
log.umsns.com
NSIncludesSubdomains
NSTemporaryExceptionAllowsInsecureHTTPLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1
sns.whalecloud.com
NSIncludesSubdomains
NSTemporaryExceptionAllowsInsecureHTTPLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1
sina.cn
NSIncludesSubdomains
NSThirdPartyExceptionRequiresForwardSecrecy
weibo.cn
NSIncludesSubdomains
NSThirdPartyExceptionRequiresForwardSecrecy
weibo.com
NSIncludesSubdomains
NSThirdPartyExceptionAllowsInsecureHTTPLoads
NSThirdPartyExceptionRequiresForwardSecrecy
sinaimg.cn
NSIncludesSubdomains
NSThirdPartyExceptionAllowsInsecureHTTPLoads
NSThirdPartyExceptionRequiresForwardSecrecy
sinajs.cn
NSIncludesSubdomains
NSThirdPartyExceptionAllowsInsecureHTTPLoads
NSThirdPartyExceptionRequiresForwardSecrecy
sina.com.cn
NSIncludesSubdomains
NSThirdPartyExceptionAllowsInsecureHTTPLoads
NSThirdPartyExceptionRequiresForwardSecrecy
qq.com
NSIncludesSubdomains
NSThirdPartyExceptionAllowsInsecureHTTPLoads
NSThirdPartyExceptionRequiresForwardSecrecy
renren.com
NSIncludesSubdomains
NSThirdPartyExceptionAllowsInsecureHTTPLoads
NSThirdPartyExceptionRequiresForwardSecrecy
facebook.com
NSIncludesSubdomains
NSExceptionRequiresForwardSecrecy
fbcdn.net
NSIncludesSubdomains
NSExceptionRequiresForwardSecrecy
akamaihd.net
NSIncludesSubdomains
NSExceptionRequiresForwardSecrecy
twitter.com
NSIncludesSubdomains
NSExceptionRequiresForwardSecrecy
注:以上部分平台官方未给出相应白名单,由技术人员测试各个平台所收集而来,如果有所遗漏,请自行加入并向客服说明,我们会进一步补充名单。
- B、在info.plist的NSAppTransportSecurity下新增NSAllowsArbitraryLoads并设置为YES,指定所有HTTP连接都可正常请求
NSAppTransportSecurity
NSAllowsArbitraryLoads
- 应用跳转(SSO等)
- 如果你的应用使用了如SSO授权登录或跳转分享功能,在iOS9下就需要增加一个可跳转的白名单,指定对应跳转App的URL Scheme,否则将在第三方平台判断是否跳转时用到的canOpenURL时返回NO,进而只进行webview授权或授权/分享失败。
- 同样在info.plist增加:
LSApplicationQueriesSchemes
wechat
weixin
sinaweibohd
sinaweibo
sinaweibosso
weibosdk
weibosdk2.5
mqqapi
mqq
mqqOpensdkSSoLogin
mqqconnect
mqqopensdkdataline
mqqopensdkgrouptribeshare
mqqopensdkfriend
mqqopensdkapi
mqqopensdkapiV2
mqqopensdkapiV3
mqzoneopensdk
wtloginmqq
wtloginmqq2
mqqwpa
mqzone
mqzonev2
mqzoneshare
wtloginqzone
mqzonewx
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqqbrowser
mttbrowser
alipay
alipayshare
renrenios
renrenapi
renren
renreniphone
laiwangsso
yixin
yixinopenapi
instagram
whatsapp
line
fbapi
fb-messenger-api
fbauth2
fbshareextension
注:以上部分平台官方未给出相应白名单,由技术人员测试各个平台所收集而来,如果有所遗漏,请自行加入并向客服说明,我们会进一步补充名单。
- 应用瘦身(App Thining)
iOS9 SDK新增了对App瘦身的功能,详情见App Thining。目前各个第三方平台正在进行App thining的支持,所以为了正常使用第三方SDK及分享SDK,需要在Build Setting中将Enable bitcode关闭,或设置编译标识ENABLE_BITCODE=NO。
注:bitcode仅在Xcode7以上显示并默认开启。
- 在你的程序APPdelegate入口方法添加下面的代码
//设置微信AppId、appSecret,分享url
[UMSocialWechatHandler setWXAppId:@"wxe030296d5c5968b4" appSecret:@"0cde569ce201db3701b558fd2405ec0b" url:@"http://www.hao123.com"];
return YES;
- 注意:如果不添加上面的代码,则分享列表中不会出现微信及朋友圈图标
- URL必须为http链接
- 配置URL schemes
- 添加系统回调
- 在APPdelegate中实现下面两个系统回调方法:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
BOOL result = [UMSocialSnsService handleOpenURL:url];
if (result == FALSE) {
//调用其他SDK,例如支付宝SDK等
}
return result;
}
- ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
}
- (IBAction)share:(id)sender {
[UMSocialData defaultData].extConfig.title = @"友盟分享测试";
[UMSocialData defaultData].extConfig.wechatSessionData.url = @"http://www.chemayi.com";
/**
* self代表在哪个控制器弹出默认的分享界面
*/
[UMSocialSnsService presentSnsIconSheetView:self // 在哪个控制器的View显示分享
appKey:@"5762b194e0f55a8a740001a5"
shareText:@"人生要有要有梦想"
shareImage:[UIImage imageNamed:@"1"]
shareToSnsNames:@[UMShareToWechatSession,UMShareToWechatTimeline,UMShareToSina,UMShareToQQ,UMShareToQzone, UMShareToEmail,UMShareToQQ, UMShareToFacebook, UMShareToYXSession, UMShareToLWSession, UMShareToAlipaySession, UMShareToDouban]
delegate:nil];
}
@end