iOS 集成 ShareSDK 分享

最近在项目中集成了分享的功能,坑还是挺多的,总结一下。

下载SDK

首先下载官网的 SDK。可以把 Demo 一并下载,看着官方的示例程序来做,遇到坑再回头看看我的流程。

下载地址:http://www.mob.com/#/downloadDetail/ShareSDK/ios

选择要集成到项目中的分享


iOS 集成 ShareSDK 分享_第1张图片
选择需要集成的项目.png

在项目中集成SDK

直接把 ShareSDK 文件目录拖入自己的项目中,注意选择的方式,如图所示。可以在平台文件夹里面,删除一些自己不想集成的分享。

iOS 集成 ShareSDK 分享_第2张图片
要拖入的文件夹
iOS 集成 ShareSDK 分享_第3张图片
拖入项目的方式

加入所需的依赖库

在项目中打开如图所示界面,可以看到已经引入了一些依赖,这些是刚才拖入 SDK 文件夹的时候自动就引入进去的。

iOS 集成 ShareSDK 分享_第4张图片
添加依赖库的方式

还有另外一些需要自己手动加进入,其中必须添加的依赖库如下。(注意:Xcode 7 下 .dylib库后缀名更改为.tbd)

必须引入的:
libicucore.dylib
libz.dylib
libstdc++.dylib
JavaScriptCore.framework

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

新浪微博SDK依赖库 
ImageIO.framework
libsqlite3.dylib
QQ好友和QQ空间SDK依赖库 
libsqlite3.dylib
微信SDK依赖库 
libsqlite3.dylib
短信和邮件需要依赖库 
MessageUI.framework

设置 AppDelegate.m 文件

这些头文件,在AppDelegate.m文件里面引入。

#import 
#import 
 
//腾讯开放平台(对应QQ和QQ空间)SDK头文件
#import 
#import 
 
//微信SDK头文件
#import "WXApi.h"
 
//新浪微博SDK头文件
#import "WeiboSDK.h"
//新浪微博SDK需要在项目Build Settings中的Other Linker Flags添加"-ObjC"
 
//人人SDK头文件
#import 

didFinishLaunchingWithOptions方法中加入如下代码。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    /**
     *  设置ShareSDK的appKey,如果尚未在ShareSDK官网注册过App,请移步到http://mob.com/login 登录后台进行应用注册
     *  在将生成的AppKey传入到此方法中。
     *  方法中的第二个第三个参数为需要连接社交平台SDK时触发,
     *  在此事件中写入连接代码。第四个参数则为配置本地社交平台时触发,根据返回的平台类型来配置平台信息。
     *  如果您使用的时服务端托管平台信息时,第二、四项参数可以传入nil,第三项参数则根据服务端托管平台来决定要连接的社交SDK。
     */

    // 这里的iosv1101要替换成你在ShareSDK官网注册时得到的AppKey
    [ShareSDK registerApp:@"iosv1101"
     
          // 这个数组装的都是分享时会展示出来的应用,可以根据自己需要来进行删减,比如 GooglePlus 我一般就删掉了
          activePlatforms:@[
                            @(SSDKPlatformTypeSinaWeibo),
                            @(SSDKPlatformTypeMail),
                            @(SSDKPlatformTypeSMS),
                            @(SSDKPlatformTypeCopy),
                            @(SSDKPlatformTypeWechat),
                            @(SSDKPlatformTypeQQ),
                            @(SSDKPlatformTypeRenren),
                            @(SSDKPlatformTypeGooglePlus)]
                 onImport:^(SSDKPlatformType platformType)
     { 
        // 改动以下代码要注意,一个case对应一个break
         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;
             case SSDKPlatformTypeRenren:
                 [ShareSDKConnector connectRenren:[RennClient class]];
                 break;
             default:
                 break;
         }
     }
          onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo)
     {
         
        // 以下的AppKey和appSecret都是 ShareSDK 官方程序带的,测试的时候可以用用,建议用自己去申请的。QQ、微信、微博授权都得分别去对应的开发者平台去申请
         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;
             case SSDKPlatformTypeRenren:
                 [appInfo        SSDKSetupRenRenByAppId:@"226427"
                                                 appKey:@"fc5b8aed373c4c27a05b712acba0f8c3"
                                              secretKey:@"f29df781abdd4f49beca5a2194676ca4"
                                               authType:SSDKAuthTypeBoth];
                 break;
             // 如果上面代码已经把 GooglePlus 排除掉了,那么这里也要删除,不过不删除也没什么
             case SSDKPlatformTypeGooglePlus:
                 [appInfo SSDKSetupGooglePlusByClientID:@"232554794995.apps.googleusercontent.com"
                                           clientSecret:@"PEdFgtrMw97aCvf0joQj7EMk"
                                            redirectUri:@"http://localhost"];
                 break;
             default:
                 break;
         }
     }];
    return YES;
}

调用分享功能

代码上配置就结束了,接下来在你需要进行分享操作的地方,做以下操作。

引入头文件

#import 
#import 

分享

// 1、创建分享参数
NSArray* imageArray = @[[UIImage imageNamed:@"shareImg.png"]];
//(注意:图片必须要在Xcode左边目录里面,名称必须要传正确,如果要分享网络图片,可以这样传iamge参数 images:@[@"http://mob.com/Assets/images/logo.png?v=20150320"])
    if (imageArray) {
        
        NSMutableDictionary *shareParams = [NSMutableDictionary dictionary];
        [shareParams SSDKSetupShareParamsByText:@"分享内容"
                                         images:imageArray
                                            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:
                           {
                               UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"分享成功"
                                                                                   message:nil
                                                                                  delegate:nil
                                                                         cancelButtonTitle:@"确定"
                                                                         otherButtonTitles:nil];
                               [alertView show];
                               break;
                           }
                           case SSDKResponseStateFail:
                           {
                               UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"分享失败"
                                                                               message:[NSString stringWithFormat:@"%@",error]
                                                                              delegate:nil
                                                                     cancelButtonTitle:@"OK"
                                                                     otherButtonTitles:nil, nil];
                               [alert show];
                               break;
                           }
                           default:
                               break;
                       }
                   }
         ];}

