admin管理员组

文章数量:1608633

官方网址: http://dev.umeng/social/ios/operation#2

一、注册友盟账号

登陆友盟官网,在我的产品页面添加新应用,然后获取到Appkey.

http://www.jianshu/p/be1f596090c7

二、申请第三方账号

1.新浪微博

登录新浪微博开放平台(点击链接),填写相关应用信息并上传icon图片。注意修改安全域名为sns.whalecloud 同时设置授权回调页为http://sns.whalecloud/sina2/callback 安全域名设置在应用信息-->基本信息.


新浪申请账号界面.jpg.png


授权回调页、取消授权回调页设置在应用信息-->高级信息.


新浪设置回调页.png
  • 安全域名的修改需要二次审核通过才生效,授权回调页修改即时生效.

    2.微信

    登录微信开放平台(点击链接),填写相关应用信息,审核通过后获取到微信AppID及AppSecret,如果需要微信登录功能,需要申请微信登录权限.

    3.QQ及Qzone

    QQ及Qzone使用同一个AppID及Appkey,登录腾讯开放平台(点击链接) ,选择移动应用,填写相关应用信息并提交审核,未审核前通过只能使用测试账号,添加测试账号方法如下: 选择用户能力-->进阶社交能力-->应用调试者,添加测试账号必须在申请者好友列表中.


    添加测试账号.png

    4.人人网

    登录人人开放平台(点击链接) ,填写相关应用信息,同时填写应用根域名为sns.whalecloud 具体位置: 基本信息-->应用根域名.


    人人网基本信息.png

    5.豆瓣

    登录豆瓣开放平台(点击链接),创建应用并填写相关应用信息,注意权限必须选择广播,同时填写回调地址为http://sns.whalecloud/douban/callback.


    豆瓣回调地址.png
    豆瓣api.png

    三、绑定第三方账号到友盟后台

    目前需要在友盟后台绑定的第三方账号为:新浪微博、腾讯微博、人人网、豆瓣、Qzone,其余平台如微信、QQ直接在代码中设置.
    绑定地址:http://umeng/apps
    登录友盟网站->左上角选择你们的产品->组件->社会化组件->设置.


    添加到Umeng后台.png

    1.短链接开关

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

    2.文字截断开关

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

    四、适配iOS9系统

    在新发布的iOS9系统上围绕用户数据的安全性和体验新增了一些安全特性,同时也影响了应用的实现以及集成方式,为了保证良好的稳定性和体验,需要做如下处理:

    1.HTTP传输安全

    以iOS9 SDK编译的工程会默认以SSL安全协议进行网络传输,即HTTPS,如果依然使用HTTP协议请求网络会报系统异常并中断请求。目前可用如下两种方式保持用HTTP进行网络连接:
    A、在info.plist中加入安全域名白名单(右键info.plist用source code打开)

    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
          <key>log.umsns</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSTemporaryExceptionMinimumTLSVersion</key>
              <string>TLSv1.1</string>
          </dict>
          <key>sns.whalecloud</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSTemporaryExceptionMinimumTLSVersion</key>
              <string>TLSv1.1</string>
          </dict>
    
          <!-- 集成新浪微博对应的HTTP白名单-->
          <key>sina</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>weibo</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>weibo</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>sinaimg</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>sinajs</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>sina</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <!-- 新浪微博-->
    
          <!-- 集成微信、QQ、Qzone、腾讯微博授权对应的HTTP白名单-->
          <key>qq</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <!-- 腾讯授权-->
    
          <!-- 集成人人授权对应的HTTP白名单-->
          <key>renren</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <!-- 人人授权-->
    
          <!-- 集成Facebook授权对应的HTTP白名单-->
          <key>facebook</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>                
              <key>NSExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>fbcdn</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>akamaihd</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <!-- Facebook授权-->
    
          <!-- 集成Twitter授权对应的HTTP白名单-->
          <key>twitter</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>                
              <key>NSExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <!-- Twitter授权-->
      </dict>
    </dict>

    注:以上部分平台官方未给出相应白名单,由技术人员测试各个平台所收集而来,如果有所遗漏,请自行加入并向客服说明,我们会进一步补充名单.
    B、在info.plist的NSAppTransportSecurity下新增NSAllowsArbitraryLoads并设置为YES,指定所有HTTP连接都可正常请求 http://dev.umeng/social/ios/ios9

    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
    </dict>

    2.应用跳转(SSO等)

    如果你的应用使用了如SSO授权登录或跳转分享功能,在iOS9下就需要增加一个可跳转的白名单,指定对应跳转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>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>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>
  • 注:以上部分平台官方未给出相应白名单,由技术人员测试各个平台所收集而来,如果有所遗漏,请自行加入并向客服说明,我们会进一步补充名单。

    3. 应用瘦身(App Thining)

    iOS9 SDK新增了对App瘦身的功能,详情见App Thining。目前各个第三方平台正在进行App thining的支持,所以为了正常使用第三方SDK及分享SDK,需要在Build Setting中将Enable bitcode关闭,或设置编译标识ENABLE_BITCODE=NO。
  • 注:bitcode仅在Xcode7以上显示并默认开启。

    五、下载并安装SDK

    1.使用cocoaPods

    如需使用CocoaPods 在Podfile中增加一行,内容如下:
    pod 'UMengSocial', '~> 5.0'
    然后执行安装即可
    pod install

    2.下载SDK

    http://dev.umeng/social/ios/sdk-download

    3.设置友盟apply

  • 获取友盟Appkey。如果你之前已经在友盟注册了应用,获得了Appkey,可以继续使用之前获得Appkey.
  • 如果你尚未在友盟注册账号,需要先注册,注册之后登录你的账号,点击添加新应用,完成新应用填写之后,将进入应用管理页面。在该页面就能得到Appkey.
  • 在代码中设置你的友盟Appkey,在 AppDelegate文件内设置你的AppKey:
