Pārlūkot izejas kodu

合入掌沃通子应用静默更新需求代码

zhanglong7 3 gadi atpakaļ
vecāks
revīzija
bf510a2be0

+ 3 - 0
superapp-client/app/src/main/assets/mobile-action.xml

@ -239,4 +239,7 @@
239 239
	<action name="changeTextSize" class="com.ai.ipu.superapp.func.AppMenuSettingPlugin" method="changeTextSize"></action>
240 240
241 241
242
	<!-- 静默加载子应用资源 -->
243
	<action name="updateSubIpuAppResourceSilence" class="com.ai.ipu.superapp.func.SubAppPreLoader" method="updateSubIpuAppResourceSilence" />
244
242 245
</actions>

+ 18 - 1
superapp-client/app/src/main/java/com/ai/ipu/superapp/func/MobileOpenApp.java

@ -21,10 +21,14 @@ import android.util.Log;
21 21
import android.widget.Toast;
22 22
23 23
import com.ai.ipu.basic.file.FileUtil;
24
import com.ai.ipu.basic.net.http.HttpTool;
24 25
import com.ai.ipu.mobile.dynamic.app.NativeMenu;
25 26
import com.ai.ipu.mobile.dynamic.app.NativeMenuManager;
27
import com.ai.ipu.mobile.frame.preload.PreLoadManager;
28
import com.ai.ipu.mobile.frame.template.ResVersionManager;
26 29
import com.ai.ipu.mobile.ui.HintUtil;
27 30
import com.ai.ipu.mobile.ui.activity.IpuUrlActivity;
31
import com.ai.ipu.mobile.util.Constant;
28 32
import com.ai.ipu.mobile.util.NatvieMenuConstant;
29 33
import com.ai.ipu.superapp.MainActivity;
30 34
import com.ai.ipu.superapp.SubAppActivity;
@ -76,11 +80,16 @@ public class MobileOpenApp extends Plugin {
76 80
        if(subAppOpenStatus.get(appId)!=null&&subAppOpenStatus.get(appId)){
77 81
        	openSubApp(ipuParam);
78 82
        }else{
83
			String host = MultipleManager.getCurrRequestHost();
84
			String servlet = MultipleManager.getCurrRequestServlet();
85
			String requestPath = MultipleManager.getCurrRequestPath();
86
        	getVersion(host + requestPath + servlet); // 通过getVersion判断资源列表是否加密
79 87
        	TemplateDownloader downloader = new TemplateDownloader(context) {
80 88
    			@Override
81 89
    			protected void downloadComplete() {
82 90
    				subAppOpenStatus.put(appId, true);
83 91
    				openSubApp(ipuParam);
92
					PreLoadManager.onForegroundDownloadDone(appId); //通知静默资源加载
84 93
    			}
85 94
    		};
86 95
    		downloader.updateResource();
@ -286,5 +295,13 @@ public class MobileOpenApp extends Plugin {
286 295
		}
287 296
	}
288 297
289
298
	protected IData getVersion(String url) throws Exception {
299
		Map<String, String> postParam = new HashMap<>();
300
		postParam.put(Constant.Server.ACTION, Constant.Version.VERSION_ACTION);// 接口名固定getVersion
301
		String data = HttpTool.urlEncode(HttpTool.toQueryString(postParam), "UTF-8");
302
		String result = HttpTool.httpRequest(url, data, Constant.HTTP_POST);
303
		DataMap res = new DataMap(result);
304
		ResVersionManager.setEncryptResVersions(res); //设置是否加密res.version.properties
305
		return res;
306
	}
290 307
}

+ 111 - 0
superapp-client/app/src/main/java/com/ai/ipu/superapp/func/SubAppPreLoader.java

