iOS - Share 分享/第三方登录

1、系统方式创建分享

  • 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China。如果不设置此项弹出的分享页面中显示的按钮为英文说明。

    iOS - Share 分享/第三方登录_第1张图片

  • UIActivityViewController 方式创建

        // 设置分享的内容
        NSString *textToShare = @"请大家登录《iOS云端与网络通讯》服务网站。";
        UIImage *imageToShare = [UIImage imageNamed:@"swift"];
        NSURL *urlToShare = [NSURL URLWithString:@"http://m.baidu.com"];
    
        // 创建分享视图控制器
        /*
            activityItems:               分享的内容
            applicationActivities:      分享的类型,默认(nil)时为 UIActivity
         */
    
        NSArray *items = @[textToShare, imageToShare, urlToShare];
    
        UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:items
                                                                                 applicationActivities:nil];
    
        // 设置不出现的分享按钮
        /*
            Activity 类型又分为 “操作” 和 “分享” 两大类:
    
            UIActivityCategoryAction 操作:
    
                UIActivityTypeAirDrop                       AirDrop                         AirDrop
                UIActivityTypePrint                         打印                             Print
    
                UIActivityTypeSaveToCameraRoll              保存到相册                        Save Image
                UIActivityTypeAssignToContact               添加到联系人                      AssignToContact
                UIActivityTypeAddToReadingList              添加到 Safari 阅读列表             AddToReadingList
                UIActivityTypeCopyToPasteboard              复制到剪贴板                      Copy
                UIActivityTypeOpenInIBooks                  在 iBook 中打开
    
            UIActivityCategoryShare 分享:
    
                UIActivityTypeMail                          邮箱                             Mail
                UIActivityTypeMessage                       短信                             Message
    
                UIActivityTypePostToTwitter                 分享到 Twitter
                UIActivityTypePostToFacebook                分享到 Facebook
                UIActivityTypePostToVimeo                   分享到 Vimeo(视频媒体)
                UIActivityTypePostToFlickr                  分享到 Flickr(网络相簿)
                UIActivityTypePostToWeibo                   分享到 新浪微博
                UIActivityTypePostToTencentWeibo            分享到 腾讯微博
         */
    
        // 添加到此数组中的系统分享按钮项将不会出现在分享视图控制器中
        activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint];
    
        // 显示分享视图控制器
        [self presentViewController:activityVC animated:YES completion:nil];
    
        // 分享完成
        activityVC.completionWithItemsHandler = ^(NSString *activityType,
                                                       BOOL completed,
                                                   NSArray *returnedItems,
                                                   NSError *activityError) {
            // 分享完成或退出分享时调用该方法
    
            if (completed) {
                NSLog(@"分享完成");
            } else {
                NSLog(@"取消分享");
            }
        };
  • 效果

    iOS - Share 分享/第三方登录_第2张图片iOS - Share 分享/第三方登录_第3张图片

    iOS - Share 分享/第三方登录_第4张图片iOS - Share 分享/第三方登录_第5张图片

    iOS - Share 分享/第三方登录_第6张图片iOS - Share 分享/第三方登录_第7张图片

    iOS - Share 分享/第三方登录_第8张图片iOS - Share 分享/第三方登录_第9张图片

    iOS - Share 分享/第三方登录_第10张图片iOS - Share 分享/第三方登录_第11张图片

