iOS - Share 分享/第三方登录

1、系统方式创建分享

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

  • 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(@"取消分享");
            }
        };
  • 效果

2、系统方式自定义分享

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

  • 自定义按钮
    • myUIActivity.h

          #import <UIKit/UIKit.h>
      
          @interface myUIActivity : UIActivity <UINavigationControllerDelegate>
      
          @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(@"取消分享");
              }
          };
  • 效果

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 下载
  • 集成友盟社会化组件流程

3.1 第三方账号申请及绑定

3.1.1 申请第三方账号

  • 进行分享、授权操作需要在第三方平台创建应用并提交审核,友盟默认提供了大多数平台的测试账号,但如果需要将分享、授权来源、分享到 QQ、Qzone 的 icon 更改为自己 APP 的应用,就需要自己申请第三方账号。
  • 新浪微博
    • 登录新浪微博开放平台,填写相关应用信息并上传 icon 图片。注意修改安全域名为 sns.whalecloud.com 同时设置授权回调页为 http://sns.whalecloud.com/sina2/callback 安全域名设置在应用信息 --> 基本信息,具体位置参考下

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

    • 安全域名的修改需要二次审核通过才生效,授权回调页修改即时生效
  • 微信
    • 登录微信开放平台,填写相关应用信息,审核通过后获取到微信 AppID 及 AppSecret,如果需要微信登录功能,需要申请微信登录权限。
  • QQ 及 Qzone
    • QQ 及 Qzone 使用同一个 AppID 及 Appkey,登录腾讯开放平台,选择移动应用,填写相关应用信息并提交审核,未审核前通过只能使用测试账号,添加测试账号方法如下:选择用户能力 --> 进阶社交能力 --> 应用调试者,添加测试账号必须在申请者好友列表中,如下图

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

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

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

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

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

3.2 U-Share SDK 集成

3.2.1 下载 U-Share SDK

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

3.2.2 加入 U-Share SDK

  • 将 U-Share SDK 添加到工程

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

  • 加入依赖系统库 libsqlite3.tbd

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

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

3.3 U-Share SDK 平台配置

3.3.1 配置各平台 URL Scheme

  • 添加 URL Types

    • URL Scheme 是通过系统找到并跳转对应 app 的一类设置,通过向项目中的 info.plist 文件中加入 URL types 可使用第三方平台所注册的 appkey 信息向系统注册你的 app,当跳转到第三方应用授权或分享后,可直接跳转回你的 app。
    • 添加 URL Types 有如下几处,都可进行设置
      • 1、通过工程设置面板

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

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

  • 配置第三方平台 URL Scheme
    • 未列出则不需设置

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 打开)
          <key>NSAppTransportSecurity</key>
          <dict>
              <!-- 配置允许 http 的任意网络End-->
             <key>NSExceptionDomains</key>
             <dict>
                 <!-- 集成新浪微博对应的HTTP白名单-->
                 <key>sina.com.cn</key>
                 <dict>
                     <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.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>
                 <!-- 新浪微博-->
      
                 <!-- 集成人人授权对应的HTTP白名单-->
                 <key>renren.com</key>
                 <dict>
                     <key>NSIncludesSubdomains</key>
                     <true/>
                     <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                     <true/>
                     <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                     <false/>
                 </dict>
                 <!-- 人人授权-->
             </dict>
          </dict>
    • 若新版 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 路径)。

          <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>
      
              <!-- Kakao URL Scheme 白名单-->
              <!-- 注:以下第一个参数需替换为自己的kakao appkey-->
              <!-- 格式为 kakao + "kakao appkey"-->
              <string>kakaofa63a0b2356e923f3edd6512d531f546</string>
              <string>kakaokompassauth</string>
              <string>storykompassauth</string>
              <string>kakaolink</string>
              <string>kakaotalk-4.5.0</string>
              <string>kakaostory-2.9.0</string>
      
             <!-- pinterest URL Scheme 白名单-->
              <string>pinterestsdk.v1</string>
          </array>

3.4 调用 U-Share SDK

3.4.1 初始化设置

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

    • app 启动后进行 U-Share 和第三方平台的初始化工作,以下代码将所有平台初始化示例放出,开发者根据平台需要选取相应代码,并替换为所属注册的 appKey 和 appSecret。
    • 在 AppDelegate.m 中设置如下代码
          #import <UMSocialCore/UMSocialCore.h>
      
          - (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<UIApplicationOpenURLOptionsKey, id> *)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 <UMSocialCore/UMSocialCore.h>
    
        - (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);
            }];
        }

3.4.3 第三方平台分享

  • 调用分享面板

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

          #import <UShareUI/UShareUI.h>
      
          // 显示分享面板
          [UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
              // 根据获取的 platformType 确定所选平台进行下一步操作
          }];
  • 定制自己的分享面板预定义平台
    • 以下方法可设置平台顺序

          #import <UShareUI/UShareUI.h>
      
          [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);
                  }
              }];
          }

3.5 技术支持

  • 访问:友盟开发者社区
  • 发邮件至 social-support@umeng.com。
    • 为了能够尽快响应您的反馈,请提供您的 appkey 及 log 中的详细出错日志,您所提供的内容越详细越有助于我们帮您解决问题。
  • 开启友盟分享调试 log 方法:
        #import <UMSocialCore/UMSocialCore.h>
        [[UMSocialManager defaultManager] openLog:YES];
    • 在 console 中查看日志。
  • 效果

