unity实现应用内更新

1.设置2个版本号,一个为建议版本,一个为强制版本,玩家客户端必须大于等于强制版本,否则更新,玩家小于建议版本的时候可以跳过不更新.

2.IOS平台无法实现应用内更新,那么就点击跳转到APPStore的本应用页面.

3.安卓下载更新的安装包,并显示下载进度.下载完成后实现自动安装覆盖!

这里我就记录下安卓部分,IOS部分其实就是一个跳转Application.OpenURL(URL)即可

首先就是使用unity 协程的方式下载APK包,并保存,我设定的保存地址为string path = "/storage/emulated/0/" +fileName;

然后下载并保存到本地后开始自动安装:

private void InstallNewApp(string path)
{

if UNITY_EDITOR || UNITY_STANDALONE || UNITY_IOS

        Debug.Log("APP下载到了:"+ path);

elif UNITY_ANDROID

         Debug.Log("begin install");

        using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {

            using (AndroidJavaObject jo = jc.GetStatic("currentActivity"))
            {

                jo.Call("InstallNewApp", jo, path);

            }
        }

endif

    }

然后就是在jar包里面实现InstallNewApp方法,不会写jar包的请看我之前的几篇文章.使用ECLIPS打开或者新建同包名的mainActivity,它继承于unity,相当于游戏的主页面,

public class MyMainActivity extends com.unity3d.player.UnityPlayerActivity
{
@Override
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);

    //去除URL错误异常的警告,相当于不再检查URL权限
    if (Build.VERSION.SDK_INT >= 24) 
    { 
    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build());

}

}
以上代码是为了针对安卓7.0后隐私检查报出URL的错误,其强调了APP的数据其他未经授权的APP不能调用.也就是URI不能传file:///出去.然后就是安装APP的代码

//安装APP
public void InstallNewApp(Context context, String path) {
System.out.println("准备安装APP:"+path);
File f=new File(path);
if(!f.exists()) {
System.out.println("不存在:"+path);
}
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
Uri uri;
uri=Uri.fromFile(f);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
context.startActivity(intent);

}

你可能感兴趣的:(unity实现应用内更新)