2、系统方式自定义分享

  • 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China。如果不设置此项弹出的分享页面中显示的按钮为英文说明。

    iOS - Share 分享/第三方登录_第12张图片

  • 自定义按钮

    • myUIActivity.h

          #import 
      
          @interface myUIActivity : UIActivity 
      
          @end
    • myUIActivity.m

          #import "myUIActivity.h"
      
          /*
              自定义分享按钮
           */
      
          @implementation myUIActivity
      
          // 设置分享按钮的类型
          - (NSString *)activityType {
      
              // 在 completionWithItemsHandler 回调里可以用于判断,一般取当前类名
              return NSStringFromClass([myUIActivity class]);
          }
      
          // 设置分享按钮的标题
          - (NSString *)activityTitle {
      
              // 设置显示在分享框里的名称
              return @"自定义分享按钮";
          }
      
          // 设置分享按钮的图片
          - (UIImage *)activityImage {
      
              // 图片自定变为黑白色,默认尺寸为 56 * 56 像素
              return [UIImage imageNamed:@"JHQ0228"];
          }
      
          // 设置是否显示分享按钮
          - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
      
              // 这里一般根据用户是否授权等来决定是否要隐藏分享按钮
              return YES;
          }
      
          // 预处理分享数据
          - (void)prepareWithActivityItems:(NSArray *)activityItems {
      
              // 解析分享数据时调用,可以进行一定的处理
              NSLog(@"prepareWithActivityItems");
      
              // 手动执行分享操作,保存到相册
              UIImageWriteToSavedPhotosAlbum(activityItems[1], nil, nil, nil);
          }
      
          // 执行分享
          - (UIViewController *)activityViewController {
      
              // 点击自定义分享按钮时调用,跳转到自定义的视图控制器
              NSLog(@"activityViewController");
      
              return nil;
          }
      
          // 执行分享
          - (void)performActivity {
      
              // 点击自定义分享按钮时调用
              NSLog(@"performActivity");
          }
      
          // 完成分享
          - (void)activityDidFinish:(BOOL)completed {
      
              // 分享视图控制器退出时调用
              NSLog(@"activityDidFinish");
          }
      
          @end
  • 使用自定义按钮

    • ViewController.m

          #import "myUIActivity.h"
      
          // 设置分享的内容
          NSString *textToShare = @"请大家登录《iOS云端与网络通讯》服务网站。";
          UIImage *imageToShare = [UIImage imageNamed:@"swift"];
          NSURL *urlToShare = [NSURL URLWithString:@"http://m.baidu.com"];
      
          // 设置分享的类型
          myUIActivity *myActivity = [[myUIActivity alloc] init];
      
          // 创建分享视图控制器
          NSArray *items = @[textToShare, imageToShare, urlToShare];
          NSArray *activities = @[myActivity];
      
          UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:items
                                                                                   applicationActivities:activities];
      
          // 设置不出现的分享按钮
          activityVC.excludedActivityTypes = @[UIActivityTypeAirDrop];
      
          // 显示分享视图控制器
          [self presentViewController:activityVC animated:YES completion:nil];
      
          // 分享完成
          activityVC.completionWithItemsHandler = ^(NSString *activityType,
                                                         BOOL completed,
                                                     NSArray *returnedItems,
                                                     NSError *activityError) {
              // 分享完成或退出分享时调用该方法
      
              if (completed) {
                  NSLog(@"分享完成");
              } else {
                  NSLog(@"取消分享");
              }
          };
  • 效果

    iOS - Share 分享/第三方登录_第13张图片iOS - Share 分享/第三方登录_第14张图片

3、友盟 登录/分享 集成

  • U-Share 快速集成多平台分享、登录功能。帮助应用或游戏快速具备国内外多平台分享、第三方登录功能,SDK 包最小,集成成本最低,平台覆盖最全,并基于友盟+大数据,提供最为权威、实时的用户画像、分享回流等数据分析,助力产品开发与推广。

  • 覆盖国内外近 30 家社交平台,支持文本、图片、音乐、视频、链接等多种内容类型的分享,并提供了主流游戏平台的 SDK。
    • 国内平台:微信、朋友圈、QQ、Qzone、新浪微博、腾讯微博、人人、豆瓣、易信、短信、邮件等。
    • 国外平台:Facebook、Twitter、Instagram、Google+、LINE、WhatsApp、Pinterest、Evernote、Pocket、LinkedIn、KakaoTalk 等。
  • U-Share 集成流程

  • U-Share 第三方账号申请及绑定

  • U-Share 快速集成文档

  • U-Share API 说明

  • U-Share SDK 下载

  • 集成友盟社会化组件流程

    iOS - Share 分享/第三方登录_第15张图片

    • 1.1 注册友盟账号

      • 登陆友盟官网,在我的产品页面添加新应用,然后获取到 Appkey。
    • 1.2 申请第三方账号

      • 参照文档:申请第三方账号
    • 1.3 绑定第三方账号

      • 参照文档:绑定第三方账号到友盟后台
    • 1.4 下载 SDK

      • 进入下载 SDK 页面,勾选自己需要的功能进行下载。
    • 1.5 技术支持

      • 官方微博: umengsocial

      • 开发者社区:http://bbs.umeng.com/thread-5908-1-1.html?from=qianming

      • 技术支持:联系客服