代码排版稍微有点乱,官方示例程序就是这个样子,大家可以根据自己的喜好进行排版或者重构。到此为止代码上的配置就完成了,接下来才是重头戏,各种问题的解决。

小部分社交平台SDK不支持bitcode。

问题描述:iOS 9 新建项目默认需要支持 bitcode,而不支持 bitcode 的 SDK 会导致无法编译运行。

支持 bitcode 的 SDK:
1、微信SDK
2、QQ SDK
3、新浪微博SDK
4、支付宝SDK
5、Kakao SDK
6、Facebook Messenger

不支持 bitcode:
1、易信 SDK
2、人人 SDK

解决方案:

  • 移除不支持bitcode的平台SDK(这个简单粗暴)
  • 暂时关闭对bitcode的支持(为了分享成功,做什么都愿意),操作如下图:
iOS 集成 ShareSDK 分享_第5张图片
Paste_Image.png

好不容易编译成功,运行报错了,错误如下:

iOS 集成 ShareSDK 分享_第6张图片
报错

解决方式,如图:
1、在plist文件添加节点:App Transport Security Settings。
2、在刚才添加的节点下,添加:Allow Arbitrary Loads,值为YES。

iOS 集成 ShareSDK 分享_第7张图片
Paste_Image.png

接着继续运行,出现了另外的问题,如下:

iOS 集成 ShareSDK 分享_第8张图片
Paste_Image.png

解决方案:

1、编辑如图所示的值,删除armv7s。


iOS 集成 ShareSDK 分享_第9张图片
Paste_Image.png

2、在Other Linker Flags 中添加 ObjC 。


iOS 集成 ShareSDK 分享_第10张图片
Paste_Image.png

这样就可以编译成功并且成功运行了,如图。

注意:要先在真机上安装了QQ、微信等社交软件,ShareSDK弹出的菜单才会有相应的图标。

iOS 集成 ShareSDK 分享_第11张图片
IMG_0035.PNG

界面可以显示了,但实际分享的时候还是会报错,如图:

iOS 集成 ShareSDK 分享_第12张图片
QQ分享报错

需要在plist文件进行如下配置:

配置 plist 文件里面的白名单和 URL Scheme 的设置

具体配置如图所示,我会把相应的XML文件放在下面,大家可以直接复制粘贴,注意别影响到你项目中已有的配置文件。


iOS 集成 ShareSDK 分享_第13张图片
Paste_Image.png

解释几点:URL Schemes里wx开头的那串,代表微信。tencent 100371282是对应的是QQ空间,QQ05FB8B52对应QQ好友分享。100371282是你在腾讯申请的APP ID,05FB8B52是AppID的16进制(如果AppID转换的16进制数不够8位则在前面补0,如转换的是:5FB8B52,则最终填入为:QQ05FB8B52 注意:转换后的字母要大写),转换方式如图:
在终端输入:

echo 'ibase=10;obase=16;100371282'|bc

接下来配置LSApplicationQueriesSchemes,添加的条目如图所示,以下是我的plist的XML文件。





    CFBundleURLTypes
    
        
            CFBundleTypeRole
            Editor
            CFBundleURLSchemes
            
                wx4868b35061f87885
                tencent100371282
                QQ05FB8B52
            
        
    
    LSApplicationQueriesSchemes
    
        wechat
        weixin
        mqqapi
        mqq
        mqqOpensdkSSoLogin
        mqqconnect
        mqqopensdkdataline
        mqqopensdkgrouptribeshare
        mqqopensdkfriend
        mqqopensdkapi
        mqqopensdkapiV2
        mqqopensdkapiV3
        mqzoneopensdk
        wtloginmqq
        wtloginmqq2
        mqqwpa
        mqzone
        mqzonev2
        mqzoneshare
        wtloginqzone
        mqzonewx
        mqzoneopensdkapiV2
        mqzoneopensdkapi19
        mqzoneopensdkapi
        mqqbrowser
        mttbrowser
    
    NSAppTransportSecurity
    
        NSAllowsArbitraryLoads
        
    
    CFBundleDevelopmentRegion
    en
    CFBundleExecutable
    $(EXECUTABLE_NAME)
    CFBundleIdentifier
    $(PRODUCT_BUNDLE_IDENTIFIER)
    CFBundleInfoDictionaryVersion
    6.0
    CFBundleName
    $(PRODUCT_NAME)
    CFBundlePackageType
    APPL
    CFBundleShortVersionString
    1.0
    CFBundleSignature
    ????
    CFBundleVersion
    1
    LSRequiresIPhoneOS
    
    UILaunchStoryboardName
    LaunchScreen
    UIMainStoryboardFile
    Main
    UIRequiredDeviceCapabilities
    
        armv7
    
    UISupportedInterfaceOrientations
    
        UIInterfaceOrientationPortrait
        UIInterfaceOrientationLandscapeLeft
        UIInterfaceOrientationLandscapeRight
    



总的来说,ShareSDK 的官方文档还是足够清晰了。大家有什么其他的BUG欢迎留言分享。

你可能感兴趣的:(iOS 集成 ShareSDK 分享)