通过shareSDK分享链接,通过scheme传参到IOS和安卓.棋牌游戏只需要这些,丢掉魔窗吧
2017-12-30 22:10
357 查看
最近独立完成一个棋牌项目,对,没错,服务器,客户端都是我自己一个人完成的,真是累的想死.
服务器用的是photon,客户端用unity,客户端使用ab实现资源热更.时间太紧也就没做lua的代码热更了.
撸代码的过程就是一个苦力活,没什么好说的,最后项目结束的时候遇到了麻烦,
根据甲方要求,要接入shareSDK做分享,魔窗或者moblink做跳转和传参.yaya语音做接入.
然后被yaya的SDK坑了半个月,跟他们的技术联调半个月,才把实时视频接完成.过程只想杀人.然后又被moblink坑了一星期,之前接好的跳转出问题了,天天找他们客户,
一星期后,他们客户告诉我,他们那边出了问题,让我下载最新SDK.好吧,反正是被第三方SDK坑惨了.于是我想到之前一个项目,自己实现了scheme的跳转,没用使用任何第三方
于是果断丢掉魔窗和moblink.
于是通过IOS和安卓的SCHEME自己来实现跳转和传参.因为棋牌只要求拉起APP,和传递房间号就可以了.于是花了2天时间搞定,一测试.yo,倍稳定,再也不怕第三方出问题导致跳不过去了!哈哈,
1.unity中代码实现获取参数的代码,并根据参数来处理
在需要的UI中实现OnApplicationPause()方法,当APP退出和唤醒的时候检查是否有参数传进来.
实现获取参数的方法
以上就完成了unity的代码
2/安卓中的代码.
在上面的代码中可以看到,安卓中必须有一个叫做StartApp1的方法,用来返回参数给unity.
2.1:第一步,使用eclips建立一个android工程,引用unity中的class.jar.报名需要与我们的unity的包名相同.
2.2:然后建立一个脚本.它必须继承于UnityPlayerActivity.我这里建立了一个叫做MainActivity的java脚本,需要引用一些东西,大家自己引用吧
2.3-,好了,以上就完成了jar包的编写了,其中还可以写一些安卓的原生方法,例如看电池百分比,网络状态等.然后输出jar包
右键选择输出:
选择jar file->next
直接finish,
然后把得到的jar包丢到unity中的\Assets\Plugins\\Android\文件夹中.
2.4:编写AndroidManifest.xml文件,这个是安卓的配置页面,所有的安卓调用的东西都需要在这里编写,如果没有就在Assets\Plugins\\Android\文件夹中建立一个,shareSDK也会需要一个,还有微信分享的回调页面也会写在这里
然后输出层安卓就可以了!
3:Ios编写部分,首先需要设置scheme,2种方式设置
3.1:unity中设置,在build setting->player setting中设置
可以设置多个scheme,我们自己需要一个,shareSDK也需要一个!其中一个必须和安卓的设置成一样的
3.2:Xcode中设置,与3.1随便选一种方式即可
3.3:xcode中编写代码
找到xcode中的入口文件,打开它,编写和实现需要的方法
添加我们再unity中调用的方法
实现并编写xcoede中的openurl方法(这个方法根据xcode版本不同有3个,最新的就是app openURL,保险起见3个都实现掉吧)
OK,xcode中的相关代码也写完了,
另外shareSDK如果采用的不是自动打包方式的话需要添加mobappid和密码等信息到info:还有需要在unity中设置(其他的安卓sharesdk官网的配置就可以了)
或者在info.plist文件中添加
然后就可以了!输出安卓项目和IOS项目
你可以分享 http://www.你的网站.com/?name=123&type=abc的方式分享跳转链接.
当然在web上需要设置自动跳转到
你设置的scheme://?name=123&type=abc(例如: hmok://?name=321&type=bcd)
那么你再安卓或者IOS中就会主动拉起你的APP,并且传递参数进去了!
其实很简单,主要是要跨平台编写代码,还要熟悉各平台的东西!
好吧,我承认我对object-C完全不懂,里面的代码是请朋友写的; (
最近真的好累,有没有轻松点的公司招人的,我想跳槽!只限湖南哦!
服务器用的是photon,客户端用unity,客户端使用ab实现资源热更.时间太紧也就没做lua的代码热更了.
撸代码的过程就是一个苦力活,没什么好说的,最后项目结束的时候遇到了麻烦,
根据甲方要求,要接入shareSDK做分享,魔窗或者moblink做跳转和传参.yaya语音做接入.
然后被yaya的SDK坑了半个月,跟他们的技术联调半个月,才把实时视频接完成.过程只想杀人.然后又被moblink坑了一星期,之前接好的跳转出问题了,天天找他们客户,
一星期后,他们客户告诉我,他们那边出了问题,让我下载最新SDK.好吧,反正是被第三方SDK坑惨了.于是我想到之前一个项目,自己实现了scheme的跳转,没用使用任何第三方
于是果断丢掉魔窗和moblink.
于是通过IOS和安卓的SCHEME自己来实现跳转和传参.因为棋牌只要求拉起APP,和传递房间号就可以了.于是花了2天时间搞定,一测试.yo,倍稳定,再也不怕第三方出问题导致跳不过去了!哈哈,
1.unity中代码实现获取参数的代码,并根据参数来处理
在需要的UI中实现OnApplicationPause()方法,当APP退出和唤醒的时候检查是否有参数传进来.
/// <summary> /// app切换出去或者切换进来的时候会被调用. /// </summary> /// <param name="pause"></param> private void OnApplicationPause(bool pause) { //是切换出去 if (pause) { //切换出去的时候清空暂时存储参数的地方 APPsetting.ShareJionRoom = new Hashtable(); } //是切换进来 else { //获取参数 shareStartApp(); //检查是否有参数,并根据参数采取下一步操作 CheckShareJionRoom(); } }
实现获取参数的方法
#if UNITY_IOS //调用xcode中的方法 [DllImport("__Internal")] private static extern string _nameType(); #endif /// <summary> /// 获取进入房间参数 /// </summary> public void shareStar 4000 tApp() { string StartApp = ""; string iType = ""; string iName = ""; if (iType == "" && iName == "") { #if UNITY_EDITOR || UNITY_STANDLONE Debug.Log("在PC或者编辑器中不获取进入房间的参数"); #elif UNITY_ANDROID using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")) { Debug.Log("UNITY_ANDROID res room AndroidJavaObject......" ); //Android SDK 返回的数据格式为: type|name 例如进入房间1|123456 StartApp = jo.Call<string>("StartApp1", "随便什么"); Debug.Log("UNITY_ANDROID res room " +StartApp ); } } #elif UNITY_IOS // _nameType() Debug.Log("UNITY_IOS res data " ); StartApp = _nameType(); Debug.Log("UNITY_IOS res data " + StartApp ); #endif if (StartApp != "") { Debug.Log("share link param " + StartApp); string[] StartApp_arr = StartApp.Split('|'); if (StartApp_arr.Length == 2) { iType = StartApp_arr[0]; iName = StartApp_arr[1]; Debug.Log("iType :" + iType + "iName :" + iName); APPsetting.ShareJionRoom = new Hashtable(); APPsetting.ShareJionRoom[iType] = iName; } } } }
以上就完成了unity的代码
2/安卓中的代码.
在上面的代码中可以看到,安卓中必须有一个叫做StartApp1的方法,用来返回参数给unity.
2.1:第一步,使用eclips建立一个android工程,引用unity中的class.jar.报名需要与我们的unity的包名相同.
2.2:然后建立一个脚本.它必须继承于UnityPlayerActivity.我这里建立了一个叫做MainActivity的java脚本,需要引用一些东西,大家自己引用吧
public class MainActivity extends UnityPlayerActivity {
public String _name = ""; public String _type = "";
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Uri mLink = getIntent().getData(); if(mLink != null){ _type = mLink.getQueryParameter("type"); _name= mLink.getQueryParameter("name"); } }
public String StartApp1(String name) { Uri mLink = getIntent().getData(); if(mLink != null){ _type = mLink.getQueryParameter("type"); _name= mLink.getQueryParameter("name"); } Log.i(TAG, "有啊! StartApp"); Log.i(TAG, _type+"|"+_name); // if(name.equals("0")){ String retrunVar=_type+"|"+_name; _type=""; _name=""; //调用过一次就清除掉,不然进行微信分享动作,或者接个电话的时候回到大厅就会再次调用这个数据! getIntent().setData(null); return retrunVar;
}
2.3-,好了,以上就完成了jar包的编写了,其中还可以写一些安卓的原生方法,例如看电池百分比,网络状态等.然后输出jar包
右键选择输出:
选择jar file->next
直接finish,
然后把得到的jar包丢到unity中的\Assets\Plugins\\Android\文件夹中.
2.4:编写AndroidManifest.xml文件,这个是安卓的配置页面,所有的安卓调用的东西都需要在这里编写,如果没有就在Assets\Plugins\\Android\文件夹中建立一个,shareSDK也会需要一个,还有微信分享的回调页面也会写在这里
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.你的包名要和unity的一样.chess" xmlns:tools="http://schemas.android.com/tools" android:installLocation="preferExternal" android:versionCode="201" android:versionName="2.0.1"> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true"/> <uses-feature android:name="android.hardware.camera"/> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <!-- 蓝牙分享所需的权限 --> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <!--yunva P2P video--> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-feature android:name="android.hardware.camera" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 向SDCard写入数据权限 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <application android:name="com.mob.MobApplication" android:theme="@style/UnityThemeSelector" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true">
<activity android:name=".MainActivity" android:label="@string/app_name" android:clearTaskOnLaunch="false" android:launchMode="singleInstance" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> <intent-filter> <data android:scheme="你设置的scheme别名" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true"/> </activity> <!-- shareSDK需要的--> <activity android:name="com.mob.tools.MobUIShell" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:windowSoftInputMode="stateHidden|adjustResize" > </activity> <!-- 微信分享回调 --> <activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" /> </application> </manifest>
然后输出层安卓就可以了!
3:Ios编写部分,首先需要设置scheme,2种方式设置
3.1:unity中设置,在build setting->player setting中设置
可以设置多个scheme,我们自己需要一个,shareSDK也需要一个!其中一个必须和安卓的设置成一样的
3.2:Xcode中设置,与3.1随便选一种方式即可
3.3:xcode中编写代码
找到xcode中的入口文件,打开它,编写和实现需要的方法
添加我们再unity中调用的方法
//跳转传参需要的方法 static NSString * _name=@""; static NSString * _type=@""; extern "C"{ char* _nameType(){ NSLog(@"_name:被调用:%@",_name); NSLog(@"_type被调用:%@",_type); if (_name!=nil && _type!=nil && _name!= NULL && _type!= NULL){ NSString * string = [_type stringByAppendingString:@"|"]; //NSString * str = @"1|123456"; NSString * str = [string stringByAppendingString:_name]; char * x = (char *)malloc(strlen([str UTF8String]) + 1); strcpy(x, [str UTF8String]); _name = @""; _type = @""; return x; }else{ NSString * str = @""; char * x = (char *)malloc(strlen([str UTF8String]) + 1); strcpy(x, [str UTF8String]); return x; } // char* x=(char*)malloc(strlen([@"hmok" UTF8String])+1); // return x; } }
实现并编写xcoede中的openurl方法(这个方法根据xcode版本不同有3个,最新的就是app openURL,保险起见3个都实现掉吧)
-(bool)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{ if([url query] == NULL){ _name=@""; _type=@""; return YES; } NSString *string = [NSString stringWithString:[url query]]; NSArray *array = [string componentsSeparatedByString:@"&"]; [array enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL * _Nonnull stop) { NSArray *childArray = [obj componentsSeparatedByString:@"="]; if (childArray.count > 1) { if([childArray.firstObject isEqual:@"name"]) { _name = childArray.lastObject; } if([childArray.firstObject isEqual: @"type"]) { _type = childArray.lastObject; } NSLog(@"%@",childArray.lastObject); } }]; NSLog(@"_name:%@",_name); NSLog(@"_type:%@",_type); return YES; }
OK,xcode中的相关代码也写完了,
另外shareSDK如果采用的不是自动打包方式的话需要添加mobappid和密码等信息到info:还有需要在unity中设置(其他的安卓sharesdk官网的配置就可以了)
或者在info.plist文件中添加
<key>MOBAppKey</key> <string>2278549adfc3b</string> <key>MOBAppSecret</key> <string>561ffa05dc4b2ad6b54c1a79793f9632</string> <key>LSApplicationQueriesSchemes</key> <array> <string>mcqiqi</string> <string>weixin</string> </array>
然后就可以了!输出安卓项目和IOS项目
你可以分享 http://www.你的网站.com/?name=123&type=abc的方式分享跳转链接.
当然在web上需要设置自动跳转到
你设置的scheme://?name=123&type=abc(例如: hmok://?name=321&type=bcd)
那么你再安卓或者IOS中就会主动拉起你的APP,并且传递参数进去了!
其实很简单,主要是要跨平台编写代码,还要熟悉各平台的东西!
好吧,我承认我对object-C完全不懂,里面的代码是请朋友写的; (
最近真的好累,有没有轻松点的公司招人的,我想跳槽!只限湖南哦!
相关文章推荐
- Android分享链接使用ShareSdk需要注意的一些小问题
- XZ_iOS之通过分享的链接,调起app
- IOS开发笔记(Swift):通过ShareSDK和TYAlertController实现分享功能
- cocos2d-x手机游戏(IOS版本)接入分享shareSDK(新浪微博和微信分享)记录
- 通过第三方平台shareSDK分享链接
- 手机棋牌游戏开发哪里有安卓IOS棋牌游戏开发团队
- iOS中通过链接地址打开指定APP并传参 by徐文棋
- [APP开发技巧] IOS和安卓自定义包名分享
- xcode安装模拟器失败 (could not download and install iOS 7.1 simulator ,需要授权才能安装这些软件包)
- IOS 使用ShareSDK进行QQ,微信,新浪微博分享失败经验
- ios ShareSDK 分享、登陆功能的实现
- Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码
- IOS项目集成ShareSDK实现第三方登录、分享、关注等功能。
- iOS:ShareSDk的分享
- 安卓集成第三方--使用ShareSdk实现登录和分享
- 【幻灯片分享】揭开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
- iOS中用ShareSDK一键分享方法
- 关于游戏中的分享之ShareSDK的研究续一
- iOS社会化分享报错:- error: "This app is not allowed to query for scheme mqq"
- iOS ShareSDK 新浪微博分享遇到的坑