3.1 第三方账号申请及绑定

3.1.1 申请第三方账号

  • 进行分享、授权操作需要在第三方平台创建应用并提交审核,友盟默认提供了大多数平台的测试账号,但如果需要将分享、授权来源、分享到 QQ、Qzone 的 icon 更改为自己 APP 的应用,就需要自己申请第三方账号。

  • 新浪微博

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

      iOS - Share 分享/第三方登录_第16张图片

    • 授权回调页、取消授权回调页设置在应用信息 --> 高级信息,具体位置参考下图

      iOS - Share 分享/第三方登录_第17张图片

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

  • 微信

    • 登录微信开放平台,填写相关应用信息,审核通过后获取到微信 AppID 及 AppSecret,如果需要微信登录功能,需要申请微信登录权限。
  • QQ 及 Qzone

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

      iOS - Share 分享/第三方登录_第18张图片

  • 人人网

    • 登录人人开放平台,填写相关应用信息,同时填写应用根域名为 sns.whalecloud.com 具体位置: 基本信息 --> 应用根域名 如图

      iOS - Share 分享/第三方登录_第19张图片

  • 豆瓣

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

      iOS - Share 分享/第三方登录_第20张图片

      iOS - Share 分享/第三方登录_第21张图片

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

  • 目前需要在友盟后台绑定的第三方账号为:新浪微博、腾讯微博、人人网、豆瓣、Qzone,其余平台如微信、QQ 直接在代码中设置。

  • 绑定地址:http://umeng.com/apps,登录友盟网站 -> 左上角选择你们的产品 -> 组件 -> 社会化组件 -> 设置

    iOS - Share 分享/第三方登录_第22张图片

  • 短链接开关

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

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

3.2 U-Share SDK 集成

3.2.1 下载 U-Share SDK

  • 通过 iOS 社会化组件下载页面选择所需的社交平台后进行下载。

3.2.2 加入 U-Share SDK

  • 将 U-Share SDK 添加到工程

    iOS - Share 分享/第三方登录_第23张图片

  • 添加项目配置,在 Other Linker Flags 加入 -ObjC

    iOS - Share 分享/第三方登录_第24张图片

  • 加入依赖系统库 libsqlite3.tbd

    iOS - Share 分享/第三方登录_第25张图片

  • 添加平台相应的依赖库,根据集成的不同平台加入相关的依赖库,未列出平台则不用添加。添加方式:选中项目 Target -> Linked Frameworks and Libraries 列表中添加

    iOS - Share 分享/第三方登录_第26张图片

    • 注:Twitter 平台加入后需添加 TwitterKit.framework/Resources/TwitterKitResources.bundle。

3.3 U-Share SDK 平台配置

  • 从这一步骤就开始需要第三方 appKey 和 appSecret 等信息,可参考第三方账号申请及绑定申请所需的平台账号。

3.3.1 配置各平台 URL Scheme

  • 添加 URL Types

    • URL Scheme 是通过系统找到并跳转对应 app 的一类设置,通过向项目中的 info.plist 文件中加入 URL types 可使用第三方平台所注册的 appkey 信息向系统注册你的 app,当跳转到第三方应用授权或分享后,可直接跳转回你的 app。

    • 添加 URL Types 有如下几处,都可进行设置

      • 1、通过工程设置面板

        iOS - Share 分享/第三方登录_第27张图片

      • 2、通过 info.plist 文件编辑

        iOS - Share 分享/第三方登录_第28张图片

      • 3、直接编辑 info.plist 中 XML 代码

        iOS - Share 分享/第三方登录_第29张图片

  • 配置第三方平台 URL Scheme

    • 未列出则不需设置

      iOS - Share 分享/第三方登录_第30张图片

