deeplink
deeplink same as arouer, 维护了一个id(一个deeplink)和microApp的映射表,app启动后
读取映射表,id和microapp.
1
2
3
4
5
6
7
8
9
10
11
12private void parseApps(Context context, InputStream is, String routerScheme, String routerDomain) {
JSONArray jsonArray = new JSONArray(read(is));
int length = jsonArray.length();
for(int i = 0; i < length; ++i) {
MetaData metaData = (MetaData)JSON.parseObject(jsonArray.getString(i), MetaData.class);
String scheme = String.format("%s://%s/app/%s", routerScheme, routerDomain, metaData.id);
this.parseMicroApp(context, metaData, metaData.entry.android, scheme);
}
}
}解析id和app,通过反射拿到microapp,把映射表的id和app进行映射。
1
2
3
4
5
6
7
8
9
10
11
12
13
14private boolean parseMicroApp(Context context, MetaData metaData, String clazzName, String scheme) {
Resources resources = context.getResources();
Class clazz = Class.forName(clazzName);
Constructor constructor = clazz.getDeclaredConstructor();
Object object = constructor.newInstance();
BaseMicroApp microApp = (BaseMicroApp)object;
microApp.setMetaData(metaData);
microApp.setApplicationContext(context);
microApp.setIcon(metaData.icon);
microApp.setScheme(scheme);
microApp.setAppDisplayName(metaData.getDisplayName(resources.getConfiguration().locale, "Unknown"));
MicroAppManagerImpl.getInstance().registerMicroApp(metaData.id, microApp);
return true;
}事件发出后,通过启动id,link拿到microapp,启动还有一个判断启动web还是uriHandler,acitivty,这里启动activity,来通过调用microapp的方法,来触发activity.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public boolean dispatchURI(@Nullable Activity activity, String uriString) {
Uri uri = Uri.parse(uriString);
URIHandler uriHandler = this.findDispatchHandler(uri);
List<String> pathComponents = uri.getPathSegments();
if (pathComponents.size() > 0) {
Map<String, String> parameters = URIDispatcherUtils.calcParameters(uri);
boolean shouldIntercept = this.mInterceptor.shouldIntercept(activity, pathComponents, parameters, uriString);
if (shouldIntercept) {
return false;
}
}
boolean result = uriHandler.handleURI(activity, uriString);
}
}
deeplink
https://noteforme.github.io/2022/02/25/deeplink/