首页 > 代码库 > 友盟+

友盟+

友盟分享

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"];

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

QQ

UMShareToQQ

QQ空间

UMShareToQzone

微信

UMShareToWechatSession

微信朋友圈

UMShareToWechatTimeline

微信收藏

UMShareToFavorite

邮件

UMShareToEmail

短信

UMShareToSms

豆瓣

UMShareToSms

短信

UMShareToDouban

人人网

UMShareToRenren

Facebook

UMShareToFacebook

Twitter

UMShareToTwitter

易信

UMShareToYXSession

易信朋友圈

UMShareToYXTimeline

来往

UMShareToLWSession

来往动态

UMShareToLWTimeline

Instagram

UMShareToInstagram

Line

UMShareToLine

Whatsapp

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>

        <!-- 新浪微博-->

 

        <!-- 集成微信、QQQzone、腾讯微博授权对应的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.  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>

 

    <!-- QQQzone 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>

 

 

  1. 以上部分平台官方未给出相应白名单,由技术人员测试各个平台所收集而来,如果有所遗漏,请自行加入并向客服说明,我们会进一步补充名单。

 

 

 

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直接在代码中设置

绑定地址:http://umeng.com/apps

登录友盟网站->左上角选择你们的产品->组件->社会化组件->设置

技术分享

3.1  短链接开关

短链接开关只对新浪微博、腾讯微博、人人网、豆瓣四个平台有效,开启短链接开关,分享文案中附加的链接会被转码,同时可以统计到分享回流率(点击链接的次数),关闭短链接开关则无法统计,短链接开关默认为关闭状态

3.2  文字截断开关

文字截断开关只对新浪微博、腾讯微博、人人网、豆瓣四个平台有效,同时只对使用自定义分享编辑页或没有分享编辑页用户有效,当分享文案超出字数限制时自动截断,开关状态默认关闭

友盟+