详解iOS社会化分享集成

时间:2022-11-16 12:59:17

最近项目需要加入第三方分享功能,看了网上的一些第三方sdk的介绍,觉得sharesdk是一个很强大方便的第三方工具,所以选择了sharesdk来完成。这里记录一下完整的集成与使用流程。

1.申请sharesdk的appkey以及第三方平台的appkey

sharesdk的appkey直接到mob官网申请即可

2、下载地址:

http://www.mob.com/downloaddetail/sharesdk/ios

下载的时候根据自己需求选择需要的平台,我这里选择的是默认分享视图,只测试微博,微信,qq。

详解iOS社会化分享集成

下载之后解压出来如下,我们需要导入项目的是这整个sdk资源文件:

详解iOS社会化分享集成

3.开始集成

(1)将上面下载的sdk文件夹拖进xcode项目里,如下图:

详解iOS社会化分享集成

详解iOS社会化分享集成

详解iOS社会化分享集成

注意:直接拖sdk进去请务必在上述步骤中选择“create groups ”单选按钮组。如果你选择“create folder references”,一个蓝色的文件夹引用将被添加到项目并且将无法找到它的资源。

(2)添加依赖库,添加步骤如下图:

详解iOS社会化分享集成

必须添加的依赖库如下(xcode 7 之后 .dylib库后缀名更改为.tbd):

?
1
2
3
4
libicucore.dylib
libz.dylib
libstdc++.dylib
javascriptcore.framework

以下依赖库根据社交平台添加:

新浪微博sdk依赖库

?
1
2
imageio.framework
 libsqlite3.dylib

qq好友和qq空间sdk依赖库

?
1
libsqlite3.dylib

微信sdk依赖库

?
1
libsqlite3.dylib

(3)设置sharesdk的appkey并调用初始化方法初始化对应的第三方社交平台

i.在项目工程的info.plist 中如图增加 mobappkey 和 mobappsecret 两个字段

在 mobappkey中 设置sharesdk的appkey,mobappsecret中 设置sharesdk的appsecret,如下图:

详解iOS社会化分享集成

ii.打开appdelegate.m(代表你的工程名字)导入头文件**

?
1
2
3
4
5
6
7
8
#import <span style="color: rgb(101, 123, 131); font-family: menlo; font-size: 9pt; line-height: 1.8em;"><sharesdk/sharesdk.h></span><br data-filtered="filtered"><sharesdk sharesdk.h=""> #import <span style="color: rgb(101, 123, 131); font-family: menlo; font-size: 9pt; line-height: 1.8em;"><sharesdkconnector/sharesdkconnector.h></span><sharesdkconnector sharesdkconnector.h="">
//腾讯开放平台(对应qq和qq空间)sdk头文件
#import <span style="color: rgb(101, 123, 131); font-family: menlo; font-size: 9pt; line-height: 1.8em;"> <tencentopenapi/tencentoauth.h></span><tencentopenapi tencentoauth.h="">
 #import <span style="color: rgb(101, 123, 131); font-family: menlo; font-size: 9pt; line-height: 1.8em;"><tencentopenapi/qqapiinterface.h></span><tencentopenapi qqapiinterface.h="">
//微信sdk头文件
#import "wxapi.h"
 //新浪微博sdk头文件
 #import "weibosdk.h"</tencentopenapi></tencentopenapi></sharesdkconnector></sharesdk>

 

iii.在- (bool)application: didfinishlaunchingwithoptions:方法中调用registeractiveplatforms方法来初始化

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
- (bool)application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions {**
 
  // override point for customization after application launch.
 
  [sharesdk registeractiveplatforms:@[
        @(ssdkplatformtypesinaweibo),
        @(ssdkplatformtypewechat),
        @(ssdkplatformtypeqq)]
     onimport:^(ssdkplatformtype platformtype)
  {
   switch (platformtype)
   {
    case ssdkplatformtypewechat:
     [sharesdkconnector connectwechat:[wxapi class]];
     break;
    case ssdkplatformtypeqq:
     [sharesdkconnector connectqq:[qqapiinterface class] tencentoauthclass:[tencentoauth class]];
     break;
    case ssdkplatformtypesinaweibo:
     [sharesdkconnector connectweibo:[weibosdk class]];
     break;
    default:
     break;
   }
  }     
 onconfiguration:^(ssdkplatformtype platformtype, nsmutabledictionary *appinfo)  {
   switch (platformtype)
   {   
    case ssdkplatformtypesinaweibo:
     //设置新浪微博应用信息,其中authtype设置为使用sso+web形式授权
     [appinfo ssdksetupsinaweibobyappkey:@"568898243"
          appsecret:@"38a4f8204cc784f81f9f0daaf31e02e3"
           redirecturi:@"http://www.sharesdk.cn"
            authtype:ssdkauthtypeboth];
     break;
    case ssdkplatformtypewechat:
     [appinfo ssdksetupwechatbyappid:@"wx4868b35061f87885"
        appsecret:@"64020361b8ec4c99936c0e3999a9f249"];
     break;
    case ssdkplatformtypeqq:
     [appinfo ssdksetupqqbyappid:@"100371282"
         appkey:@"aed9b0303e3ed1e27bae87c33761161d"
          authtype:ssdkauthtypeboth];
     break;
    default:
     break;
   }
  }];
 return yes;
 }