3.3.2 适配 iOS 9/10 系统

  • iOS9 系统后 Apple 对 HTTP 请求及访问外部应用做了更加严格的要求,包括 HTTP 白名单、跳转第三方应用白名单等,具体设置第三方平台参数请参照适配 iOS9/10 系统。

  • HTTPS 传输安全

    • Apple 将从 2017 年开始执行 ATS(App Transport Security),所有进行审核的应用中网络请求全部支持 HTTPS,届时以下配置将会失效,请提前做好准备。

    • 以 iOS10 SDK 编译的工程会默认以 SSL 安全协议进行网络传输,即 HTTPS,如果依然使用 HTTP 协议请求网络会报系统异常并中断请求。目前可用如下两种方式保持用 HTTP 进行网络连接:

    • 在 info.plist 中加入安全域名白名单(右键 info.plist 用 source code 打开)

          NSAppTransportSecurity
          
              
             NSExceptionDomains
             
                 
                 sina.com.cn
                 
                     NSIncludesSubdomains
                     
                     NSThirdPartyExceptionAllowsInsecureHTTPLoads
                     
                     NSThirdPartyExceptionRequiresForwardSecrecy
                     
                 
                 sinaimg.cn
                 
                     NSIncludesSubdomains
                     
                     NSThirdPartyExceptionAllowsInsecureHTTPLoads
                     
                     NSThirdPartyExceptionRequiresForwardSecrecy
                     
                 
                 sinajs.cn
                 
                     NSIncludesSubdomains
                     
                     NSThirdPartyExceptionAllowsInsecureHTTPLoads
                     
                     NSThirdPartyExceptionRequiresForwardSecrecy
                     
                 
                 sina.cn
                 
                     
                     NSExceptionMinimumTLSVersion
                     TLSv1.0
                     NSIncludesSubdomains
                     
                     NSThirdPartyExceptionRequiresForwardSecrecy
                     
                 
                 weibo.cn
                 
                     
                     NSExceptionMinimumTLSVersion
                     TLSv1.0
                     NSIncludesSubdomains
                     
                     NSThirdPartyExceptionRequiresForwardSecrecy
                     
                 
                 weibo.com
                 
                     
                     NSExceptionMinimumTLSVersion
                     TLSv1.0
                     NSIncludesSubdomains
                     
                     NSThirdPartyExceptionAllowsInsecureHTTPLoads
                     
                     NSThirdPartyExceptionRequiresForwardSecrecy
                     
                 
                 
      
                 
                 renren.com
                 
                     NSIncludesSubdomains
                     
                     NSThirdPartyExceptionAllowsInsecureHTTPLoads
                     
                     NSThirdPartyExceptionRequiresForwardSecrecy
                     
                 
                 
             
          
    • 若新版 Xcode 控制台输出 “[] tcp_connection_xxx“ 等内容,可以在运行按钮旁的选择 target 选项内的 Edit Scheme - Run - Arguments - Enviroment variables 中增加 OS_ACTIVITY_MODE=disable,可将相关日志关闭。

  • 配置 ApplicationQueriesSchemes(应用间跳转)

    • 如果你的应用使用了如 SSO 授权登录或跳转到第三方分享功能,在 iOS9/10 下就需要增加一个可跳转的白名单,即 LSApplicationQueriesSchemes,否则将在 SDK 判断是否跳转时用到的 canOpenURL 时返回 NO,进而只进行 webview 授权或授权/分享失败。 在项目中的 info.plist 中加入应用白名单,右键 info.plist 选择 source code 打开(具体设置在 Build Setting -> Packaging -> Info.plist File 可获取 plist 路径)。

          LSApplicationQueriesSchemes
          
              
              wechat
              weixin
      
              
              sinaweibohd
              sinaweibo
              sinaweibosso
              weibosdk
              weibosdk2.5
      
              
              mqqapi
              mqq
              mqqOpensdkSSoLogin
              mqqconnect
              mqqopensdkdataline
              mqqopensdkgrouptribeshare
              mqqopensdkfriend
              mqqopensdkapi
              mqqopensdkapiV2
              mqqopensdkapiV3
              mqqopensdkapiV4
              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
      
                
               
                  
              kakaofa63a0b2356e923f3edd6512d531f546
              kakaokompassauth
              storykompassauth
              kakaolink
              kakaotalk-4.5.0
              kakaostory-2.9.0
      
               
              pinterestsdk.v1
          

3.4 调用 U-Share SDK

