ShareSDK分享失败的原因

简介: 关于分享估计很多都用的是ShareSDK的社会化分享,简单方便,支持的种类很多,但是一般的话都还是QQ,微信,新浪微博,腾讯微博为主。       最近需要导入一个分享的模块,失败了几次之后最终成功,分享给大家,让大家少走一些弯路,让大家更快的搞定IOS分享的问题。



    关于分享估计很多都用的是ShareSDK的社会化分享,简单方便,支持的种类很多,但是一般的话都还是QQ,微信,新浪微博,腾讯微博为主。

 

    最近需要导入一个分享的模块,失败了几次之后最终成功,分享给大家,让大家少走一些弯路,让大家更快的搞定IOS分享的问题。

 

步骤如下:

 

  1. 先下载ShareSDK。

  2. 导入项目

  3. 导入所需要的一些库文件

  4. 去各个开放平台注册自己的APPKey,创建自己的应用。

  5. 最后到项目里配置各个平台的AppKey等等。

     

进入正文:

 

    1.注册ShareSDK的账号,然后创建自己的应用(要用到APPKey),下载ShareSDK:http://sharesdk.mob.com/#/sharesdk,然后解压,导入自己的项目里,接着就是按照官网上的添加额外的依赖库,剩下的就是怎么把分享功能实现。

 

    2.注册各个平台的AppKey

 

    首先要注册账号,再接着创建应用,找到对应的AppKey即可。下面是比较常用的三个平台的链接。

 

QQ:http://open.qq.com/

微信:http://open.weixin.qq.com/

新浪微博:http://open.weibo.com/

 

    3.在代码里注册ShareSDK还有各个平台。

    首先要导入头文件

#import <ShareSDK/ShareSDK.h>
#import <ShareSDKConnector/ShareSDKConnector.h>
#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/TencentOAuth.h>
#import "WXApi.h"
#import "WeiboSDK.h"

    接着只要在下面的这个方法里加入这段代码就可以了

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions ;这个方法里加入这段代码就可以(AppKey需要填写自己的新浪微博还有回调地址都要一样)。

    

    代码如下:

[ShareSDK registerApp:@"你注册的ShareSDKAppKey" activePlatforms:
                            //分享的平台,这里只有新浪微博,QQ,微信
                            @[
                            @(SSDKPlatformTypeSinaWeibo),
                            @(SSDKPlatformTypeWechat),
                            @(SSDKPlatformTypeQQ)
                            ]
                 onImport:^(SSDKPlatformType platformType)
                {
                     switch (platformType)
                     {
                         //同样这里和上面一一对应
                         case SSDKPlatformTypeSinaWeibo:
                             [ShareSDKConnector connectWeibo:[WeiboSDK class]];
                             break;
                         case SSDKPlatformTypeWechat:
                             [ShareSDKConnector connectWeChat:[WXApi class]];
                             break;
                         case SSDKPlatformTypeQQ:
                             [ShareSDKConnector connectQQ:[QQApiInterface class] tencentOAuthClass:[TencentOAuth class]];
                             break;
                         default:
                             break;
                     }
                 }
                onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo)
                {
                    switch (platformType)
                    {
                        //这里也是一样和上面一一对应
                        case SSDKPlatformTypeSinaWeibo:
                         //设置新浪微博应用信息,其中authType设置为使用SSO+Web形式授权
                            [appInfo SSDKSetupSinaWeiboByAppKey:@"新浪微博的AppKey" appSecret:@"新浪微博的Secret" redirectUri:@"回调地址" authType:SSDKAuthTypeBoth];
                            break;
                        case SSDKPlatformTypeWechat:
                         //设置微信应用信息
                         [appInfo SSDKSetupWeChatByAppId:@"微信的AppId" appSecret:@"微信的Secret"];
                            break;
                        case SSDKPlatformTypeQQ:
                         //设置QQ应用信息,其中authType设置为只用SSO形式授权
                        [appInfo SSDKSetupQQByAppId:@"QQ的AppId" appKey:@"QQ的AppKey" authType:SSDKAuthTypeSSO];
                            break;
                        default:
                            break;
                    }
                }
     ];

 

    4.接着就是写分享的参数(就是触发分享事件的地方,来调用分享的界面)。

 

     首先也要导入头文件

#import <ShareSDK/ShareSDK.h>
#import <ShareSDKConnector/ShareSDKConnector.h>
#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/TencentOAuth.h>
#import "WXApi.h"
#import "WeiboSDK.h"

    接着只要在下面的这个方法里加入这段代码就可以了

    将下面的这段代码放到触发点击事件的那个地方就可以。

    //1、创建分享参数
    NSArray* imageArray = @[[UIImage imageNamed:@"分享时的图片"]];
    //(注意:图片必须要在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:@"分享的网址"] title:@"分享的标题" type:SSDKContentTypeAuto];
        
        //2、分享(可以弹出我们的分享菜单和编辑界面)
        //要显示菜单的视图, iPad版中此参数作为弹出菜单的参照视图,只有传这个才可以弹出我们的分享菜单,可以传分享的按钮对象或者自己创建小的view 对象,iPhone可以传nil不会影响
        [ShareSDK showShareActionSheet: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;
            }
        }];
    }

 

    5.设置调用QQ微信和微博客户端

 