@ -0,0 +1,111 @@
1
package com.ai.ipu.superapp.func;
2
3
import com.ai.ipu.basic.net.http.HttpTool;
4
import com.ai.ipu.mobile.app.MobileCheck;
5
import com.ai.ipu.mobile.frame.IIpuMobile;
6
import com.ai.ipu.mobile.frame.multiple.MultipleAppConfig;
7
import com.ai.ipu.mobile.frame.multiple.MultipleManager;
8
import com.ai.ipu.mobile.frame.plugin.Plugin;
9
import com.ai.ipu.mobile.frame.preload.PreLoadListener;
10
import com.ai.ipu.mobile.frame.preload.PreLoadManager;
11
import com.ai.ipu.mobile.frame.template.SubAppResourceDownloader;
12
import com.ai.ipu.mobile.util.Constant;
13
import com.ai.ipu.mobile.util.IpuMobileLog;
14
import com.ailk.common.data.impl.DataMap;
15
16
import org.json.JSONArray;
17
18
import java.util.ArrayList;
19
import java.util.HashMap;
20
import java.util.List;
21
import java.util.Map;
22
23
24
/**
25
 * 用于静默加载子应用资源,解决一些常用子应用在第一次打开时下载资源要等很久的问题。
26
 */
27
public class SubAppPreLoader extends Plugin {
28
    private static final String KEY_CODE = "result";
29
    private static final String KEY_MSG = "message";
30
31
    public SubAppPreLoader(IIpuMobile ipumobile) {
32
        super(ipumobile);
33
    }
34
35
    /**
36
     * 静默更新子应用资源
37
     * @param params js传json数组参数,包含需要更新的子应用ID
38
     */
39
    public void updateSubIpuAppResourceSilence(JSONArray params) throws Exception {
40
        if (MobileCheck.checkNetworkConnected()) {
41
            String param = params.getString(0);
42
            JSONArray jsonArray = new JSONArray(param);
43
            ArrayList<String> appIds = new ArrayList<>();
44
            for (int i=0; i<jsonArray.length(); i++) {
45
                appIds.add(jsonArray.getString(i));
46
            }
47
48
            try {
49
                boolean res = checkShouldUpdate(appIds);
50
                if (!res) {
51
                    callback(buildCodeMsgString(0, "不需要更新"));
52
                    return;
53
                }
54
            } catch (Exception e) {
55
                IpuMobileLog.e(TAG, e.getMessage(), e);
56
            }
57
            PreLoadManager.downLoadSubAppResources(appIds, new PreLoadListener() {
58
                @Override
59
                public void onResult(int code, String msg) {
60
                    callback(buildCodeMsgString(code, msg));
61
                }
62
63
                @Override
64
                public void onSubAppDone(String subAppId) {
65
                }
66
            });
67
        } else {
68
            callback(buildCodeMsgString(-2, "网络异常"));
69
        }
70
    }
71
72
    private boolean checkShouldUpdate(List<String> appIds) throws Exception {
73
        for (String appId : appIds) {
74
            if (isAppShouldUpdate(appId)) {
75
                return true;
76
            }
77
        }
78
        return false;
79
    }
80
81
    private boolean isAppShouldUpdate(String appId) throws Exception {
82
        return resourceFileChanged(appId);
83
    }
84
85
    private boolean resourceFileChanged(String appId) throws Exception {
86
        SubAppResourceDownloader downloader = new SubAppResourceDownloader(appId);
87
        return downloader.isRemoteResourceVersionsChanged();
88
    }
89
90
91
    private String getRemoteVersion(String subAppId) throws Exception {
92
        MultipleAppConfig appConfig = MultipleManager.getAppConfig(subAppId);
93
        String host = appConfig.getRequestHost();
94
        String servlet = appConfig.getRequestServlet();
95
        String requestPath = appConfig.getRequestPath();
96
        String url = host + requestPath + servlet;
97
        Map<String, String> postParam = new HashMap<>();
98
        postParam.put(Constant.Server.ACTION, Constant.Version.VERSION_ACTION);// 接口名固定getVersion
99
        String data = HttpTool.urlEncode(HttpTool.toQueryString(postParam), "UTF-8");
100
        String result = HttpTool.httpRequest(url, data, Constant.HTTP_POST);
101
        DataMap dataMap = new DataMap(result);
102
        return dataMap.getString(Constant.ServerConfig.RESOURCE_VERSION);
103
    }
104
105
    private String buildCodeMsgString(int code, String msg) {
106
        DataMap dataMap = new DataMap();
107
        dataMap.put(KEY_CODE, code);
108
        dataMap.put(KEY_MSG, msg);
109
        return dataMap.toString();
110
    }
111
}