iOS JShare 对外集成文档

使用提示

本文是 JSHARE iOS SDK 的标准集成指南文档。 匹配的 SDK 版本为:V1.6.0及以后版本。

  • 如果你想要快速测试、请参考本文在几分钟内跑通 Demo。
  • 极光文档官网上有相关的所有指南、API、教程等全部的文档。包括本文档的更新版本,都会及时地发布到该网站上。

产品功能说明

JSHARE SDK 可以让你的应用支持多平台分享,无需耗费时间了解、集成每个社会化分享平台的 SDK,可以有效的降低包体积。

主要场景:

  • 将分享内容分享到 QQ、微信、新浪微博、Facebook、Twitter、趣聊等主要的社交平台。
  • 获取QQ、微信、新浪微博、Facebook、Twitter等主要平台的个人信息,用于第三方登录。

集成压缩包内容

  • jshare-ios-x.x.x.a 静态库
  • jcore-ios-x.x.x.a 静态库
  • JSHARE SDK 入口 JSHAREService.h 头文件
  • 一个完整的 iOS Demo 项目工程,这个工程演示了 JSHARE SDK 的基本用法,配置 SDK 时建议参考这个 Demo。

iOS SDK 支持版本

目前 JSHARE 只支持 iOS 7 及以上 iOS 版本。

快速体验

  • 双击压缩包里面的 JShareDemo.xcodeproj 打开 Demo;
  • 修改 AppDelegate.m 里面的 appKey 的值;
  • 在项目的【General】页面 -> 【Identity】->【Bundle Identifier】 选项填写你在极光创建应用所上传的证书的 Bundle id;
  • 运行安装 Demo 到真机。

JSHARE SDK 集成步骤

选择1:Cocoapods导入

  • 通过Cocoapods下载地址:
  1. pod 'JShare'
  • 如果需要安装指定版本则使用以下方式(以1.5.0版本为例):
  1. pod 'JShare', '1.5.0'

选择2:手动集成

  • 解压压缩包,将 Lib 下的所有文件复制到工程中,即可开始使用 SDK。

  • 增加相关的 framework 依赖:

    • UIKit
    • SystemConfiguration
    • CoreTelephony
    • CoreGraphics
    • Security
    • CoreLocation
    • CoreFoundation
    • CFNetwork
    • libz.tbd
    • libresolv.tbd
  • 在 AppDelegate.m 引用头文件的位置

  1. // 引入 JSHARE 功能所需头文件
  2. #import "JSHAREService.h"
  3. // 如果需要使用 idfa 功能所需要引入的头文件(可选)
  4. #import <AdSupport/AdSupport.h>

SDK 主要接口说明

JSHARELaunchConfig 类:JSHARE SDK 启动配置模型。

JSHAREService 类,包含分享 SDK 的所有接口。

method - setupWithConfig

接口定义:

+(void)setupWithConfig:(JSHARELaunchConfig *)config

接口说明:

初始化接口。建议在 application:didFinishLaunchingWithOptions: 中调用。

参数说明:

  • config:JSHARELaunchConfig 类的实例。

调用示例:

  1. JSHARELaunchConfig *config = [[JSHARELaunchConfig alloc] init];
  2. config.appKey = @"AppKey copied from JiGuang Portal application";
  3. config.SinaWeiboAppKey = @"374535501";
  4. config.SinaWeiboAppSecret = @"baccd12c166f1df96736b51ffbf600a2";
  5. config.SinaRedirectUri = @"https://www.jiguang.cn";
  6. config.QQAppId = @"1105864531";
  7. config.QQAppKey = @"glFYjkHQGSOCJHMC";
  8. config.WeChatAppId = @"wxa2ea563906227379";
  9. config.WeChatAppSecret = @"bb63c0a06bf0ee7f633a5bc44304d110";
  10. config.FacebookAppID = @"1847959632183996";
  11. config.FacebookDisplayName = @"JShareDemo";
  12. config.TwitterConsumerKey = @"4hCeIip1cpTk9oPYeCbYKhVWi";
  13. config.TwitterConsumerSecret = @"DuIontT8KPSmO2Y1oAvby7tpbWHJimuakpbiAUHEKncbffekmC";
  14. config.JChatProAuth = @"a7e2ce002d1a071a6ca9f37d";
  15. [JSHAREService setupWithConfig:config];
  16. [JSHAREService setDebug:YES];

method - share

接口定义:

+(void)share:(JSHAREMessage *)message handler:(JSHAREStateHandler)handler

参数说明:

  • message:JSHAREMessage 类的实例
  • handler:JSHAREStateHandler 分享后的回调

调用示例:

  1. JSHAREMessage *message = [JSHAREMessage message];
  2. message.text = @"JShare SDK 支持主流社交平台、帮助开发者轻松实现社会化功能!";
  3. message.platform = JSHAREPlatformQQ;
  4. message.mediaType = JSHAREText;
  5. [JSHAREService share:message handler:^(JSHAREState state, NSError *error) {
  6. NSLog(@"分享回调");
  7. }
  8. }];

