友盟分享
1. 获取友盟Appkey
到友盟(www.umeng.com)上注册自己的应用,获取应用的AppKey
2.导入友盟的SDK,依赖系统库
下载地址:http://dev.umeng.com/social/ios/sdk-download
加入以下系统库:
• Security.framework
• libiconv.tbd
• SystemConfiguration.framework
• CoreGraphics.framework
• libsqlite3. tbd
• CoreTelephony.framework
• libstdc++. tbd
• libz.dylib
• imageIO.framework
如果加载新浪微博的sso需要做到以下三点:
•1需要加编译设置other link flags为-ObjC(要注意大小写),不写的结果会是:
iOS开发微博分享报错
reason: '-[NSConcreteMutableData wbsdk_base64EncodedString]: unrecognized selector sent to instance 0x78ee7e20'
•2需要加依赖文件imageIO.framework
•3关闭Enable bitcode(设为NO)
3. 初始化友盟
(1)先包含头文件
#import "AppDelegate.h"
#import "UMSocial.h"
#import "UMSocialWechatHandler.h"
#import "UMSocialQQHandler.h"
#import "UMSocialSinaSSOHandler.h"
……….
……….
(2)加载时---初始化并且设置AppKey
//AppKey为友盟注册的AppKey,可以根据需要替换
[UMSocialData setAppKey:@"57fdd4e767e58e0a38003767"];
//设置微信AppId,设置分享url,默认使用友盟的网址
[UMSocialWechatHandler setWXAppId:@"wxf7b9fe6b28c1065f" appSecret:@"d4624c36b6795d1d99dcf0547af5443d" url:@"http://www.umeng.com/social"];
//设置分享到QQ空间的应用Id,和分享url 链接
[UMSocialQQHandler setQQWithAppId:@"801345073" appKey:@"ac1ed688e67844101766f779b5c220fd" url:@"ttp://www.umeng.com/social"];
//对未安装客户端平台进行隐藏,在设置QQ、微信AppID之后调用下面的方法,
[UMSocialConfig hiddenNotInstallPlatforms:@[UMShareToQQ,UMShareToQzone,UMShareToWechatSession,UMShareToWechatTimeline]];
// 打开新浪微博的SSO开关,设置新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。需要 #import "UMSocialSinaSSOHandler.h"
[UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:@"126663232" secret:@"d39969613faa5fcc75859cf8406649eb" RedirectURL:@"http://sns.whalecloud.com/sina2/callback"];
//重写两个方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [UMSocialSnsService handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
return [UMSocialSnsService handleOpenURL:url];
}
4. 配置URL Scheme
在应用的Targets---info---URL Type下
(1)配置微信的URL schemes
URL Scheme格式:
URL Scheme的参数直接设置微信appId即可,identifier的参数都使用weixin
如:Wxf7b9fe6b28c1065f
(2)配置新浪的URL schemes(使用微博原生SDK)
URL Scheme格式 “wb”+新浪appKey
,如新浪微博appkey为3921700954,则实际设置参数为wb3921700954。
(3)配置微信的URL schemes(非微博原生SDK)
在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes,
格式为“sina.”+友盟appkey,例如“sina.507fcab25270157b37000010”
(4)配置QQ的URL schemes
//QQ需增加两个URL Scheme
- URL Scheme格式
"tencent"+腾讯QQ互联应用appID
“QQ”+腾讯QQ互联应用appID转换成十六进制(不足8位前面补0)
- URL Scheme举例 如appID为:100424468
tencent100424468
QQ05fc5b14
说明:100424468转十六进制为5fc5b14,因不足8位向前补0,结果为05fc5b14,加"QQ"前缀QQ05fc5b14
- 依照图示添加URL Types
- 依照图中输入框说明填入参数,如以上示例appID
- 添加第一个URL Types
URL Schemes: tencent100424468
◦ 添加第二个URL Types
URL Schemes: QQ05fc5b14
注:以上两项必须添加。其他输入框可不填,如identifier等。
5.分享代码
(1) 默认分享
[UMSocialSnsService presentSnsIconSheetView:self appKey:@"57fdd4e767e58e0a38003767" shareText:@"分享的标题" shareImage:[UIImage imageNamed:@"blackArrow"] shareToSnsNames:[NSArray arrayWithObjects:UMShareToSina,UMShareToQQ,UMShareToWechatSession,UMShareToRenren,UMShareToDouban,UMShareToQzone,UMShareToTwitter,UMShareToFacebook,UMShareToWechatTimeline, nil] delegate:nil];
(2)使用自定义分享界面
需要使用自定义分享界面,可以在对应的分享按钮中调用下面的方法,如新浪微博
[[UMSocialDataService defaultDataService] postSNSWithTypes:@[UMShareToSina] content:@"友盟社会化分享,http://umeng.com/social" image:nil location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response){
if (response.responseCode == UMSResponseCodeSuccess) {
NSLog(@"分享成功!");
}
}];
其他平台替换UMShareToSina如腾讯微博则替换为UMShareToTencent 各平台参数列表为
平台名 | 参数 |
新浪微博 | UMShareToSina |
腾讯微博 | UMShareToTencent |
| UMShareToQQ |
QQ空间 | UMShareToQzone |
微信 | UMShareToWechatSession |
微信朋友圈 | UMShareToWechatTimeline |
微信收藏 | UMShareToFavorite |
邮件 | UMShareToEmail |
短信 | UMShareToSms |
豆瓣 | UMShareToSms |
短信 | UMShareToDouban |
人人网 | UMShareToRenren |
| UMShareToFacebook |
| UMShareToTwitter |
易信 | UMShareToYXSession |
易信朋友圈 | UMShareToYXTimeline |
来往 | UMShareToLWSession |
来往动态 | UMShareToLWTimeline |
| UMShareToInstagram |
Line | UMShareToLine |
| UMShareToWhatsapp |
Tumblr | UMShareToTumblr |
(3)其他分享方法
//设置分享内容,和回调对象
[[UMSocialControllerService defaultControllerService] setShareText:@"分享" shareImage:nil socialUIDelegate:nil];
UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina];
snsPlatform.snsClickHandler(self,[UMSocialControllerService defaultControllerService],YES);
6.第三方授权
//qq登录
UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToQQ];
snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){
// 获取微博用户名、uid、token
if (response.responseCode == UMSResponseCodeSuccess) {
UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToQQ];
NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);
//获取accestoken以及QQ用户信息,得到的数据在回调Block对象形参respone的data属性
[[UMSocialDataService defaultDataService] requestSnsInformation:UMShareToQQ completion:^(UMSocialResponseEntity *response){
NSLog(@"SnsInformation is %@",response.data);
}];
}});
7.摇一摇分享
// [UMSocialShakeService setShakeThreshold:1.2];
// //下面是应用类型的截图,如果是游戏或者其他方式截图,请参考2.1.4 和2.1.5
// UIImage *image = [[UMSocialScreenShoterDefault screenShoter] getScreenShot];
// [UMSocialSnsService presentSnsIconSheetView:self appKey:UMAppKey shareText:@"分享文字" shareImage:image shareToSnsNames:nil delegate:nil];
//可以设置响应摇一摇阈值,数值越低越灵敏,默认是0.8
[UMSocialShakeService setShakeThreshold:1];
NSString *shareText = @"友盟社会化组件可以让移动应用快速具备社会化分享、登录、评论、喜欢等功能,并提供实时、全面的社会化数据统计分析服务。 http://www.umeng.com/social"; //分享内嵌文字
//下面设置delegate为self,执行摇一摇成功的回调,不执行回调可以设为nil
[UMSocialShakeService setShakeToShareWithTypes:nil
shareText:shareText
screenShoter:[UMSocialScreenShoterDefault screenShoter]
inViewController:self
delegate:nil];
8.适配iOS9
( iOS9系统后Apple对HTTP请求及访问外部应用做了更加严格的要求,包括HTTP白名单、跳转第三方应用白名单等,具体设置第三方平台参数请参照适配iOS9/10系统。)
在新发布的iOS10系统上围绕用户数据的安全性和体验新增了一些安全特性,同时也影响了应用的实现以及集成方式,为了保证良好的稳定性和体验,需要做如下处理:
1. HTTP传输安全
以iOS10 SDK编译的工程会默认以SSL安全协议进行网络传输,即HTTPS,如果依然使用HTTP协议请求网络会报系统异常并中断请求。目前可用如下两种方式保持用HTTP进行网络连接:
在info.plist中加入安全域名白名单(右键info.plist用source code打开)
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>log.umsns.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
<key>sns.whalecloud.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
<!-- 集成新浪微博对应的HTTP白名单-->
<key>sina.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>sina.cn</key>
<dict>
<!-- 适配iOS10 -->
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>weibo.cn</key>
<dict>
<!-- 适配iOS10 -->
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>weibo.com</key>
<dict>
<!-- 适配iOS10 -->
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>sinaimg.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>sinajs.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>sina.com.cn</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<!-- 新浪微博-->
<!-- 集成微信、QQ、Qzone、腾讯微博授权对应的HTTP白名单-->
<key>qq.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<!-- 腾讯授权-->
<!-- 集成人人授权对应的HTTP白名单-->
<key>renren.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<!-- 人人授权-->
<!-- 集成Facebook授权对应的HTTP白名单-->
<key>facebook.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>fbcdn.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>akamaihd.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<!-- Facebook授权-->
<!-- 集成Twitter授权对应的HTTP白名单-->
<key>twitter.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<!-- Twitter授权-->
</dict>
</dict>
- 若新版Xcode控制台输出“[] tcp_connection_xxx“等内容,可以在运行按钮旁的选择target选项内的 Edit Scheme - Run - Arguments - Enviroment variables中增加OS_ACTIVITY_MODE=disable,可将相关日志关闭。
以上部分平台官方未给出相应白名单,由技术人员测试各个平台所收集而来,如果有所遗漏,请自行加入并向客服说明,我们会进一步补充名单。
2. 应用跳转(SSO等)
如果你的应用使用了如SSO授权登录或跳转分享功能,在iOS9/10下就需要增加一个可跳转的白名单,指定对应跳转App的URL Scheme,否则将在第三方平台判断是否跳转时用到的canOpenURL时返回NO,进而只进行webview授权或授权/分享失败。 同样在info.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>renrenios</string>
<string>renrenapi</string>
<string>renren</string>
<string>renreniphone</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>
</array>
- 以上部分平台官方未给出相应白名单,由技术人员测试各个平台所收集而来,如果有所遗漏,请自行加入并向客服说明,我们会进一步补充名单。
9. 申请第三方账号
2.1 为什么要申请第三方账号
进行分享、授权操作需要在第三方平台创建应用并提交审核,友盟默认提供了大多数平台的测试账号,但如果需要将分享、授权来源、分享到QQ、Qzone的icon更改为自己APP的应用,就需要自己申请第三方账号。
2.2 新浪微博
登录新浪微博开放平台(点击链接),填写相关应用信息并上传icon图片。注意修改安全域名为sns.whalecloud.com 同时设置授权回调页为http://sns.whalecloud.com/sina2/callback 安全域名设置在应用信息-->基本信息,具体位置参考下图
授权回调页、取消授权回调页设置在应用信息-->高级信息,具体位置参考下图
- 安全域名的修改需要二次审核通过才生效,授权回调页修改即时生效
2.3 微信
登录微信开放平台(点击链接),填写相关应用信息,审核通过后获取到微信AppID及AppSecret,如果需要微信登录功能,需要申请微信登录权限
2.4 QQ及Qzone
QQ及Qzone使用同一个AppID及Appkey,登录腾讯开放平台(点击链接) ,选择移动应用,填写相关应用信息并提交审核,未审核前通过只能使用测试账号,添加测试账号方法如下: 选择用户能力-->进阶社交能力-->应用调试者,添加测试账号必须在申请者好友列表中,如下图
2.5 人人网
登录人人开放平台(点击链接) ,填写相关应用信息,同时填写应用根域名为sns.whalecloud.com 具体位置: 基本信息-->应用根域名 如图
2.6 豆瓣
登录豆瓣开放平台(点击链接),创建应用并填写相关应用信息,注意权限必须选择广播,同时填写回调地址为http://sns.whalecloud.com/douban/callback
3. 绑定第三方账号到友盟后台
目前需要在友盟后台绑定的第三方账号为:新浪微博、腾讯微博、人人网、豆瓣、Qzone,其余平台如微信、QQ直接在代码中设置
登录友盟网站->左上角选择你们的产品->组件->社会化组件->设置
3.1 短链接开关
短链接开关只对新浪微博、腾讯微博、人人网、豆瓣四个平台有效,开启短链接开关,分享文案中附加的链接会被转码,同时可以统计到分享回流率(点击链接的次数),关闭短链接开关则无法统计,短链接开关默认为关闭状态
3.2 文字截断开关
文字截断开关只对新浪微博、腾讯微博、人人网、豆瓣四个平台有效,同时只对使用自定义分享编辑页或没有分享编辑页用户有效,当分享文案超出字数限制时自动截断,开关状态默认关闭