使用URL 启动unity Andriod APP并传递参数
来源:互联网 发布:软件测试实践报告 编辑:程序博客网 时间:2024/06/05 14:02
我的棋牌游戏需要一个功能:
房主微信分享一个内容(微信的URL),上面包含有url,标题,内容,略图。当被邀请人点击分享的内容,可以直接开启这个游戏,并登录后直接登录这个房间。不需要人工记忆房间号等。
OK,这里我们就要用到几个知识点:
1、微信SDK-分享URL
2、Andriod APP 的URL启动并传参
3、网页的获取URL参数以及在超链接中加入参数(因为安卓的URL启动模式是 justlovepaohuzi://hmok/JoinRoom?roomID=,在本地是无法实现的,必须通过浏览器才行)
一、微信SDK-分享URL
首先是为UNITY创建 微信的SDK 的JAVA插件,这个可以看我之前的文章-unity使用微信SDK实现微信分享以及反馈_个人工程记录 (好吧,我发现这个文章我没有发布在CSDN,而是在我的QQ空间内,实在不行就加我微信找我要把,或者我找时间重新写一遍,原来那篇有一些小错误)
然后在mainactivty 实现分享URL-我直接贴代码了,个人工程记录上有解释
public void shareURL(String Url,String titleString,String 网页描叙,String 图片名字){try{//初始化一个web对象,并输入url UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "开始分享URL"); WXWebpageObject webmsg=new WXWebpageObject(); webmsg.webpageUrl=Url; //用WXWebpageObject对象初始化一个WXMediaMessage填写标题,描叙 WXMediaMessage msg=new WXMediaMessage(webmsg); msg.title=titleString; msg.description=网页描叙;//获得网页略缩图图片的BITMAP格式// int id = getResources().getIdentifier(图片名字, "drawable", getPackageName());// Bitmap bmp = BitmapFactory.decodeResource(getResources(),id);//从文件读取图片 File mFile=new File(图片名字); Bitmap bmp=null; //若该文件存在 if (mFile.exists()) { //UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "开始读取"+图片名字); bmp=BitmapFactory.decodeFile(图片名字); //UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "读取完毕"+图片名字); }else{ UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", 图片名字+"读取出错"); } //生成略缩图 // UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "生成thumbBmp");Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 100, 100, true);//UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "生成msg.thumbData");msg.thumbData=Util.bmpToByteArray(thumbBmp, true);//UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "图像处理完毕");//生成微信的请求SendMessageToWX.Req req = new SendMessageToWX.Req();//设置它的校验格式req.transaction = buildTransaction("webpage");//设置它的内容req.message = msg;// UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "REQ设置完成,下面选择发送方法");//发给朋友req.scene =SendMessageToWX.Req.WXSceneSession;//使用通讯脚本的静态变量发送这个请求WXEntryActivity.api.sendReq(req);//UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "发送完成");}catch(Exception e){UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "抛出异常:"+e);} }
Unity上是这样的一个命令
string 邀请人用户名 = GameManager.s_GameManager.我的用户信息.用户昵称; string 房间号 = UI_GamrRoomState._最新的房间状态._房间信息.房间编号; jo.Call("shareURL", new object[] { "http://hmok38.vicp.net/jionroom.asp?roomID=" + 房间号,"速度来打牌!房间号:"+ 房间号, "您的好友 "+ 邀请人用户名+" 邀请您参加牌局!", 文件名 });在微信上就是下图这样的。哈哈。点击它就会访问 “http://hmok38.vicp.net/jionroom.asp?roomID=房间号” 这个网址。然后网页会给出一个 超链接,
其指向 justlovepaohuzi://hmok/JoinRoom?roomID=房间号 。如果是在安卓上运行自然会启动我这个APP
二、Andriod APP 的URL启动并传参
设置unity 要附带的java插件,我直接在 微信SDK 的JAVA插件上添加需要的内容了。
1、首先是AndroidManifest.xml的设置
需要在MAIN <activity中添加内容
但是注意:千万不要和原来的<intent-filter>放在一起,否则就会丢失安卓的快捷方式,无法运行。
最后的样子如下(红色部分是必须添加的,其他的都按需要设置)
<activity android:name=".OverrideExample" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="justlovepaohuzi" android:host="hmok" android:pathPrefix="/JoinRoom"/> </intent-filter> </activity>
至于上面的scheme的设置<data android:scheme="justlovepaohuzi" android:host="hmok" android:pathPrefix="/JoinRoom"/>
代表了这个APP可以由浏览器发送 justlovepaohuzi://hmok/JoinRoom?roomID=xxxx 的URL来启动这个APP,并且把XXXX传递进来。scheme你们可以百度一下,看看它的作用。
2、完事后在main activity(OverrideExample.Java)中设置一个接收参数的方法,以及一个Unity获取参数的方法
onCreate()方法中添加获取参数,并保存到个string里去
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 储存打开APP的情况();}
private String ROOMID="";
private void 储存打开APP的情况(){try{ Intent i_getvalue = getIntent(); String action = i_getvalue.getAction(); UnityPlayer.UnitySendMessage("PhotonClientManager", "getRoomID", "action:"+action); if(Intent.ACTION_VIEW.equals(action)){ Uri uri = i_getvalue.getData(); UnityPlayer.UnitySendMessage("PhotonClientManager", "getRoomID", "uri:"+uri); if(uri != null){ String roomID = uri.getQueryParameter("roomID"); UnityPlayer.UnitySendMessage("PhotonClientManager", "getRoomID", "roomID:"+roomID); ROOMID=roomID; } } }catch(Exception e){UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "储存打开APP抛出异常:"+e);} }//unity 获取ID的方法,因为我们不是一进入APP就要调取,所以在进入需要的场景的时候再调用,调用完毕后删除数值,这样保证下次进去的时候不会再次进入上一个房间 public void GetGameRoomID(){try{ UnityPlayer.UnitySendMessage("PhotonClientManager", "getRoomID", ROOMID);//清理ID ROOMID=""; }catch(Exception e){UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "储存打开APP抛出异常:"+e);} }
public void 请求邀请的房间编号() { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("GetGameRoomID"); UI_Note.s_UInote.Note("开始请求加入房间的编号"); } //接收WXSDK中发过来的房间编号的方法 public void getRoomID(string 房间编号) { if(房间编号!=null&& 房间编号 != "") { UI_Note.s_UInote.Note("朋友邀请您进入:"+ 房间编号); //发送加入游戏房间的服务器请求 PhotonOperationManager.s_PhotonOperationManager._JionGameRoom(房间编号); } else { // UI_Note.s_UInote.Note("没有房间编号" ); } }这样当unity需要邀请的房间ID时候,运行 请求邀请的房间编号(), WXSDK的JAVA工程发来了房间编号到 getRoomID方法中,如果有房间号就直接向服务器发送请求加入这个房间的编号。如果没有就啥都别做。
三、网页端的设计
我完全不会写,百度了一晚上,发现好简单script和C#太多不同,我习惯每行结束加;然后一直出错。哭死
用记事本新建个文件,名字叫 jionroom.asp 内容如下:
用记事本新建个文件,名字叫 jionroom.asp 内容如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>就爱跑胡子</title> </head> <body><h1 style='font-size:60px;color:red' >提示:如果您使用微信打开本网页,请点击右上角,选择“在浏览器中打开”才可以哦!</h1><%dim gameroomIDgameroomID=Request.QueryString("roomID")%><style type="text/css">a.toolleft_03:link {color: #274579; font-size:50px;} /* 未访问的链接 */a.toolleft_03:visited {color: #274579; font-size:50px;} /* 已访问的链接 */a.toolleft_03:hover {color: #274579; font-size:50px;} /* 鼠标移动到链接上 */a.toolleft_03:active {color: #274579; font-size:50px;} /* 选定的链接 */ </style> <a class=toolleft_03 href="justlovepaohuzi://hmok/JoinRoom?roomID=<%=gameroomID%>"> 启动就爱跑胡子,加入<%=gameroomID%>号房间!</a> </body> </html>
当打开网页的时候会出现一个超链接,指向 justlovepaohuzi://hmok/JoinRoom?roomID=房间号。点击这个链接就能够在安卓上启动我的APP并且传递房间号给APP了。
四、总结
设计思路:
1、房主微信分享一个URL(http://hmok38.vicp.net/jionroom.asp?roomID=房间号),里面包含了他创建的房间号。
2、被邀请人,点击URL ,打开APP并自动获得房间号。but:我测试过好像不能直接这样分享(justlovepaohuzi://hmok/JoinRoom?roomID=房间号),所以第一步不能直接分享带scheme的内容。
那么只好在网站上做个中转,访问一个网页(http://hmok38.vicp.net/jionroom.asp?roomID=房间号),这个网页会给出链接到(justlovepaohuzi://hmok/JoinRoom?roomID=房间号),而房间号的数值来源于访问网页时候的url中的房间号数值,也就是转告了一次而已。
3、被邀请人点击网页的链接后,打开APP,登录后自动加入房间号
五、请大家有机会帮个忙
1、最近没事做,想找一份unity的主程工作,当然是游戏方面的,其他方面不考虑。大家有机会帮忙推荐下把。
2、自己使用phonton server+unity做了个棋牌游戏,就是可以几个朋友微信约好在一个房间内打牌的游戏。上次被一个朋友买了一套服务器去他家乡运营了。弱弱的问句还有朋友想运营么?或者你出棋牌的内容,我来定向开发,反正一个游戏服务器也就几万块,定向开发也就2-3个星期的时间就OK;
3、有不懂的内容请加我微信:hmokhmok 询问。CSDN我一般需要写东西来来,基本不看留言和私信的。
4、关键点来了-微信它不支持直接在微信内访问外部链接。所以只能选择“在浏览器中打开”后才可以打开APP和传值哦。SO,以上的内容和效果打了折扣的。哈哈,郁闷吗?
没关系,学了新东西就不怕,而且下一篇文章我会解决这个问题,可以直接微信内打开APP和传值。当然做法完全不同了,敬请期待吧。
5、想要学习phonton server+unity做网络游戏的朋友也可以加我微信,互相探讨下思路,如果没有合适的工作我就准备成立个团队自己做游戏发行游戏了,有兴趣或者资金或者优秀美工技能的朋友联系我把。
阅读全文
0 0
- 使用URL 启动unity Andriod APP并传递参数
- Unity3D和IOS的交互教程——通过URL启动APP并传递参数
- Unity3D和IOS的交互教程——通过URL启动APP并传递参数
- Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数
- Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数
- Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数
- Android中一个APP启动另一个APP并传递参数
- iOS:启动另外的APP并传递参数
- 通过打开html启动app并传递参数
- 在wap中启动 app(利用URL Scheme打开APP并传递数据 )
- Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)
- Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)
- 使用Intent来启动Activity并传递参数
- 通过URL传递参数,并解析
- 使用URL Scheme启动app
- 通过网页打开App并传递参数
- 启动另外的APP及传递参数
- app与app间打开并传递参数
- TouchEvent分发机制
- 【CSU 1780】简单的图论问题?
- Ubuntu出现System policy prevents modification of network settings for all users该怎么解决
- 记录一下中国剩余定理的代码
- 两台linux之间传输文件的方法
- 使用URL 启动unity Andriod APP并传递参数
- 我的对象怎么了?
- 大型网站架构(五)固若金汤:网站的安全架构
- eclipse常用设置
- 暑假打卡
- 21.系统广播之来电广播
- 4.Java设计模式-->迭代器模式
- MySQL 数据类型
- windows8.1和eclipse的快捷键