method - share 仅支持JChatPro

接口定义:

  • (void)share:(JSHAREMessage *)message
    1. completionHandler:(JSHARECompletionHandler)handler ;

参数说明:

  • message:JSHAREMessage 类的实例
  • handler:JSHARECompletionHandler 分享后的回调

调用示例:

  1. - (IBAction)shareGraphic:(id)sender {
  2. JSHAREMessage *message = [JSHAREMessage message];
  3. message.mediaType = JSHAREGraphic;
  4. message.url = @"http://tech.qq.com/zt2012/tmtdecode/252.htm";
  5. message.text = @"欢迎使用极光社会化组件 JShare,SDK 包体积小,集成简单,支持主流社交平台、帮助开发者轻松实现社会化功能";
  6. message.title = @"极光社会化组件";
  7. message.platform = JSHAREPlatformJChatPro;
  8. message.thumbUrl = @"http://img2.imgtn.bdimg.com/it/u=3721213387,3527941751&fm=27&gp=0.jpg";
  9. message.extInfo = @"extramessage";
  10. message.callbackUrl = @"https://www.jiguang.cn/";
  11. message.pkgName = @"android_pkg";
  12. message.className = @"android_class_name";
  13. message.appName = @"我是MT";
  14. message.fromScheme = @"jchatproa7e2ce002d1a071a6ca9f37d";
  15. [JSHAREService share:message completionHandler:^(JSHAREState state, NSError *error, id responseObject) {
  16. NSLog(@"responseObject :%@", responseObject);
  17. if (!error) {
  18. NSLog(@"分享图文成功");
  19. }else{
  20. NSLog(@"分享图文失败, error : %@", error);
  21. }
  22. }];
  23. }

method - handleOpenUrl

接口定义:

+(BOOL)handleOpenUrl:(NSURL *)url

接口说明:

分享的回调接口,必要!

iOS 9以下,在 Appdelegate 的 application:handleOpenURL: 中调用; iOS 9以上,在 Appdelegate 的 application: openURL: options 中调用。

参数说明:

  • url:回调的 url。

调用示例:

  1. //目前适用所有 iOS 系统
  2. - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
  3. [JSHAREService handleOpenUrl:url];
  4. return YES;
  5. }
  6. //仅支持 iOS9 以上系统,iOS8 及以下系统不会回调
  7. - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
  8. [JSHAREService handleOpenUrl:url];
  9. return YES;
  10. }

method - getSocialUserInfo

接口定义:

+(void)getSocialUserInfo:(JSHAREPlatform)platform handler:(JSHARESocialHandler)handler

接口说明:

通过调用获取用户信息接口,获取用户在第三方平台的用户 ID、头像等资料完成账号体系的构建。

参数说明:

  • platform : JSHAREPlatform 枚举类型。
  • handler : JSHARESocialHandler 获取用户信息的回调。