3.4.1 初始化设置

  • 初始化 U-Share 及第三方平台

    • app 启动后进行 U-Share 和第三方平台的初始化工作,以下代码将所有平台初始化示例放出,开发者根据平台需要选取相应代码,并替换为所属注册的 appKey 和 appSecret。

    • 在 AppDelegate.m 中设置如下代码

          #import 
      
          - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      
              // 打开调试日志
              [[UMSocialManager defaultManager] openLog:YES];
      
              // 设置友盟 appkey
              [[UMSocialManager defaultManager] setUmSocialAppkey:@"57b432afe0f55a9832001a0a"];
      
              // 获取友盟 social 版本号
              // NSLog(@"UMeng social version: %@", [UMSocialGlobal umSocialSDKVersion]);
      
              // 设置微信的 appKey 和 appSecret
              [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession 
                                                    appKey:@"wxdc1e388c3822c80b" 
                                                 appSecret:@"3baf1193c85774b3fd9d18447d76cab0" 
                                               redirectURL:@"http://mobile.umeng.com/social"];
      
              // 设置分享到 QQ 互联的 appKey 和 appSecret
              // U-Share SDK 为了兼容大部分平台命名,统一用 appKey 和 appSecret 进行参数设置,
              // 而 QQ 平台仅需将 appID 作为 U-Share 的 appKey 参数传进即可。
              [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ 
                                                    appKey:@"100424468"  
                                                 appSecret:nil 
                                               redirectURL:@"http://mobile.umeng.com/social"];
      
              // 设置新浪的 appKey 和 appSecret
              [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina 
                                                    appKey:@"3921700954"  
                                                 appSecret:@"04b48b094faeb16683c32669824ebdad" 
                                               redirectURL:@"http://sns.whalecloud.com/sina2/callback"];
      
              // 支付宝的 appKey
              [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_AlipaySession 
                                                    appKey:@"2015111700822536" 
                                                 appSecret:nil 
                                               redirectURL:@"http://mobile.umeng.com/social"];
      
              // 设置易信的 appKey
              [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_YixinSession 
                                                    appKey:@"yx35664bdff4db42c2b7be1e29390c1a06" 
                                                 appSecret:nil 
                                               redirectURL:@"http://mobile.umeng.com/social"];
      
              // 设置点点虫(原来往)的 appKey 和 appSecret
              [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_LaiWangSession 
                                                    appKey:@"8112117817424282305" 
                                                 appSecret:@"9996ed5039e641658de7b83345fee6c9" 
                                               redirectURL:@"http://mobile.umeng.com/social"];
      
              // 设置领英的 appKey 和 appSecret
              [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Linkedin 
                                                    appKey:@"81t5eiem37d2sc"  
                                                 appSecret:@"7dgUXPLH8kA8WHMV" 
                                               redirectURL:@"https://api.linkedin.com/v1/people"];
      
              // 设置 Twitter 的 appKey 和 appSecret
              [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Twitter 
                                                    appKey:@"fB5tvRpna1CKK97xZUslbxiet"  
                                                 appSecret:@"YcbSvseLIwZ4hZg9YmgJPP5uWzd4zr6BpBKGZhf07zzh3oj62K" 
                                               redirectURL:nil];
      
              // 如果不想显示平台下的某些类型,可用以下接口设置
              // [[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[@(UMSocialPlatformType_WechatFavorite),
                                                                                             @(UMSocialPlatformType_YixinTimeLine),
                                                                                             @(UMSocialPlatformType_LaiWangTimeLine),
                                                                                             @(UMSocialPlatformType_Qzone)]];
              ...
      
              return YES;
          }
  • 设置系统回调

        // 支持所有 iOS 系统
        - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
                                               sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    
            BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
            if (!result) {
                // 其他如支付等 SDK 的回调
            }
            return result;
        }
    • 注:以上为建议使用的系统 openURL 回调,且 新浪 平台仅支持以上回调。还有以下两种回调方式,如果开发者选取以下回调,也请补充相应的函数调用。

      • 1、仅支持 iOS9 以上系统,iOS8 及以下系统不会回调

            - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url 
                                                     options:(NSDictionary *)options {
        
                BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
                if (!result) {
                    // 其他如支付等 SDK 的回调
                }
                return result;
            }
      • 2、支持目前所有 iOS 系统

            - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
        
                BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
                if (!result) {
                    // 其他如支付等 SDK 的回调
                }
                return result;
            }

