应用宝省流量更新sdk接入指南
转载请声明原文地址:http://blog.csdn.net/sagittarius1988/article/details/52200815
app的自动更新,是一个非常重要的功能。而要实现一套更新机制,技术上来说其实很简单。但对于小公司来说,其实很没有必要,因为你需要一台文件服务器提供下载,万一app火了,那这台文件服务器的压力就相当大了。现在有很多做平台的大公司会有在做这一套自动更新的服务,算是给小公司减轻成本吧。
以前几个app用的是友盟的自动更新服务,因为也使用友盟的统计服务,所以就选择了友盟。但是自从被阿里收购后,友盟的更新服务即将关闭,所以不得不寻求其它方案。 有找到几家:腾讯的应用宝、360手机助手、百度手机助手 都有提供自动更新的服务,只需集成相应的SDK便可。从中进行了对比,发现应用宝的app上架审核速度最快,所以建议还是使用应用宝的自动更新服务,这样更新的下发会更及时。
下面来讲讲应用宝自动更新SDK的接入。
首先要收,腾讯开放平台的文档确实是个坑,文档的参考价值不是很大,很多还是得靠自己去摸索。按照开放平台上的接入文档,发送邮件,获取到渠道号,并下载sdk,会得到一个jar文件“tmassistantsdk_selfupdate_v1.0_20151229170816.jar”,将此jar引入项目当中,并按照sdk使用指南进行配置。
AndroidManifest.xml中加入以下权限和Service
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><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" /> <serviceandroid:name="com.tencent.tmdownloader.TMAssistantDownloadService"android:exported="false"android:process=":TMAssistantDownloadSDKService" />
配置好后进行SDK的初始化,配置好后先简单的进行更新检测操作
TMSelfUpdateManager.getInstance().init(getApplicationContext(), "申请到的渠道号", new ITMSelfUpdateListener() {@Overridepublic void onDownloadAppStateChanged(int i, int i1, String s) {}@Overridepublic void onDownloadAppProgressChanged(long l, long l1) {}@Overridepublic void onUpdateInfoReceived(TMSelfUpdateUpdateInfo tmSelfUpdateUpdateInfo) {}}, new YYBDownloadListener() {@Overridepublic void onDownloadYYBStateChanged(String s, int i, int i1, String s1) {}@Overridepublic void onDownloadYYBProgressChanged(String s, long l, long l1) {}@Overridepublic void onCheckDownloadYYBState(String s, int i, long l, long l1) {}}, null);TMSelfUpdateManager.getInstance().checkSelfUpdate();//检测更新运行后 发现个问题,老是会报错,提示找不到类,导致崩溃 I/art(12010): Rejecting re-init on previously-failed class java.lang.Class<com.tencent.tmapkupdatesdk.internal.logic.protocol.jce.AppInfoForUpdate> E/AndroidRuntime(12010): FATAL EXCEPTION: apkupdate_asyctask E/AndroidRuntime(12010): Process: com.hikvision.ivms.isp, PID: 12010 E/AndroidRuntime(12010): java.lang.NoClassDefFoundError: com.tencent.tmapkupdatesdk.internal.logic.protocol.jce.AppInfoForUpdate E/AndroidRuntime(12010): at com.tencent.tmapkupdatesdk.internal.logic.a.a(ProGuard:183) E/AndroidRuntime(12010): at com.tencent.tmapkupdatesdk.internal.logic.a.handleMessage(ProGuard:98) E/AndroidRuntime(12010): at android.os.Handler.dispatchMessage(Handler.java:102) E/AndroidRuntime(12010): at android.os.Looper.loop(Looper.java:148) E/AndroidRuntime(12010): at android.os.HandlerThread.run(HandlerThread.java:61)可能是由于art的问题,但也表示这个SDK多少还是存在着问题会影响使用的。
谷歌了下应用宝自动更新SDK,发现资料也挺少的,但发现了一个14年老版本,可以在此处下载,引入下载到的jar包“jce.jar”和“TMAssistantSDK_selfUpdate_201407240950.jar”,权限配置跟上面的一样,SDK的初始化如下
TMSelfUpdateSDK.getInstance().initTMSelfUpdateSDK(getApplicationContext(), 应用的APP ID, "渠道号",new ITMSelfUpdateSDKListener() {@Overridepublic void OnDownloadYYBStateChanged(String arg0, int arg1, int arg2, String arg3) {}@Overridepublic void OnDownloadYYBProgressChanged(String arg0, long arg1, long arg2) {}@Overridepublic void OnDownloadAppStateChanged(int arg0, int arg1, String arg2) {}@Overridepublic void OnDownloadAppProgressChanged(long arg0, long arg1) {}@Overridepublic void OnCheckNeedUpdateInfo(TMSelfUpdateSDKUpdateInfo arg0) {if (arg0 != null) {StringBuilder sb = new StringBuilder();sb.append("NewApkSize=").append(arg0.getNewApkSize()).append("NewFeature=")//更新日志.append(arg0.getNewFeature()).append("PatchSize=").append(arg0.getPatchSize()).append("Status=").append(arg0.getStatus()).append("UpdateDownloadUrl=")//apk下载地址.append(arg0.getUpdateDownloadUrl()).append("UpdateMethod=").append(arg0.getUpdateMethod());System.out.println("SelfUpdate " + sb.toString()); } else {System.out.println("SelfUpdate already latest!!!");}}}); TMSelfUpdateSDK.getInstance().checkNeedUpdate();
运行后,可以正常检测到应用宝上的最新版本信息。如果返回的TMSelfUpdateSDKUpdateInfo为null,则说明已经是最新了。
返回有新版本后,可以自定义进行新版本的提示,并提示进行更新。SDK提供了省流量的更新方式,即使用应用宝进行更新,通过调用SDK中的方法进行实现
TMSelfUpdateSDK.getInstance().startSaveUpdate(getApplicationContext());不过这里需要说明的是,最好判断下当前本机是否有安装应用宝app,如果已安装,则会自动拉起应用宝并自动进入到我们app的更新界面;如果是没有安装应用宝,则会去下载应用宝app,下载安装完打开应用宝app后,自动进入我们app的更新界面。判断应用宝是否安装的方法如下
if (TMSelfUpdateSDK.getInstance().checkYYBInstalled() == TMAssistantDownloadSDKTaskState.ALREADY_INSTALLED)所以,建议在已装有应用宝的时候,进行调用startSaveUpdate进行更新;在未装有应用宝的时候,通过 返回的UpdateDownloadUrl进行下载apk安装包进行更新,下载apk的方式可以根据自己的喜好进行实现。这样不会强制用户进行应用宝的捆绑安装。转载请声明原文地址:http://blog.csdn.net/sagittarius1988/article/details/52200815
总结
以上是生活随笔为你收集整理的应用宝省流量更新sdk接入指南的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: mysql 时间差统计
- 下一篇: qt制作一个画板_基于Qt的画图板的设计