swift使用swift sharesdkK分享为什么出现retryHandleOpenURL错误

主题 : 同时整合shareSDK与易信SDK 的问题
级别: 新手上路
可可豆: 102 CB
威望: 102 点
在线时间: 95(时)
发自: Web Page
同时整合shareSDK与易信SDK 的问题&&&
技术问题发到问答:我知道,我仍旧要在论坛继续发布问题
我在做一个社交分享的功能,用到了shareSDK,功能已经实现了,但是shareSDK目前不支持易信,我要单独加载易信的SDK,但是有如下方法冲突了,下面两个方法是使用shareSDK的要求加入的- (BOOL)application:(UIApplication *)application&&&&&&handleOpenURL:(NSURL *)url{&&&&return [ShareSDK handleOpenURL:url&&&&&&&&&&&&&&&&&&&&&&&&wxDelegate:self];}- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)&&&&sourceApplication annotation:(id)annotation{&&&&return [ShareSDK handleOpenURL:url&&&&&&&&&&&&&&&& sourceApplication:sourceApplication&&&&&&&&&&&&&&&&&&&&&&&&annotation:annotation&&&&&&&&&&&&&&&&&&&&&&&&wxDelegate:self];}下面两个函数是易信要求实现的,//- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url//{//&&&&return&&[YXApi handleOpenURL:url delegate:self];//}////- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation//{//&&&&return&&[YXApi handleOpenURL:url delegate:self];//}我怎么在这两个函数判断到底是要return&&ShareSDK 的handleOpenURL:url还是&&YXApi的handleOpenURL:url ?
级别: 侠客
可可豆: 750 CB
威望: 660 点
在线时间: 393(时)
发自: Web Page
给你的程序添加两个不同的url地址,根据里面的url地址来判断
级别: 新手上路
可可豆: 102 CB
威望: 102 点
在线时间: 95(时)
发自: Web Page
引用 引用第1楼jipinhuai于 23:07发表的&&:给你的程序添加两个不同的url地址,根据里面的url地址来判断 怎么给自己的程序添加URL地址啊?
级别: 侠客
可可豆: 750 CB
威望: 660 点
在线时间: 393(时)
发自: Web Page
就是在info。plist里面添加URL types;这里可以输入多个标示地址如下图:我使用@“cww://”或者@“chewuwang://”都可以打开在你的返回bool的方法里面- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation和- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url根据    NSString * sourceString=[url description];或者url的其他属性来做一下判断就可以了[ 此帖被jipinhuai在 11:36重新编辑 ]
图片:屏幕快照
上午11.23.29.png
级别: 新手上路
可可豆: 102 CB
威望: 102 点
在线时间: 95(时)
发自: Web Page
回 3楼(jipinhuai) 的帖子
级别: 侠客
可可豆: 508 CB
威望: 508 点
在线时间: 277(时)
发自: Web Page
ShareSDK昨日已发布新版本,新版本已经支持易信了
级别: 侠客
可可豆: 957 CB
威望: 957 点
在线时间: 153(时)
发自: Web Page
回 楼主(start4u) 的帖子
其实不用额外加URL SCHEME,只要判断改成if(![ShareSDK handleOpenURL:url&&&&&&&&&&&&&&&&&&&&&&&&wxDelegate:){ return&&[YXApi handleOpenURL:url delegate:self];}就可以了,SDK本身会做URLScheme的判断的,如果是它支持的才会返回YES。。。不过现在ShareSDK已经支持易信了
最右--------&&&&&
关注本帖(如果有新回复会站内信通知您)
论坛技术问题应该发布到? 正确答案:CocoaChina问答
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版iOS开发(26)
1.集成shareSDK的分享功能
1)在官网上根据需求(分享的平台,分享框的样式等)下载相应的SDK。
2)添加到项目中,添加相应的依赖库,参照官网的快速集成指南。
3)在所分享的各个平台申请id。这样分享信息的下面才会显示自己app的logo和name
4)在plist文件中配置URL Scheme & QQ+8位的十六进制,tencent+id,wx+id,sinaweibo.sso+id,等等
5)在appdelegate中初始化分享的平台信息,填充id 和appsecret信息
6)重写appdelegate代理方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
& & return [ShareSDK
handleOpenURL:url
&& & & & & & & &
wxDelegate:self];&
- (BOOL)application:(UIApplication *)application openURL:(NSURL
*)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
& & return [ShareSDK
handleOpenURL:url
sourceApplication:sourceApplication
&& & & & & & & &
annotation:annotation
&& & & & & & & &
wxDelegate:self];
2.集成js调用原生的分享功能
1)从官网上将demo下载下来,下载地址:,然后将.m和.h编译静态库,运行demo的分享功能是否已经实现;(文件找不到,都是没导进,或者路径的问题,检查路径是否正确,Framework
Search Paths这里通常填framework的路径,而Library Search Paths这里通常是填.a文件的路径)
2)或者直接将.m和.h文件导入到项目中;
3)匹配本地配置的分享平台信息与shareSDK后台的各个分享平台的信息是否一致
4)可调整分享平台的顺序
5)可调整分享的内容
6)如果分享,报如下错误
$sharesdk._callback({&method&:&showShareMenu&,&state&:2,&platform&:99,&seqId&:2,&end&:true,&error&.{&error_msg&:&传入参数无效&,&error_code&:-101,&error_level&:1}})
说明是从后台传过来的数据格式有问题,转成json文件失败,获取不到具体的参数信息。只能自行解析处理数据。
7)分享过程中弹出的提示框 &state==0,1,2,3分别代表开始,成功,失败,取消
8)分享到新浪微博时报的错误
16:03:03.270 UFenAssistant[5320:60b] $sharesdk._callback({&method&:&showShareMenu&,&state&:0,&platform&:1,&seqId&:3,&end&:false})
16:03:07.960 UFenAssistant[5320:60b] $sharesdk._callback({&method&:&showShareMenu&,&state&:2,&platform&:1,&seqId&:3,&end&:true,&error&:{&error_msg&:&does multipart has image?&,&error_code&:20007,&error_level&:1}})
说明,传的图片的地址新浪微博解析不出来,会失败,可能是你的图片的url(测试地址,内网),新浪访问不了,再就是将ip换成域名即可。
9)短信平台是不可以分享图片的,带图片不会自动转为彩信。(iOS不允许开发者自己发送彩信的,会过滤掉图片,安卓可以)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7444次
排名:千里之外
原创:22篇
转载:14篇
(2)(3)(3)(4)(2)(8)(7)(6)(1)程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之IOS&Andoird使用Sharesdk遇到的坑
Unity3D研究院之IOS&Andoird使用Sharesdk遇到的坑
围观28730次
编辑日期: 字体:
这两天研究了一下ShareSDK,说实话挺好用的,但是还是有点坑的地方。那么雨松MOMO写下博文记录一下来我遇到的坑,嘿嘿。
大部分内容它的文档上已经说的很清楚了。
这里我直说文档上没说的部分。
分享图片的时候 它的例子写的是 网络图片。
content[“image”] = “/img/image/zhenrenmeinv0207.jpg”;
但是实际游戏里一般的需求是 分享一张本地图片,或者分享一张截屏后的图片。
先说我遇到的坑,我把图片放在 StreamingAssets文件夹下面,写入下面的代码。
content[“image”] = Application.streamingAssetsPath+”/Share.png”;
打包在IOS上,分享微博,微信朋友圈都没问题。但是我在切换到android平台,这样的方法死活就会报错。理论上StreamingAssets 是一个应用程序只读的文件夹,技术上完全可以做到的,不知道为什么sharesdk做不到。后来我咨询了一个他们的技术。他给我的答案是:
既然原因知道了,那么就好办了,我需要在分享前把u3d里的图片拷贝到sdcard卡里面。
在Resources文件夹下放一个图片记住一定要PNG,在U3D里面把图片的格式修改成RGBA。
//读、写的路径
string imagePath = Application.persistentDataPath + "/0.png";//如果文件不存在,把它拷贝进去。if(!System.IO.File.Exists(imagePath)){ Texture2D o =&&Resources.Load("0") as Texture2D; System.IO.File.WriteAllBytes(imagePath, o.EncodeToPNG());}
这样在分享图片的时候
//image的路径就可以直接写了。
string imagePath = Application.persistentDataPath + "/0.png";if(System.IO.File.Exists(imagePath)){ content["image"] = imagePath;}
这里再说一下,如果你想分享的是一张截屏图片,路径这样来写。
Application.CaptureScreenshot("screen.png");
content["image"] = Application.persistentDataPath + "/screen.png";
为了让安卓和iPhone的通用性,所以我只能把Resources一张需要分享的图片拷贝到Application.persistentDataPath 路径下面。
如下图所示, 微博 朋友圈都分享成功了,朋友圈的图我就不截了。
下面上完整代码
另外 appid和 appkey我都用了sharesdk自带的,最好自己申请一下。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
using UnityEngine;using System.Collections;using cn.sharesdk.unity3d;using System;public class NewBehaviourScript : MonoBehaviour { void Awake ()
ShareSDK.setCallbackObjectName("SDK");
ShareSDK.open ("api20");
//新浪微博
Hashtable sinaWeiboConf = new Hashtable();
sinaWeiboConf.Add("app_key", "");
sinaWeiboConf.Add("app_secret", "38a4ff9f0daaf31e02e3");
sinaWeiboConf.Add("redirect_uri", "");
ShareSDK.setPlatformConfig (PlatformType.SinaWeibo, sinaWeiboConf);
//微信朋友圈
Hashtable weixinConf = new Hashtable();
weixinConf.Add("app_id", "wxf87885");
ShareSDK.setPlatformConfig (PlatformType.WeChatTimeline, weixinConf);
//拷贝图片
string imagePath = Application.persistentDataPath + "/0.png";
if(!System.IO.File.Exists(imagePath))
Texture2D o =&&Resources.Load("0") as Texture2D;
System.IO.File.WriteAllBytes(imagePath, o.EncodeToPNG());
} }& void OnGUI() {
//分享微信
if(GUILayout.Button("weixin",GUILayout.Width(100), GUILayout.Height(100)))
NewBehaviourScript.TryShareMessage(PlatformType.WeChatTimeline,"Unity3D接入shardSdk 看看能不能成功。",ShareResultHandler);
//分享微博
if(GUILayout.Button("weibo",GUILayout.Width(100), GUILayout.Height(100)))
NewBehaviourScript.TryShareMessage(PlatformType.SinaWeibo,"Unity3D接入shardSdk 看看能不能成功。",ShareResultHandler);
}& }& void ShareResultHandler (ResponseState state, PlatformType type, Hashtable shareInfo, Hashtable error, bool end) {
if (state == ResponseState.Success)
print ("分享成功");
print (MiniJSON.jsonEncode(shareInfo));
else if (state == ResponseState.Fail)
print ("分享失败");
print ("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]);&
else if (state == ResponseState.Cancel)
print ("cancel !");
} }& public&&static void TryShareMessage(PlatformType type,string text,ShareResultEvent ShareResultHandler) {
string imagePath = Application.persistentDataPath + "/0.png";
Hashtable content = new Hashtable();
content["content"] = text;
if(System.IO.File.Exists(imagePath))
content["image"] = imagePath;
content["title"] = "雨松MOMO程序研究院";
content["url"] = "";
content["type"] = Convert.ToString((int)ContentType.News);
ShareResultEvent evt = new ShareResultEvent(ShareResultHandler);
ShareSDK.shareContent (type, content, evt); }}
最后我在上u3d工程的包 ,已经在IOS和Android上测试通过。
6月6日补充
这个例子前段时间做完了,因为我策划还没有确定完需求,所以一直没再项目上加这个东西。 今天加到我游戏里面才发现,真的是问题多多呀。。
主要是微信,安卓到没什么问题。
你必须要在ShareSDK上注册一个号
然后创建你的游戏,分成安卓和IOS。
#if UNITY_IPHONE
cn.sharesdk.unity3d.ShareSDK.open ("xxxxxx"); #else
cn.sharesdk.unity3d.ShareSDK.open ("xxxxxx"); #endif
xxxxxx就是你申请的ID,如果你不申请ID的话就只能用它的默认ID,即时你配了你自己申请的微信的APPID 那么还是会报错 :warning: 尚未配置微信URL Scheme:wxf87885, 无法进行分享。 所以一定要在ShareSdk的官网上注册你自己的游戏。
还有就是我用微信分享,无论我点击分享或者点击取消分享。ShardSdk永远都给我返回一个 Cancel的状态,那么我就没办法获取用户是否分享成功的事件。。 我咨询了一下它们的客服。。他告诉我:
12345678910111213
打开AppController.mm文件,添加ShareSDK.h头文件:&#import &ShareSDK/ShareSDK.h&新增handleOpenURL的处理方法,代码如下:&- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{&&&&return [ShareSDK handleOpenURL:url wxDelegate:nil];}&- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{&&&&return [ShareSDK handleOpenURL:url sourceApplication:sourceApplication annotation:annotation wxDelegate:nil];}
这样问题就来了,因为 AppController.mm文件 是Unity自动生成的,我不能随意修改因为他会打断我写的自动化批量打包工具。。
建议大家使用XUPorter 这样的话可以打完包以后自己用代码上面的代码写在AppController.mm里面。
本文固定链接:
转载请注明:
MOMO与MO嫂提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!ios sharesdk分享功能怎么做_百度知道
ios sharesdk分享功能怎么做
我有更好的答案
  1.在 ShareSDK()的官方上下载 SDK 并导入工程 将 ShareSDK 文件夹到项目文件夹中夹并拖入项目中。
  2. 添加依赖框架(Framework) 打开项目设置中的 Build Phases 页,在“Link Binary With Libraries”一栏中,点击左下角的“+” 号;在弹出窗口里面分别以下库加入到项目中: SystemConfiguration.framework QuartzCore.framework MessageUI.framework libicucore.dylib
  3.引入社区应用配置信息。 打开 main.m 文件加入
  #import
  如图:
  (P.S. 此头文件必须在此文件下导入,否则会导致编译不通过) 4. 配置所有社交平台的 AppKey 打开 ShareSDKConfig.h 文件,根据需求设置各个平台的 App 相关信息(每个平台的 App 都需要到相 应平台上进行应用登记后来...
其他类似问题
为您推荐:
ios的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 handleopenurl 不执行 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信