使用URL 啟動unity Andriod APP並傳遞引數
阿新 • • 發佈:2019-02-06
我的棋牌遊戲需要一個功能:
房主微信分享一個內容(微信的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);
}
}
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做網路遊戲的朋友也可以加我微信,互相探討下思路,如果沒有合適的工作我就準備成立個團隊自己做遊戲發行遊戲了,有興趣或者資金或者優秀美工技能的朋友聯絡我把。