(4)添加分享代码

i.需要在分享的视图中导入的头文件

?
1
<span class="15" style="line-height: 1.8em; font-family: menlo; color: rgb(101, 123, 131); font-size: 9pt; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"> </span><span style="line-height: 1.8em; font-family: menlo; color: rgb(101, 123, 131); font-size: 9pt; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">#import <sharesdk/sharesdk.h></span>
?
1
#import <sharesdkui/sharesdk+ssui.h>

ii.调用构造分享参数接口和分享的接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//1、创建分享参数** nsmutabledictionary *shareparams = [nsmutabledictionary dictionary];
 [shareparams ssdksetupshareparamsbytext:@"分享内容"
         images:[[nsbundle mainbundle] pathforresource:@"cod13" oftype:@"jpg"]
          url:[nsurl urlwithstring:@"http://mob.com"]
         title:@"分享标题"
         type:ssdkcontenttypeauto];//2、分享(可以弹出我们的分享菜单和编辑界面)**
[sharesdk showshareactionsheet:nil //要显示菜单的视图, ipad版中此参数作为弹出菜单的参照视图,只有传这个才可以弹出我们的分享菜单,可以传分享的按钮对象或者自己创建小的view 对象,iphone可以传nil不会影响
       items:nil
     shareparams:shareparams
   onsharestatechanged:^(ssdkresponsestate state, ssdkplatformtype platformtype, nsdictionary *userdata, ssdkcontententity *contententity, nserror *error, bool end) {
     switch (state) {
      case ssdkresponsestatesuccess:
      {
       nslog(@"分享成功");
       break;
      }
      case ssdkresponsestatefail:
      {
       nslog(@"分享失败~~%@",error.description);
       break;
      }
      default:
       break;
     }
    }
  ];

(5)配置平台的url scheme

i.微信的url scheme的配置就是微信开放平台注册应用获取得到的appid,在url types中添加微信appid 即可;

ii.微博的url scheme的配置就是微博开放平台注册应用获取到的appkey,并在前面加wb前缀,格式为wb+appkey;

iii.qq的url scheme的配置就是腾讯开放平台注册应用获取到的appid,并且转成十六进制,另外在前面加qq前缀,格式为:qq+ appid的16进制(如果appid转换的16进制数不够8位则在前面补0,如转换的是:5fb8b52,则最终填入为:qq05fb8b52 ,则最终填入为:qq05fb8b52 注意:转换后的字母要大写)那么如何转换的,这个可以在网上找一个在线十进制转十六进制的转换器进行转换就可以,例如 http://www.sojson.com/hexconvert.html

具体配置见下图:

详解iOS社会化分享集成

(6)配置平台的白名单

在ios 9下涉及到平台客户端跳转,系统会自动到项目info.plist下检测是否设置平台scheme。对于需要配置的平台,如果没有配置,就无法正常跳转平台客户端。因此要支持客户端的分享和授权等,需要配置scheme名单。

具体方法:

1)、在项目的info.plist中添加一lsapplicationqueriesschemes,类型为array。

2)、然后给它添加一个需要支持的项目,类型为字符串类型;

详解iOS社会化分享集成

各平台****openurl****白名单说明

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
*新浪微博*
sinaweibo
sinaweibohd
sinaweibosso
sinaweibohdsso
weibosdk
weibosdk2.5
 
*微信*
wechat
weixin
 
*qq*
mqzoneopensdk
mqzoneopensdkapi
mqzoneopensdkapi19
mqzoneopensdkapiv2
mqqopensdkssologin
mqqopensdkapiv2
mqqopensdkapiv3
wtloginmqq2
mqqapi
mqqwpa
mqzone
mqq
mqqopensdkapiv4

(7)另外一些相关配置

**1)新浪微博,微信sdk都需要在项目的build settings中的other linker flags添加”-objc”,如果不配置有可能会崩溃。步骤如下: **

详解iOS社会化分享集成

2)新浪微博网页授权分享需要暂时退回到http协议。步骤如下:

具体方法:

在项目的info.plist中添加一个key:app transport security settings,类型为字典类型。

然后给它添加一个key:allow arbitrary loads,类型为boolean类型,值为yes;

详解iOS社会化分享集成

3)新浪微博客户端分享还需要在plist文件里添加隐私权限配置:相册权限:privacy - photo library usage description ,如下图:

详解iOS社会化分享集成

以上就是完整的集成步骤,到这里就结束了!很简单的吧!