3.4.2 第三方平台登录

  • 支持登录的平台:微信、QQ、新浪微博、腾讯微博、人人网、豆瓣、Facebook、Twitter、Linkedin 领英、Kakao。
  • 支持登录并获取用户信息的平台:微信、QQ、新浪微博、Facebook、Twitter、Linkedin 领英、Kakao。

  • 授权并获取用户信息

        // 在需要进行获取登录信息的 UIViewController 中加入如下代码
        #import 
    
        - (void)getUserInfoForPlatform:(UMSocialPlatformType)platformType {
    
            [[UMSocialManager defaultManager] getUserInfoWithPlatform:platformType 
                                                currentViewController:self 
                                                           completion:^(id result, NSError *error) {
    
                UMSocialUserInfoResponse *resp = result;
    
                // 第三方登录数据(为空表示平台未提供)
                // 授权数据
                NSLog(@" uid: %@", resp.uid);
                NSLog(@" openid: %@", resp.openid);
                NSLog(@" accessToken: %@", resp.accessToken);
                NSLog(@" refreshToken: %@", resp.refreshToken);
                NSLog(@" expiration: %@", resp.expiration);
    
                // 用户数据
                NSLog(@" name: %@", resp.name);
                NSLog(@" iconurl: %@", resp.iconurl);
                NSLog(@" gender: %@", resp.gender);
    
                // 第三方平台 SDK 原始数据
                NSLog(@" originalResponse: %@", resp.originalResponse);
            }];
        }
    • 注:若在 4.x 及 5.x 版本中使用微信登录,升级后需参考说明:4.x/5.x版本升级(授权信息变化)。

3.4.3 第三方平台分享

  • 调用分享面板

    • 在分享按钮绑定如下触发代码

          #import 
      
          // 显示分享面板
          [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
              // 根据获取的 platformType 确定所选平台进行下一步操作
          }];
  • 定制自己的分享面板预定义平台

    • 以下方法可设置平台顺序

          #import 
      
          [UMSocialUIManager setPreDefinePlatforms:@[@(UMSocialPlatformType_Sina),@(UMSocialPlatformType_QQ),@(UMSocialPlatformType_WechatSession)]];
      
          [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
              // 根据获取的 platformType 确定所选平台进行下一步操作
          }];
      • 为避免应用审核被拒,仅会对有效的平台进行显示,如平台应用未安装,或平台应用不支持等会进行隐藏。由于以上原因,在模拟器上部分平台会隐藏。

      • 如果遇到分享面板未显示,请参考分享面板无法弹出。

  • 设置分享内容

    • 分享文本

          - (void)shareTextToPlatformType:(UMSocialPlatformType)platformType {
      
              // 创建分享消息对象
              UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
      
              // 设置文本
              messageObject.text = @"社会化组件 UShare 将各大社交平台接入您的应用,快速武装 App。";
      
              // 调用分享接口
              [[UMSocialManager defaultManager] shareToPlatform:platformType 
                                                  messageObject:messageObject 
                                          currentViewController:self 
                                                     completion:^(id data, NSError *error) {
      
                  if (error) {
                      NSLog(@"************ Share fail with error %@ *********", error);
                  }else{
                      NSLog(@"response data is %@", data);
                  }
              }];
          }
      • 其他分享类型示例请参考 U-Share API 文档。

3.5 技术支持

  • 访问:友盟开发者社区

  • 发邮件至 [email protected]

    • 为了能够尽快响应您的反馈,请提供您的 appkey 及 log 中的详细出错日志,您所提供的内容越详细越有助于我们帮您解决问题。
  • 开启友盟分享调试 log 方法:

        #import 
        [[UMSocialManager defaultManager] openLog:YES];
    • 在 console 中查看日志。
  • 效果

    iOS - Share 分享/第三方登录_第31张图片iOS - Share 分享/第三方登录_第32张图片

    iOS - Share 分享/第三方登录_第33张图片iOS - Share 分享/第三方登录_第34张图片

    iOS - Share 分享/第三方登录_第35张图片iOS - Share 分享/第三方登录_第36张图片

    iOS - Share 分享/第三方登录_第37张图片iOS - Share 分享/第三方登录_第38张图片

    iOS - Share 分享/第三方登录_第39张图片iOS - Share 分享/第三方登录_第40张图片

    iOS - Share 分享/第三方登录_第41张图片iOS - Share 分享/第三方登录_第42张图片

    iOS - Share 分享/第三方登录_第43张图片iOS - Share 分享/第三方登录_第44张图片

