handleopenurl 不执行这个方法,怎么使用

推荐这篇日记的豆列
······handleOpenURL与OPenURL
OpenURL是你通过打开一个url的方式打开其它的应用或链接,handleOpenURL是其它应用通过调用你的app中设置的URL scheme打开你的应用。如果你使用过第三方分享SDK,你应该知道需要在AppDelegate中实现handleOpenURL方法,例如微信的分享,你在你的app中点击了分享,就会跳转到微信,这就是一个openURL的过程调起第三方应用,如果你分享成功或者取消分享返回到自己的app,这时你AppDelegate中的handleOpenURL的方法就会被调用,在这个方法中你可以根据实际需要实现你想要做的事
最新教程周点击榜
微信扫一扫handleOpenUrl 这个方法,怎么使用_百度知道
handleOpenUrl 这个方法,怎么使用
提问者采纳
用&?xml version=&1.0& encoding=&UTF-8&?&&!DOCTYPE plist PUBLIC &-//Apple//DTD PLIST 1.0//EN& &&&&plist version=&1.0&&&array&
&key&哗旦糕秆蕹飞革时宫江CFBundleURLName&/key&
&string&&/string&
&key&CFBundleURLSchemes&/key&
&string&schemes&/string&
&/dict&&/array&&/plist&返回的时候程序调用把上面这段加到info.plist里面,你在ip的safari上输入schemes://就会自动跳转到程序并执行delegate
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之IOS&Andoird使用Sharesdk遇到的坑
Unity3D研究院之IOS&Andoird使用Sharesdk遇到的坑
围观33245次
编辑日期: 字体:
这两天研究了一下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提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!iOS小记--retryHandleOpenURL - 简书
下载简书移动应用
写了37650字,被12人关注,获得了16个喜欢
iOS小记--retryHandleOpenURL
在做qq的第三方登录时遇到这个问题,配置什么的都ok了,一分以前的代码是可以work的,用pods管理了sdk然后就悲剧了。log里只有一句这个“retryHandleOpenURL”。找了下api,发现了这个货:- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url NS_DEPRECATED_IOS(2_0, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options NS_AVAILABLE_IOS(9_0); // no equiv. notification. return NO if the application can't open for some reason在ios9时候,任性的apple工程师调整了一下api,就是我上面列出来的。在你的UIApplication.h 中找一下就明白了。使用他建议的api就好了。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:

我要回帖

更多关于 handleopenurl 不调用 的文章

 

随机推荐