首先明确一下,VersionName和BuildCode。这里BuildCode应用版本号指的是开发者需要记录版本用的,VersionName应用版本名,是对于用户可以看到的,让用户知道他使用的版本是多少。
VersionName获取:
在Unity中获取非常简单:
var versionName = Application.version;
不需要区分平台,可直接获取。
BuildCode获取:
在Unity中获取:
var versionCode = PlayerSettings.Android.bundleVersionCode;
或者
var versionCode = PlayerSettings.iOS.buildNumber;
主要这里buildNumber获取到的是string类型,需要转一下,这里的api都是PlayerSettings下的,所有当你打包到Android或者IOS平台后,都不可用了,所有这里涉及到Unity和Android,IOS的梦幻联动了~
获取Android BuildCode的方法
public static int GetAppVersionCode()
{
AndroidJavaClass contextCls = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject context = contextCls.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject packageMngr = context.Call<AndroidJavaObject>("getPackageManager");
string packageName = context.Call<string>("getPackageName");
AndroidJavaObject packageInfo =
packageMngr.Call<AndroidJavaObject>("getPackageInfo", packageName, 0);
return packageInfo.Get<int>("versionCode");
}
代码直接copy到项目即可使用。
获取IOS BuildCode的方法
首先需要创建一个.m文件,把脚本挂在一个GameObject上,代码如下:
#import "UnityInterface.h"
extern "C" {
int _getVersion() {
//这里是获取VersionName
NSString *ver = [[[NSBundle mainBundle] infoDictionary]
objectForKey:@"CFBundleShortVersionString"];
//这里是获取BuildCode
NSString *build = [[[NSBundle mainBundle] infoDictionary]
objectForKey:@"CFBundleVersion"];
return build.intValue;
}
}
在Unity中调用_getVersion方法:
public class UseOCCode : MonoBehaviour
{
#if UNITY_IOS
[DllImport("__Internal")]
private static extern int _getVersion();
/// <summary>
/// 在xCode中获取应用版本号
/// </summary>
/// <returns></returns>
public static int GetIOSVersionCode()
{
return _getVersion();
}
#endif
}
在需要调用出,需要先判断当前运行平台:
#if UNITY_IOS
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
var curStatus = ATTAuth.GetIOSVersionCode();
}
#endif