#import "UMSocial.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UMSocialData setAppKey:@"your Umeng appKey"];

// 用下面的代码打开我们SDK在控制台的输出后能看到相应的错误码
    [UMSocialData openLog:YES];
}

并添加下方的系统回调方法:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options{
     return  [UMSocialSnsService handleOpenURL:url];
}

六、配置URL schemes

1.为什么要配置 URL schemes

URL schemes 和跳出应用后返回应用的逻辑相关,因此如果使用了SSO授权功能或QQ、微信、webview方式的Facebook,就必须配置URL schemes,否则跳出应用后将无法返回.

2. 如何设置 URL schemes

在你的工程设置项,targets 一栏下,选中自己的 target,在 Info->URL Types 中添加 URL Schemes。如果使用的是Xcode3或更低版本,则需要在plist文件中添加。获取各个平台appkey或者appid的方法可以参考分享详细文档绑定各个平台部分,各个平台的url scheme格式如下表:

平台 url scheme设置格式  
新浪微博 “wb”+新浪appkey,例如“wb126663232”  
微信 微信应用appId,例如“wxd9a39c7122aa6516”  
人人网 “rm”+你的应用bundle id,例如“rmcom.umeng.SocialSDK”  
QQ、QQ空间 需要添加两个URL schemes 1. “QQ”+腾讯QQ互联应用appId转换成十六进制(不足8位前面补0),例如“QQ05FC5B14”。生成十六进制方法:点击链接。2.“tencent“+腾讯QQ互联应用Id,例如“tencent100424468"  
来往 Identifier填“Laiwang”,URL Schemes填来往AppId.注意使用来往SDK后,Xcode工程other linker flags需要添加-ObjC参数  
易信 易信Appkey,例如“yx35664bdff4db42c2b7be1e29390c1a06”  
Facebook 集成最新的Facebook SDK在iOS7.0以上有效,若要使用我们提供的facebook分享需要设置“fb”+facebook AppID,例如“fb1440390216179601”  