如图:

设置微信:微信的AppID前面要加上wx 

55BDA8FD-90BF-472B-999C-4C57680AB210.png

 

 

设置QQ:

 

在URL Types中添加QQ的AppID,其格式为:”QQ” + AppId的16进制(如果appId转换的16进制数不够8位则在前面补0,如转换的是:5FB8B52,则最终填入为:QQ05FB8B52 注意:转换后的字母要大写) 转换16进制的方法:echo 'ibase=10;obase=16;801312852'|bc,其中801312852为QQ的AppID。比如下图:

 

9406F13D-F78B-4261-A52B-CFBC7ECF4890.png

 

80548F94-3DAE-45D5-9627-A76E9D514585.png

 

 

设置新浪微博:

 

49C4BF10-26ED-4553-9626-7110A15B8B9A.png

 

还需要这样

 

8.png

 

这样基本上就可以了。

 

重点来了,如果这样还是不能分享的话可能是因为你没有把QQ和微信加入白名单

 

在项目的plist文件中添加如下内容(白名单):

<key>LSApplicationQueriesSchemes</key>
	<array>
		<string>wechat</string>
		<string>weixin</string>
		<string>mqzoneopensdk</string>
		<string>mqzoneopensdkapi</string>
		<string>mqzoneopensdkapi19</string>
		<string>mqzoneopensdkapiV2</string>
		<string>mqqOpensdkSSoLogin</string>
		<string>mqqopensdkapiV2</string>
		<string>mqqopensdkapiV3</string>
		<string>wtloginmqq2</string>
		<string>mqqapi</string>
		<string>mqqwpa</string>
		<string>mqzone</string>
		<string>mqq</string>
		<string>sinaweibo</string>
		<string>sinaweibohd</string>
		<string>sinaweibosso</string>
		<string>sinaweibohdsso</string>
		<string>weibosdk</string>
		<string>weibosdk2.5</string>
		<string>TencentWeibo</string>
		<string>tencentweiboSdkv2</string>
	</array>

  

 

如果你的项目是一个新项目还没写网络请求的话那还有一段也要加上

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

 

 

这样的话基本上应该就没有什么问题了,QQ和微信必须用带有QQ和微信的真机才能出来,所以模拟器是出不来QQ和微信的。

 

 

等你的应用上线的时候一定要把你各个平台的信息统一一下,防止出错。

 

剩下的就是等你的应用审核通过之后把各个平台的在看一下,有的还需要审核。

 

还有就是ShareSDK默认显示是英语,还需要在本地化一个汉语,

如图:

 

wKioL1fOyu_Ai_s5AAM6qht1R6s708.png

 

相关文章
|
7月前
|
API 开发工具 Android开发
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
151 0
|
12月前
|
iOS开发 开发者
iOS 微信分享取消分享后返回分享成功原因
iOS 微信分享取消分享后返回分享成功原因
174 0
|
12月前
|
iOS开发
iOS短信验证码控件,自动输入回调两次解决办法
iOS短信验证码控件,自动输入回调两次解决办法
323 0
|
数据安全/隐私保护 开发者 iOS开发
上传ipa到appstore最简单的方法
假如你是用xcode做原生开发,用xcode上传即可。可是假如我们使用uniapp框架开发或使用hbuilderx的mui开发,打包成ipa后,需要mac电脑才能将ipa上传到app store,而我们大多数人都是使用windows开发,那么有没有办法使用windows电脑上传ipa到app store呢?答案是肯定可以的。
291 0
上传ipa到appstore最简单的方法
|
API iOS开发
iOS开发-SDWebImage的回调不addSubView不会调用
iOS开发-SDWebImage的回调不addSubView不会调用
61 0
iOS开发-SDWebImage的回调不addSubView不会调用
|
数据安全/隐私保护 API
Xamarin.Android 使用AsyncTask提示上传动态
  我们有时候会通过WebServices上传数据,如果信息量过大并没有提示,用户会觉得是死机,或是系统崩溃,这时候我们可以用到AsyncTask(异步任务)来提示上传信息,例如:正在上传数据...   这里是官方对AsyncTask的详细文档:https://developer.
1126 0
|
API
iOS使用锁屏监听的私有API被拒 com.apple.springboard.lockcomplete
最近公司有个项目需要对锁屏进行监控以便进行一些操作,然后在更新新版本的时候,审核竟然被拒绝了。原因竟然是调用了 Apple 不允许使用的 锁屏API ,如下方法一;后来改成方法二,终于审核通过了。
3923 0
|
图形学
Unity插件-ShareSDK使用指南
Unity插件ShareSDK使用教程 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) 1 Summarize —— 概述 支持 May Be —— 搞开发,总有一天要做的事! 1 Summarize —— 概述 这个步骤详细介绍极其复查! 我在考虑视频,博客的话要写好多。
1526 0