调用实例:

  1. [JSHAREService getSocialUserInfo:platfrom handler:^(JSHARESocialUserInfo *userInfo, NSError *error) {
  2. NSString *alertMessage;
  3. NSString *title;
  4. if (error) {
  5. title = @"失败";
  6. alertMessage = @"无法获取到用户信息";
  7. }else{
  8. title = userInfo.name;
  9. alertMessage = [NSString stringWithFormat:@"昵称: %@\n 头像链接: %@\n 性别: %@\n",userInfo.name,userInfo.iconurl,userInfo.gender == 1? @"男" : @"女"];
  10. }
  11. UIAlertView *Alert = [[UIAlertView alloc] initWithTitle:title message:alertMessage delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
  12. dispatch_async(dispatch_get_main_queue(), ^{
  13. [Alert show];
  14. });
  15. }];

其他接口详见 JSHAREService.h 。

Xcode 中的设置

配置 ApplicationQueriesSchemes

在 iOS9/10 下就需要增加一个应用可跳转的白名单,即 LSApplicationQueriesSchemes,否则将在 SDK 判断是否跳转时用到的canOpenURL 时返回 NO,进而只进行 webview 分享/分享失败。

在项目中的 info.plist 中加入应用白名单:

  • 右键 info.plist
  • 选择 source code
  • 添加如下内容:
  1. <key>LSApplicationQueriesSchemes</key>
  2. <array>
  3. <!-- 微信 URL Scheme 白名单-->
  4. <string>wechat</string>
  5. <string>weixin</string>
  6. <!-- 新浪微博 URL Scheme 白名单-->
  7. <string>sinaweibohd</string>
  8. <string>sinaweibo</string>
  9. <string>sinaweibosso</string>
  10. <string>weibosdk</string>
  11. <string>weibosdk2.5</string>
  12. <!-- QQ、Qzone URL Scheme 白名单-->
  13. <string>mqqapi</string>
  14. <string>mqq</string>
  15. <string>mqqOpensdkSSoLogin</string>
  16. <string>mqqconnect</string>
  17. <string>mqqopensdkdataline</string>
  18. <string>mqqopensdkgrouptribeshare</string>
  19. <string>mqqopensdkfriend</string>
  20. <string>mqqopensdkapi</string>
  21. <string>mqqopensdkapiV2</string>
  22. <string>mqqopensdkapiV3</string>
  23. <string>mqqopensdkapiV4</string>
  24. <string>mqzoneopensdk</string>
  25. <string>wtloginmqq</string>
  26. <string>wtloginmqq2</string>
  27. <string>mqqwpa</string>
  28. <string>mqzone</string>
  29. <string>mqzonev2</string>
  30. <string>mqzoneshare</string>
  31. <string>wtloginqzone</string>
  32. <string>mqzonewx</string>
  33. <string>mqzoneopensdkapiV2</string>
  34. <string>mqzoneopensdkapi19</string>
  35. <string>mqzoneopensdkapi</string>
  36. <string>mqqbrowser</string>
  37. <string>mttbrowser</string>
  38. <!-- Facebook URL Scheme 白名单-->
  39. <string>fbapi</string>
  40. <string>fb-messenger-api</string>
  41. <string>fbauth2</string>
  42. <string>fbshareextension</string>
  43. <!-- Twitter URL Scheme 白名单-->
  44. <string>twitter</string>
  45. <string>twitterauth</string>
  46. <!-- JChatPro URL Scheme 白名单-->
  47. <string>JChatPro</string>
  48. </array>

添加 URL Types

各个平台的 URL Schemes 格式说明:

平台 格式 举例
微信 微信 appKey wxa2ea563906227379
QQ 需添加:“tencent” + 腾讯 QQ 互联应用 appID 如 appID 为:1105864531
URL Schemes 值为:tencent1105864531
新浪微博 “wb”+新浪 appKey 如 appKey 为:727232518
URL Schemes 值为: wb727232518
Facebook “fb”+FacebookAppID 如 appID 为:1847959632183996
URL Schemes 值为: fb1847959632183996
Twitter “twitterkit-”+TwitterConsumerKey 如 TwitterConsumerKey 为:4hCeIip1cpTk9oPYeCbYKhVWi
URL Schemes 值为: twitterkit-4hCeIip1cpTk9oPYeCbYKhVWi
JChatPro “ jchatpro”+appkey 如 appkey为:a7e2ce002d1a071a6ca9f37d
URL Schemes 值为: jchatproa7e2ce002d1a071a6ca9f37d

URL Types 设置

Xcode 工程目录中的 [TARGETS] -> [Info] 中设置: iOS JShare 对外集成文档 - 图1

HTTPS 设置

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

目前 JSHARE 支持不存在新浪微博客户端情况下的网页分享,但是由于新浪微博的 api 尚未针对 https 做优化所以需要针对新浪的做对应的 https 设置。在 JSHARE 中是默认关闭新浪微博的网页端分享的,如需使用这个功能则需要在 JSHARELaunchConfig 类的实例中将 isSupportWebSina 属性设置为 YES。

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

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

  1. <key>NSAppTransportSecurity</key>
  2. <dict>
  3. <!-- 配置允许 http 的任意网络 End-->
  4. <key>NSExceptionDomains</key>
  5. <dict>
  6. <!-- 集成新浪微博对应的 HTTP 白名单-->
  7. <key>sina.com.cn</key>
  8. <dict>
  9. <key>NSIncludesSubdomains</key>
  10. <true/>
  11. <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
  12. <true/>
  13. <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
  14. <false/>
  15. </dict>
  16. <key>sinaimg.cn</key>
  17. <dict>
  18. <key>NSIncludesSubdomains</key>
  19. <true/>
  20. <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
  21. <true/>
  22. <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
  23. <false/>
  24. </dict>
  25. <key>sinajs.cn</key>
  26. <dict>
  27. <key>NSIncludesSubdomains</key>
  28. <true/>
  29. <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
  30. <true/>
  31. <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
  32. <false/>
  33. </dict>
  34. <key>sina.cn</key>
  35. <dict>
  36. <!-- 适配 iOS10 -->
  37. <key>NSExceptionMinimumTLSVersion</key>
  38. <string>TLSv1.0</string>
  39. <key>NSIncludesSubdomains</key>
  40. <true/>
  41. <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
  42. <false/>
  43. </dict>
  44. <key>weibo.cn</key>
  45. <dict>
  46. <!-- 适配 iOS10 -->
  47. <key>NSExceptionMinimumTLSVersion</key>
  48. <string>TLSv1.0</string>
  49. <key>NSIncludesSubdomains</key>
  50. <true/>
  51. <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
  52. <false/>
  53. </dict>
  54. <key>weibo.com</key>
  55. <dict>
  56. <!-- 适配 iOS10 -->
  57. <key>NSExceptionMinimumTLSVersion</key>
  58. <string>TLSv1.0</string>
  59. <key>NSIncludesSubdomains</key>
  60. <true/>
  61. <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
  62. <true/>
  63. <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
  64. <false/>
  65. </dict>
  66. <!-- 新浪微博-->
  67. </dict>
  68. </dict>

end