利用友盟平台做的APP自动更新

原创 2015年11月19日 17:18:42

今天在看公司代码时候,接触到了友盟平台,以前各种平台也接触过。一直没有独立尝试做过,今天就自己做了个小功能的APP,然后用友盟做自动更新。

http://www.umeng.com/

首先去这个官网去注册个账号,然后选择所要的功能,我是需要自动更新。

友盟也提供了官方文档帮助开发者,前期准备工作都是一样,就是各种文件或包集成到项目里。

到这里我是跟着官方步骤来的,接下来,就是怎么用代码实现了。

首先要在Activity的onCreate方法里做相应判断和事件,代码如下:

 private void initUmengUpdate() {
        UmengUpdateAgent.setUpdateAutoPopup(false);
        UmengUpdateAgent.setUpdateListener(new UmengUpdateListener() {
            @Override
            public void onUpdateReturned(int updateStatus, UpdateResponse updateInfo) {

                DebugLog.i("onUpdateReturned" + updateInfo);
                switch (updateStatus) {
                    case UpdateStatus.Yes: // has update
                        mVersionTile.setText("有最新版本");
                        UmengUpdateAgent.showUpdateDialog(mContext, updateInfo);
                        break;
                    case UpdateStatus.No: // has no update
                        mVersionTile.setText("没有最新版本");
//                        Toast.makeText(mContext, "没有更新", Toast.LENGTH_SHORT).show();
                        break;
                    case UpdateStatus.NoneWifi: // none wifi
                        Toast.makeText(mContext, "没有wifi连接, 只在wifi下更新", Toast.LENGTH_SHORT).show();
                        break;
                    case UpdateStatus.Timeout: // time out
                        Toast.makeText(mContext, "超时", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        });

        UmengUpdateAgent.setDialogListener(new UmengDialogButtonListener() {

            @Override
            public void onClick(int status) {
                switch (status) {
                    case UpdateStatus.Update:
                        break;
                    case UpdateStatus.Ignore:
                        break;
                    case UpdateStatus.NotNow:
                        Toast.makeText(mContext, "取消更新", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        });

    }
首先设置了不要自动更新,由用户决定要不要更新,因为我有个按钮是检查更新。

接下来就是判断更新状态。

再接下来的就是友盟自带的弹出更新对话框。

这里,是友盟下载下来的sdk里的。

接下来我做了个多余的事,就是显示出来当前版本:

mVersionRoot.setOnClickListener(this);
String currentVersion = String.valueOf(MainApp.getVerName(mContext));
mVersionTxt.setText("当前版本:" + currentVersion);

这是通过我的检查更新按钮,点击的话,这里有个MainApp

public class MainApp extends Application{


/**
     * 获取App安装包信息
     *
     * @return
     */
    public PackageInfo getPackageInfo() {
        PackageInfo info = null;
        try {
            info = getPackageManager().getPackageInfo(getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace(System.err);
        }
        if (info == null) info = new PackageInfo();
        return info;
    }
    /**
     * Android系统版本号
     */
    public static void getAndroidVersion() {
        switch (Build.VERSION.SDK_INT) {
            case Build.VERSION_CODES.BASE:
                // API Level 1 Android 1.0
                DebugLog.i("API Level 1 Android 1.0");
                break;
            case Build.VERSION_CODES.BASE_1_1:
                // API Level 2 Android 1.1
                DebugLog.i("API Level 2 Android 1.1");
                break;
            default:
                break;
        }
    }


    /**
     * 获取应用版本号
     *
     * @param context
     * @return
     */
    public static int getVerCode(Context context) {
        int verCode = -1;
        try {
            verCode = context.getPackageManager().getPackageInfo(
                    “这里面填你的包名,比如com.csdn.haha”, 0).versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            DebugLog.e(e.getMessage());
        }
        return verCode;
    }


    /**
     * 获取版本号名称
     *
     * @param context
     * @return
     */
    public static String getVerName(Context context) {
        String verName = "";
        try {
            verName = context.getPackageManager().getPackageInfo(
            "com.example.appofzws", 0).versionName;
        } catch (PackageManager.NameNotFoundException e) {
            DebugLog.e(e.getMessage());
            DebugLog.e(e.getMessage());
        }
        return verName;
    }

其实到这里 ,大部分工作就做完了。

再到友盟里面,去上传你的APP最新版本。这里有需要注意的地方,上传之前,需要改下主配置文件里的

android:versionCode="2"

还有个android:versionName="1.1",改了的话,用户那边显示就会不同,算是做个版本区别。


其实做出来这个功能,我还是不太懂核心运作。

真实希望有大神可以给解释下。懂个大概总是不舒服的。

android 友盟集成app自动更新模块

  • 2016年03月26日 12:22
  • 10.75MB
  • 下载

友盟自动更新demo

  • 2015年05月23日 17:34
  • 2.55MB
  • 下载

iOS 友盟 自动更新SDK集成指南

OS自动更新SDK集成指南 :http://dev.umeng.com/auto-update/ios/quick-start 1. 集成友盟iOS统计分析SDK 友盟自动更新功能在统计分析SDK...

友盟自动更新.docx

  • 2015年11月05日 13:04
  • 35KB
  • 下载

友盟自动更新技术解决方案(安卓版)

系统结构 友盟自动更新系统的示意图如下: 图中手机代表客户端。服务端的各个模块描述如下: WebConsole:提供上传更新包的网站操作界面。 FS:文...

友盟在线参数+自动更新升级SDK实现指定版本强制更新升级

项目上有这样的需求:对指定的版本要求强制升级,同时其他的版本可以选择性升级。 友盟的自动更新功能还是挺好用的,只不过对强制升级这块支持的还不到位。不过友盟的开发人员也给出了勉强可行的方案: 使用友盟在...
  • oLevin
  • oLevin
  • 2014年08月02日 00:14
  • 4516

友盟更新 自动更新替换方案

自动更新替换方案 这个服务因为目前面临N多非技术的挑战,导致我们很难再维护好这个服务: iOS的自动更新已经被苹果官方严格禁止了,苹果官方也数次联系友盟,要求我们及早把iOS的...

友盟在线参数+自动更新升级SDK实现指定版本强制更新升级

项目上有这样的需求:对指定的版本要求强制升级,同时其它的版本可以选择性升级。 友盟的自动更新功能还是挺好用的,只不过对强制升级这块支持的还不到位。 不过友盟的开发人员也给出了勉强可行的方案...

安卓自动更新,静默更新,替换友盟更新可以在通知栏里显示更新下载进度,几行代码快速实现Android下载更新

安卓自动更新,静默更新,可以在通知栏里显示更新下载进度,几行代码快速实现Android下载更新...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用友盟平台做的APP自动更新
举报原因:
原因补充:

(最多只允许输入30个字)