3.6 简单使用

  • AppDelegate.m

        #import 
    
        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
            // 打开日志
            [[UMSocialManager defaultManager] openLog:YES];
    
            // 打开图片水印
            //[UMSocialGlobal shareInstance].isUsingWaterMark = YES;
    
            // 获取友盟 social 版本号
            UMSocialLogInfo(@"UMeng social version: %@", [UMSocialGlobal umSocialSDKVersion]);
    
            // 设置友盟 appkey
            [[UMSocialManager defaultManager] setUmSocialAppkey:@"57b432afe0f55a9832001a0a"];
    
            // 设置微信的 appKey 和 appSecret
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession
                                                  appKey:@"wxdc1e388c3822c80b"
                                               appSecret:@"3baf1193c85774b3fd9d18447d76cab0"
                                             redirectURL:@"http://mobile.umeng.com/social"];
            /*
             * 添加某一平台会加入平台下所有分享渠道,如微信:好友、朋友圈、收藏,QQ:QQ 和 QQ 空间
             * 以下接口可移除相应平台类型的分享,如微信收藏,对应类型可在枚举中查找
             */
            //[[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[@(UMSocialPlatformType_WechatFavorite)]];
    
            // 设置分享到 QQ 互联的 appID
            // U-Share SDK为了兼容大部分平台命名,统一用 appKey 和 appSecret 进行参数设置,
            // 而 QQ 平台仅需将 appID 作为 U-Share 的 appKey 参数传进即可。
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ
                                                  appKey:@"1105821097"      /*设置 QQ 平台的 appID*/
                                               appSecret:nil
                                             redirectURL:@"http://mobile.umeng.com/social"];
    
            // 设置新浪的 appKey 和 appSecret
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina
                                                  appKey:@"3921700954"
                                               appSecret:@"04b48b094faeb16683c32669824ebdad"
                                             redirectURL:@"https://sns.whalecloud.com/sina2/callback"];
    
            // 钉钉的 appKey
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_DingDing
                                                  appKey:@"dingoalmlnohc0wggfedpk"
                                               appSecret:nil
                                             redirectURL:nil];
    
            // 支付宝的 appKey
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_AlipaySession
                                                  appKey:@"2015111700822536"
                                               appSecret:nil
                                             redirectURL:@"http://mobile.umeng.com/social"];
    
            // 设置易信的 appKey
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_YixinSession
                                                  appKey:@"yx35664bdff4db42c2b7be1e29390c1a06"
                                               appSecret:nil
                                             redirectURL:@"http://mobile.umeng.com/social"];
    
            // 设置点点虫(原来往)的 appKey 和 appSecret
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_LaiWangSession
                                                  appKey:@"8112117817424282305"
                                               appSecret:@"9996ed5039e641658de7b83345fee6c9"
                                             redirectURL:@"http://mobile.umeng.com/social"];
    
            // 设置领英的 appKey 和 appSecret
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Linkedin
                                                  appKey:@"81t5eiem37d2sc"
                                               appSecret:@"7dgUXPLH8kA8WHMV"
                                             redirectURL:@"https://api.linkedin.com/v1/people"];
    
            // 设置 Facebook 的 appKey 和 UrlString
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Facebook
                                                  appKey:@"506027402887373"
                                               appSecret:nil
                                             redirectURL:@"http://www.umeng.com/social"];
    
            // 设置 Pinterest 的 appKey
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Pinterest
                                                  appKey:@"4864546872699668063"
                                               appSecret:nil
                                             redirectURL:nil];
    
            // dropbox 的 appKey
            [[UMSocialManager defaultManager] setPlaform: UMSocialPlatformType_DropBox
                                                  appKey:@"k4pn9gdwygpy4av"
                                               appSecret:@"td28zkbyb9p49xu"
                                             redirectURL:@"https://mobile.umeng.com/social"];
    
            // vk 的 appkey
            [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_VKontakte
                                                  appKey:@"5786123"
                                               appSecret:nil
                                             redirectURL:nil];
    
            return YES;
        }
    
    
        //#define __IPHONE_10_0    100000
        #if __IPHONE_OS_VERSION_MAX_ALLOWED > 100000
        - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {
    
            BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
            if (!result) {
                // 其他如支付等SDK的回调
            }
            return result;
        }
    
        #endif
    
        - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    
            BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
            if (!result) {
                // 其他如支付等SDK的回调
            }
            return result;
        }
    
        - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    
            BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
            if (!result) {
                // 其他如支付等SDK的回调
            }
            return result;
        }
  • ViewController.m

        #import 
        #import 
    
        #pragma mark - 第三方平台登录
    
        - (IBAction)loginButtonClick:(UIButton *)sender {
    
            [self getUserInfoForPlatform:UMSocialPlatformType_WechatSession];
        }
    
        - (void)getUserInfoForPlatform:(UMSocialPlatformType)platformType {
    
            [[UMSocialManager defaultManager] getUserInfoWithPlatform:platformType 
                                                currentViewController:self 
                                                           completion:^(id result, NSError *error) {
    
                UMSocialUserInfoResponse *resp = result;
    
                // 第三方登录数据(为空表示平台未提供)
                // 授权数据
                NSLog(@" uid: %@", resp.uid);
                NSLog(@" openid: %@", resp.openid);
                NSLog(@" accessToken: %@", resp.accessToken);
                NSLog(@" refreshToken: %@", resp.refreshToken);
                NSLog(@" expiration: %@", resp.expiration);
    
                // 用户数据
                NSLog(@" name: %@", resp.name);
                NSLog(@" iconurl: %@", resp.iconurl);
                NSLog(@" gender: %@", resp.gender);
    
                // 第三方平台 SDK 原始数据
                NSLog(@" originalResponse: %@", resp.originalResponse);
            }];
        }
    
        #pragma mark - 第三方平台分享
    
        - (IBAction)shareButtonClick:(UIButton *)sender {
    
            [self showShareMenuView];
        }
    
        - (void)showShareMenuView {
    
            // 设置平台顺序,只显示设置列表中的应用
            [UMSocialUIManager setPreDefinePlatforms:@[@(UMSocialPlatformType_Sina),
                                                       @(UMSocialPlatformType_QQ),
                                                       @(UMSocialPlatformType_WechatSession),
                                                       @(UMSocialPlatformType_AlipaySession)]];
    
    
            // 设置分享面板位置,底部 默认
            [UMSocialShareUIConfig shareInstance].sharePageGroupViewConfig.sharePageGroupViewPostionType = 
                                                             UMSocialSharePageGroupViewPositionType_Bottom;
    
            // 设置分享按钮背景形状,有图片 没有圆背景
            [UMSocialShareUIConfig shareInstance].sharePageScrollViewConfig.shareScrollViewPageItemStyleType = 
                                                                    UMSocialPlatformItemViewBackgroudType_None;
    
            // 添加自定义分享按钮
            [UMSocialUIManager addCustomPlatformWithoutFilted:UMSocialPlatformType_UserDefine_Begin+2
                                             withPlatformIcon:[UIImage imageNamed:@"icon_circle"]
                                             withPlatformName:@"演示 icon"];
    
            // 显示分享面板
            [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, 
                                                                                            NSDictionary *userInfo) {
    
                // 根据获取的 platformType 确定所选平台进行下一步操作
    
                [self shareTextToPlatformType:platformType];
    
                // 在回调里面获得点击的
                if (platformType == UMSocialPlatformType_UserDefine_Begin+2) {
    
                    NSLog(@"点击演示添加 Icon 后该做的操作");
                    dispatch_async(dispatch_get_main_queue(), ^{
    
                        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"添加自定义 icon"
                                                                        message:@"具体操作方法请参考 UShareUI 内接口文档"
                                                                       delegate:nil
                                                              cancelButtonTitle:NSLocalizedString(@"确定", nil)
                                                              otherButtonTitles:nil];
                        [alert show];
                    });
                } else {
    
                }
            }];
        }
    
        // 设置分享内容
    
        - (void)shareTextToPlatformType:(UMSocialPlatformType)platformType {
    
            // 创建分享消息对象
            UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
    
            // 设置文本
            messageObject.text = @"社会化组件 UShare 将各大社交平台接入您的应用,快速武装 App。";
    
            // 调用分享接口,进行分享
            [[UMSocialManager defaultManager] shareToPlatform:platformType 
                                                messageObject:messageObject 
                                        currentViewController:self 
                                                   completion:^(id data, NSError *error) {
    
                if (error) {
                    NSLog(@"************ Share fail with error %@ *********",error);
                }else{
                    NSLog(@"response data is %@",data);
                }
            }];
        }

你可能感兴趣的:(iOS - Share 分享/第三方登录)