全部产品
云市场

接入指南

更新时间:2018-06-28 10:43:59

1. 系统升级接入指南

1.1 初始化

在application的onCreate()方法中,做如下必需项的设置:(必须要做。如果同时接入系统升级和应用升级的话,只需做1次即可。)

  1. // 必需设置
  2. FotaContext.getInstance().initContext(this);
  3. FotaContext.getInstance().setFirmwareVersion(this, SystemProperties.get("ro.yunos.build.version"));
  4. FotaContext.getInstance().setSafeguardAuth(getApplicationContext(), "aicc");

可选的设置有,通过setCustomizedFilterFields()方法,设置自定义查询条件:(无自定义查询条件的话,可不做。)

  1. // 可选设置
  2. JSONArray jsonArray = null;
  3. try {
  4. jsonArray = new JSONArray();
  5. JSONObject jsonObject = new JSONObject();
  6. jsonObject.put("name", "field1");
  7. jsonObject.put("value", "value1");
  8. jsonArray.put(jsonObject);
  9. JSONObject jsonObject2 = new JSONObject();
  10. jsonObject2.put("name", "field2");
  11. jsonObject2.put("value", "value2");
  12. jsonArray.put(jsonObject2);
  13. } catch (Exception e) {
  14. Log.e(TAG, "Exception happened in FotaMainApplication onCreate, e.getMessage()=" + e.getMessage());
  15. e.printStackTrace();
  16. }
  17. Log.d(TAG, "FotaMainApplication onCreate jsonArray.toString=" + jsonArray.toString());
  18. FotaContext.getInstance().setCustomizedFilterFields(this, jsonArray.toString());

1.2 绑定osupdate service

更详细的内容,请参考“系统升级参考设计apk的代码实现”。

  1. // 使用OsUpdateServiceManager的静态方法,绑定osupdate service。
  2. // 返回值:
  3. // true:已经绑定,false:未绑定。需要调用者自己维护该返回值。
  4. // 入参:
  5. // context,应用的上下文
  6. // connection,一个ServiceConnection
  7. bindDownloadService(Context context, ServiceConnection connection)
  8. // 示例代码
  9. boolean isBound = OsUpdateServiceManager.bindDownloadService(this, mConnection);
  10. private ServiceConnection mConnection = new ServiceConnection() {
  11. public void onServiceConnected(ComponentName arg0, IBinder arg1) {
  12. // 取得osupdate service的实例
  13. mService = IOsUpdateService.Stub.asInterface(arg1);
  14. try {
  15. mService.getFotaDownloadEnvironmentRemote().setUiMode(FotaDownloadEnvironment.UI_MODE_INTERACTIVE);
  16. mService.getFotaDownloadEnvironmentRemote().setIsUserCheckingUi(true);
  17. // 注册监听listener
  18. mService.addListener(mListener);
  19. // 获取osupdate service的状态
  20. mMajorStatus = mService.getServiceStatus();
  21. mMinorStatus = mService.getServiceMinorStatus();
  22. // 根据不同的状态,分别做处理
  23. switch (mMajorStatus) {
  24. case FotaDownloadServiceManager.STATUS_VERYFY_DONE:
  25. case FotaDownloadServiceManager.STATUS_INSTALL_FORCED_TIMER_TICK:
  26. case FotaDownloadServiceManager.STATUS_INSTALLING:
  27. case FotaDownloadServiceManager.STATUS_DOWNLOADING:
  28. case FotaDownloadServiceManager.STATUS_INSTALL_ERROR:
  29. switch (mMinorStatus) {
  30. case FotaDownloadServiceManager.STATUS_PRECHECK_POWER_LOW:
  31. case FotaDownloadServiceManager.STATUS_PRECHECK_POWER_NEED_CHARGING:
  32. case FotaDownloadServiceManager.STATUS_PRECHECK_DATA_STORAGE_TOO_LOW:
  33. case FotaDownloadServiceManager.STATUS_INSTALL_ERROR_FILE_NOTFOUND:
  34. default:
  35. }
  36. case FotaDownloadServiceManager.STATUS_DOWNLOAD_ERROR:
  37. case FotaDownloadServiceManager.STATUS_VERYFY_FAILED:
  38. case FotaDownloadServiceManager.STATUS_CHECK_SUCCESS:
  39. default:
  40. }
  41. } catch (RemoteException e) {
  42. Log.e(TAG, "", e);
  43. finish();
  44. }
  45. }
  46. public void onServiceDisconnected(ComponentName arg0) {
  47. mService = null;
  48. mIsBound = false;
  49. }
  50. };

1.3 注册监听osupdate service状态变化的listener

