我的棋牌游戏需要一个功能:

房主微信分享一个内容(微信的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对象,并输入urlUnityPlayer.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>放在一起,否则就会丢失安卓的快捷方式,无法运行。
最后的样子如下(红色部分是必须添加的,其他的都按需要设置)
 <activityandroid: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);//清理IDROOMID="";}catch(Exception e){UnityPlayer.UnitySendMessage("WXSDK", "ResFromWX", "储存打开APP抛出异常:"+e);}}

3、然后在unity中需要调用的时候调用它(下面方法是在UNITY中实现)

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 内容如下:
<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 gameroomID
gameroomID=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做网络游戏的朋友也可以加我微信,互相探讨下思路,如果没有合适的工作我就准备成立个团队自己做游戏发行游戏了,有兴趣或者资金或者优秀美工技能的朋友联系我把。

使用URL 启动unity Andriod APP并传递参数相关推荐

  1. Android: 启动另外的APP及传递参数(转)

    转载自:http://blog.csdn.net/iefreer/article/details/8812585 有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等. 如果你不知道 ...

  2. android 中文参数,(原)Android: 启动另外的APP及传递参数

    有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等. 如果你不知道那个APP的Activity,但是知道包名(package name),那么可以使用如下的方法: Intent L ...

  3. Android中一个APP启动另一个APP并传递参数

    被调用(启动)的APP: 项目名字:Demo_ybs 项目包名:com.ybs.demo_ybs 被调用APP中获取调用者的传递数据: package com.ybs.demo_ybs;import ...

  4. Android通过浏览器打开App并传递参数

    Android通过浏览器打开App并传递参数; Data的Uri的规则: scheme://host:port/path or pathPrefix or pathPattern 打开App传递参数U ...

  5. Android:H5、web调起App并且传递参数

    1.在清单文件的Activity声明里添加: <intent-filter><action android:name="android.intent.action.VIEW ...

  6. ionic开发——打开百度地图APP如何传递参数,导航路线

    首先,打开百度地图APP的方法不知道朋友可以看一下这里: <ionic开发--检测是否安装某APP,如果安装打开该APP>http://blog.csdn.net/yu1731013344 ...

  7. c#中一个进程启动另一个进程并传递参数

    1.开启进程 using System.Diagnostics;   ProcessStartInfo process = new ProcessStartInfo(); process.FileNa ...

  8. Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数...

    点击浏览器中的URL链接,启动特定的App. 首先做成HTML的页面,页面内容格式如下: <a href="[scheme]://[host]/[path]?[query]" ...

  9. 从URL启动程序:也谈谈旺旺的页面启动--转载

    一.引子 很多时候为了方便,我们都需要从页面上启动一些本地的程序,比如QQ,MSN,Skype等. 我们先拿QQ来举例,QQ提供了一个QQ在线状态的服务,QQ在线状态服务 我们可以将自己的" ...

最新文章

  1. 圣诞节!教你用Python画棵圣诞树
  2. oracle 10g安装
  3. PHP中用编码代码,编码对照表的使用(2)_php
  4. SpringBoot 中发布ApplicationEventPublisher,监听ApplicationEvent 异步操作
  5. Caffe学习系列(5):其它常用层及参数
  6. AndroidStudio离线使用gradle
  7. SpringMVC的请求-获得请求参数-静态资源访问的开启
  8. c语言 艺术编程,C语言编程艺术--条件编译(原创)
  9. 面试题56: 数组中数字出现的次数
  10. 喜欢←划,不喜欢→划
  11. Java多线程11:ReentrantLock的使用和Condition
  12. eclipse 恢复默认窗口
  13. 什么叫做展望_开学季:有一种爱, 叫做爸妈给你塞的行李箱!(附大学新生行李箱应怎么选?)...
  14. 设计模式笔录(一),什么是设计模式
  15. python hello world程序编写_自动编写Python程序的神器,Python 之父都发声力挺
  16. 深度学习入门极简教程(一)
  17. 超强换元法,二重积分计算的利器(雅可比行列式超通俗讲解)
  18. kmz转换为dwg_徐州网站设计_seo优化常用技巧:什么软件可以将PDF文件转换为DWG文件...
  19. w ndows默认截图工具,windows截图工具快捷键
  20. Groovy - Groovy ambiguous method overload

热门文章

  1. 进销存软件怎么制作,使用什么来做进销存
  2. meng-科学计算包-numpy
  3. IOS 完成来电归属地
  4. 记录一个Xcode上传App报错的问题
  5. CentOS-7.2部署DNS域名解析服务器并进行相关配置测试
  6. 一文弄懂RAM、ROM、闪存、硬盘
  7. Android HAL层浅析
  8. 十分详细的jdk8时间相关操作以及知识点(文章很长)
  9. 【mycat】mycat水平分表
  10. 请把我埋在新闻联播里