3.6 简单使用

  • AppDelegate.m

        #import <UMSocialCore/UMSocialCore.h>
    
        - (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<UIApplicationOpenURLOptionsKey, id> *)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 <UMSocialCore/UMSocialCore.h>
        #import <UShareUI/UShareUI.h>
    
        #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);
                }
            }];
        }
时间: 2024-10-06 16:03:48

iOS - Share 分享/第三方登录的相关文章

iOS微信第三方登录实例_IOS

本文实例为大家分享了iOS微信第三方登录,供大家参考,具体内容如下 一.准备工作 1.到微信开放平台注册成开发者,获取appid 2.导入WeChatConnection.framework 3.配置URL Schemes  输入appid  例如wx29ce0f21ea982cb8 二.配置AppDelegate.m 1. 注册微信 //微信登陆 [WXApi registerApp:WeiXin_AppId withDescription:@"weixin"]; 2.设置函数 //

iOS微信第三方登录实现_IOS

一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程.(注意) 1.下载iOS微信SDK. 下载地址 2.将SDK放到工程目录中. 3.补充导入一些依赖框架. 4.添加URL Types 5.添加iOS9 URL Schemes. 注意:如果

Android 第三方登录、分享(ShareSDK、友盟)_Android

为下边的项目做准备,写一个第三方登录.分享的demo.分别使用sharesdk和友盟来实现. 先说一下我对两者的使用上的感觉,个人感觉sharesdk比友盟更好一点,好在哪里呢?好在人工服务上.在集成的过程中遇到了各种问题,但是sharesdk的人工服务做的很好,能给答疑解惑,提供解决问题的方法! 接下来上代码(本文使用android studio开发,sharesdk版本v2.7.7,友盟版本v6.0.0): 一.使用sharesdk(sharesdk版本v2.7.7)来集成: 1.要去官网:

cordova 实现第三方登录及分享,qq,微信,微博,插件的使用和改动

QQ.微信.微博,只针对移动应用或JS提供SDK,JS SDK表面上是最方便cordova项目实现的,但在授权是通过网页的,其session还需要在网页上输入用户名密码来建立,而android sdk和ios sdk的实现形式是调用本身已安装的第三方软件完成授权,显然后者才是我们想要的方式. 插件推荐: (以下几个插件是我用到的,其他的我还试过一些,都不满意) QQ:https://github.com/iVanPan/Cordova_QQ 微信:https://github.com/xu-li

iOS QQ第三方登录实现_IOS

本文实例为大家分享了iOS QQ第三方登录实现代码,供大家参考,具体内容如下 一.准备工作 1.到QQ开放平台(http://connect.qq.com/ )注册成为开发者,申请appkey, 2.在URL Types中添加QQ的AppID,其格式为:"tencent" + AppID    例如tencent1104463316 二.配置AppDelegate.m 1.导入<TencentOpenAPI/QQApiInterface.h> 和<TencentOpe

Android 第三方登录、分享(ShareSDK、友盟)

为下边的项目做准备,写一个第三方登录.分享的demo.分别使用sharesdk和友盟来实现. 先说一下我对两者的使用上的感觉,个人感觉sharesdk比友盟更好一点,好在哪里呢?好在人工服务上.在集成的过程中遇到了各种问题,但是sharesdk的人工服务做的很好,能给答疑解惑,提供解决问题的方法! 接下来上代码(本文使用android studio开发,sharesdk版本v2.7.7,友盟版本v6.0.0): 一.使用sharesdk(sharesdk版本v2.7.7)来集成: 1.要去官网:

微信网页 第三方登录原理详解_Android

微信开放平台和公众平台的区别 1.公众平台面向的时普通的用户,比如自媒体和媒体,企业官方微信公众账号运营人员使用,当然你所在的团队或者公司有实力去开发一些内容,也可以调用公众平台里面的接口,比如自定义菜单,自动回复,查询功能.目前大多数微信通过认证之后,都在做这个事情. 2.开放平台面向的开发者和第三方独立软件开发商.我觉得开发平台最大的开放就是微信登录.当年腾讯没有花大力气去做统一登录这个事情,导致目前各个网站都要弄一套登录机制.好在他们现在认清了局势.开发者或软件开发商,通过微信开放提供的平

js如何调用qq互联api实现第三方登录

 这篇文章主要介绍了js如何调用qq互联api实现第三方登录,需要的朋友可以参考下 qq互联js SDK:http://wiki.connect.qq.com/js_sdk%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E   代码如下: <script type=text/javascript>    在页面header中引入:<script type="text/javascript"  src="http://qzonestyle

微信分享问题-ios shareSDK 分享到微信只分享图文怎么处理

问题描述 ios shareSDK 分享到微信只分享图文怎么处理 使用自带的contentmediatype 用image不显示预订义的文字 用news又必须要给url链接 怎么破 我只想分享一张截屏的图和一段文字 解决方案 share自带的类型的话,只有news类型是同时满足图片和文字分享的 ,还有就是自定义分享的样式,这个比较麻烦,需要的话可以去看一下文档的高级设置.或者给一个链接,自己取舍吧 解决方案二: sharesdk微信分享ShareSDK关于微信分享问题[Android 分享]Sh