七、第三方登录

1.第三方登录概述

第三方登录主要用于简化用户登录流程,通过用户拥有的微博、QQ、微信等第三方账号进行登录并且构建APP自己的登录账号体系.
实现第三方登录主要通过下面两步:

  • 在第三方平台完成授权
  • 获取第三方平台的accesstoken信息及用户资料
1.1第三方登录支持的平台

目前友盟社会化组件支持的第三方登录平台为:新浪微博、微信、QQ、QQ空间、腾讯微博、人人网、豆瓣、Facebook、Twitter.

2.新浪微博登录

在AppDelegate应用入口方法添加下面的方法:

//设置分享到QQ/Qzone的应用Id,和分享url 链接
    #import "UMSocialQQHandler.h"
    [UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:@"新浪 appkey"
                                              secret:@"新浪secret"
                                         RedirectURL:@"http://sns.whalecloud/sina2/callback"];

在新浪微博登录按钮中实现下面的方法:

UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina];

        snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){

//          获取微博用户名、uid、token等

            if (response.responseCode == UMSResponseCodeSuccess) {

                UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToSina];

                NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);

            }});

删除授权调用下面的方法:

[[UMSocialDataService defaultDataService] requestUnOauthWithType:UMShareToSina  completion:^(UMSocialResponseEntity *response){
        NSLog(@"response is %@",response);
    }];

3.QQ及Qzone登录

QQ登录只支持SSO登录方式,必须具备手机QQ客户端,Qzone默认调用SSO登录.
添加配置文件参考文档:添加QQ及Qzone,添加相关库文件,配置URL schemes及添加系统回调,在AppDelegate应用入口方法添加下面的方法:

//设置分享到QQ/Qzone的应用Id,和分享url 链接
    #import "UMSocialQQHandler.h"
    [UMSocialQQHandler setQQWithAppId:@"qq id" appKey:@"qq apply" url:@"http://www.umeng/social"];

在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);

            }});

在Qzone登录按钮中实现下面的方法:

UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToQzone];

        snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){

//          获取微博用户名、uid、token等

            if (response.responseCode == UMSResponseCodeSuccess) {

                UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToQzone];

                NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);

            }});
  • 在SDK5.0及之后的版本中,用户信息都直接在授权之后便会返回,可以在snsAccount里获取全部的用户信息资料.
  • Qzone将UMShareToQQ替换为UMShareToQzone即可.

    4.微信登录

    添加配置文件参考文档:添加微信及朋友圈,添加相关库文件,配置URL schemes及添加系统回调:
  • 注意微信登录必须先在微信开放平台申请微信登录权限
    在你的程序APPdelegate入口方法添加下面的代码:

    #import "UMSocialWechatHandler.h"
      //设置微信AppId、appSecret,分享url
      [UMSocialWechatHandler setWXAppId:@"wxd930ea5d5a258f4f" appSecret:@"db426a9829e4b49a0dcac7b4162da6b6" url:@"http://www.umeng/social"];

    在微信登录按钮中实现下面的方法:

    UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToWechatSession];
    
          snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){
    
              if (response.responseCode == UMSResponseCodeSuccess) {
    
                  UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary]valueForKey:UMShareToWechatSession];
    
                  NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);
    
              }
    });
  • 在SDK5.0及之后的版本中,用户信息都直接在授权之后便会返回,可以在snsAccount里获取全部的用户信息资料.

    八、关于提交项目进行苹果审核

    使用微信分享、登录必须安装微信客户端,QQ登录、QQ空间分享过程中必须安装手机QQ客户端,在未安装客户端的设备上测试会提示下载,这是不符合苹果审核规则的。这是微信及腾讯QQ互联导致的问题。 解决方案: 首先调用微信SDK或QQ互联SDK的方法检测是否安装微信/QQ客户端:
    [QQApiInterface isQQInstalled];
    如果未安装客户端则隐藏对应登录或分享按钮。

本文标签: 第三方iosUmeng