更详细的内容,请参考“系统升级参考设计apk的代码实现”。

  1. // 注册监听listener
  2. mService.addListener(mListener);
  3. // listener的定义
  4. private FotaDownloadServiceIListener mListener = new FotaDownloadServiceIListener() {
  5. // 从service返回新版本信息
  6. public void onGotXml(FotaRootXmlInfo fota) throws RemoteException {
  7. mFotaXml = fota;
  8. synchronized (myCurrentVersionInfoLocker) {
  9. if (mFotaXml != null && !TextUtils.isEmpty(fota.getSystemVersion())
  10. && !TextUtils.isEmpty(fota.getSize())) {
  11. mCurrentFotaVersionInfo = new FotaVersionInfo();
  12. mCurrentFotaVersionInfo.setSystemVersion(fota.getSystemVersion());
  13. mCurrentFotaVersionInfo.setSize(fota.getSize());
  14. mCurrentFotaVersionInfo.setTimeStamp(fota.getTimeStamp());
  15. mCurrentFotaVersionInfo.setUpdateInfoText(fota.getUpdateInfoText());
  16. mCurrentFotaVersionInfo.setUpdateInfoUrl(fota.getUpdateInfoUrl());
  17. } else {
  18. mCurrentFotaVersionInfo = mLocalFotaVersionInfo;
  19. }
  20. }
  21. }
  22. // osupdate service侧状态变化,通过该方法回调到这里
  23. public void onServiceStatusChange(final int majorStatus, final int minorStatus) {
  24. handler.post(new Runnable() {
  25. public void run() {
  26. onStatusChangedByService(majorStatus, minorStatus);
  27. }
  28. });
  29. }
  30. // service侧更新下载进度,通过该方法回调到这里
  31. public void onDownloadProcess(final int progress, float completeFileSize) {
  32. Log.i(TAG, "FotaUpdateInfo.onDownloadProcess called, partCount: " + progress + ", value: " + completeFileSize);
  33. handler.post(new Runnable() {
  34. public void run() {
  35. updateProgressbar(progress);
  36. }
  37. });
  38. }
  39. };

1.4 参考设计apk中的用户交互

1) 处理强制夜间升级的弹窗

在应用的AndroidManifest.xml文件中,处理弹窗的类中,增加如下2个action的接收:

  1. // 收到该广播,用于显示一个提示:
  2. /*
  3. * 更新提示
  4. * 将在今晚自动升级 或者 将在明晚完成自动升级
  5. * 只有一个按钮:我知道了
  6. * 用户点击按钮之后,弹窗消失
  7. */
  8. <action android:name="com.aliyun.aicc.fota.action.popupdialog.OSUPDATE_SERVICE_MIDNIGHT_INSTALL_TIP" />
  9. // 如果云端配置为“夜间强制升级”,
  10. // 端侧fota sdk内部:当下载完该升级包,并且校验通过之后,将设置Alarm,在夜间2:00~3:00之间的某一时刻,发出该广播。
  11. // 应用层收到该广播之后,可显示一个倒计时弹窗,倒计时超时之后,自动重启设备进行升级。
  12. <action android:name="com.aliyun.aicc.fota.action.popupdialog.OSUPDATE_SERVICE_MIDNIGHT_INSTALL" />

具体实现,请参考参考设计apk中的PopupDialogReceiver.java中的如下方法:

  1. showNightForcedUpdateTipDialog()
  2. showMidnightInstallDialog()

2. 应用升级接入指南

2.1 初始化

  1. FotaContext.getInstance().initContext(this);
  2. FotaContext.getInstance().setSafeguardAuth(this, "aicc");
  3. FotaContext.getInstance().setEnvironment(FotaContext.CLOUD_ENV_ONLINE);
  4. FotaAppConfig.getInstance().setAutoCheckPackagesList(this, 190*1000, new String[]{"com.yunos.member","com.alios.app1","com.alios.app2"});

2.2 静默下载,自动安装

  1. FotaAppConfig.getInstance().setAutoUpgradeUnderWifi(this, true);
  2. FotaAppConfig.getInstance().setAutoUpgradeUnderMobile(this,true);

服务端选择自动安装(只有自升级应用APK才可以选择这一项)

2.3 自定义安装

对于插件选择的安装类型是自定义安装

3. push接入指南

3.1 在应用的manifest文件中,加入push广播的接收:

  1. <receiver android:name="com.aliyun.aicc.fota.push.PushReceiver">
  2. <intent-filter>
  3. <action android:name="com.aliyun.aicc.fota" />
  4. </intent-filter>
  5. </receiver>

3.2 下载并集成cmns apk

  • 说明:
    • cmns apk是配合ota中的消息推送,诊断等功能所使用的关联apk。
    • 下载到的文件后缀名是.zip,手动改为.apk,并对该apk重新做签名。

4. 升级诊断接入指南

4.1 在应用的manifest文件中,加入升级诊断service

  1. <service
  2. android:name="com.aliyun.aicc.fota.service.DiagnoseService" android:exported="false">
  3. <intent-filter>
  4. <action android:name="com.aliyun.aicc.fota.action.Diagnose" />
  5. </intent-filter>
  6. </service>

4.2 升级诊断的使用

1. 系统升级的诊断

使用方法见:https://help.aliyun.com/document_detail/73309.html

2. 应用升级的诊断

与上面的系统升级诊断类似。