ShareSDK分享失败的原因

关于分享估计很多都用的是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

设置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。比如下图:

设置新浪微博:

还需要这样

这样基本上就可以了。

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

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

<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>wechat</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>
</array>

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

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

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

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

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

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

如图:

时间: 2024-10-12 18:45:13

ShareSDK分享失败的原因的相关文章

iOS9 适配网络请求,适配分享失败,适配无法正常跳转到客户端

问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据.对ShareSDK来说,具体表现可能是,无法授权.分享.获取用户信息等. 还可能造成我们的编辑界面里传http之类的网络图片的时候,我们的编辑界面不会显示图片截图,解决的办法或者全面关闭https,允许使用http请求:或者把图片的域添加:又或者选择使用https的图片 解决方案(以下方法2选1): (1).暂时退回到http协议. 具体方法: 在项目的info.plist中添加一个Key:NSA

总结shareSDK分享到各平台需注意

总结shareSDK分享到各平台需注意: 1.apk签名文件和平台上使用签名工具生成的key是否一致 2.使用OnekeyShare类可设置一键分享的内容属性 3.若要修改shareSDK的分享内容界面,在EditPage.java类中 4.若想禁用分享九宫格中的某个平台,可是shareSDK.xml文件中设置Enable="false" 注:设置为false后,表明该平台在shareSDK中去除,即不可使用,若仅仅是需要使图标不显示,可在配置OnekeyShare的参数时,使用该对象

使用Unity3D是创业团队失败的原因吗?

第一个项目虽然失败了,但是最起码成功上线,并且获得了一定的收入(虽然杯水车薪),也因为第一个项目拉来了投资.但是第二个项目就彻彻底底的胎死腹中了. 没有检讨.没有总结,大家自然而然而又兴高采烈的开启了第三个项目. 我感到有些悲哀.如果我们都不知道自己的弱点在哪里,不明白自己的优势在哪里,如何能够扬长避短?一个创业团队难道靠硬推能推出一款游戏吗? 第二个项目是打算山寨<公主篷特2>,是一款<愤怒小鸟>玩法的带rpg元素的手游.<公主>就是拿Unity做的,并且有一定的3D

CentOs 6.6里kdump启动失败的原因

在VMware中新安装了CentOs 6.6,重启系统发现kdump服务启动失败 先来说一下,什么是kdump kdump 是一种先进的基于 kexec 的内核崩溃转储机制.当系统崩溃时,kdump 使用 kexec 启动 到第二个内核.第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像.第一个内核保 留了内存的一部分给第二内核启动用.由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所 以第一个内核的内存得以保留.这是内核崩溃转储的本质. 启动失败的原因 查看 /etc

系统启动失败的原因分析及解决办法

系统启动失败的原因分析及解决办法 原因分析: 可能是配置文件/etc/fstab中错误了. 查看/etc/fstab配置文件内容: [[email protected] ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Mon Nov  7 18:40:55 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错. (异常来 自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY)) 经过多般折腾,还是没什么更好的办法.

adb 启动失败的原因和修改adb端口号

在我们使用Android Studio的时候,有时候就会出现adb打开失败或者启动不了的情况. adb 启动失败的原因:有其他程序占用了adb默认启动的端口号(像我就遇到过,每次只要提前启动了酷狗音乐,adb就会启动失败~这是要我们专心写代码,不要边听歌边撸0.0) 打不开的情况下的解决方案就是打开Android Studio的Terminal终端 使用以下命令: //关闭adb服务 adb kill-server //再重启adb服务 adb start-server 结果:(终端输出以下代码

数据库连接失败的原因及解决方法

各种业务系统在使用过程中都会遇到一些问题,因数据库连接失败,不能登录管理软件就是其中之一,这个很令人头疼而且常见的问题 一般的业务系统均采用的是SQL数据库,我们这里总结了SQL数据库连接失败的原因和解决方法: 原因一:登录账号.密码.服务器名称.数据库名称登录错误导致不能连接,这个比较常见,仔细检查好所填信息是否正确,填写正确一般就可以解决. 解决方法:当正在使用的软件出现数据库不能连接时,一般就是服务器名出现问题,更改服务器名称一般可以解决问题.数据库如果是安装在本机,服务器名可以用".&q

linux下使用crontab实现定时PHP计划任务失败的原因分析

这篇文章主要介绍了linux下使用crontab实现定时PHP计划任务失败的原因分析,需要的朋友可以参考下 很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存.本文就linux下使用crontab实现定时PHP计划任务失败的原因做一分析. 一般我们linux定时执行php代码例如: 1 */5 * * * * /usr/local/php/bin/php /home/wwwroot/1.php 其实这样是可以执行php代码的. 但是为什么很多朋友在1.php写的