【荣耀智慧服务】快捷服务开发指南
荣耀快捷服务是荣耀智慧服务的快捷入口之一,用户点击负一屏 > 我的服务 > 最右侧“更多”按钮,拖到想要添加的图片到“自定义服务”中,即可在快捷服务列表页面中,将想要添加的快捷服务卡片。快捷服务因丰富多样、方便快捷的特点,广受用户和开发者青睐。
快捷服务主要通过开发者提供每个服务 deeplink 进行跳转,服务以图标或文字链接方式呈现,用户点击服务通过 deeplink 跳转到 APP 或者 RPK 内某个指定页面,方便、便捷。
1. Android Deeplink 开发指南
Deep Linking(译:深度链接)它的实现原理,是使用 Uri Scheme 协议来实现。
1.1 Deep Linking 能做什么
1.1.1 它可以唤起指定应用并向其传递数据,根据传递的数据显示特定内容页的详细信息;
1.1.2 它不再受制于应用,只通过一个链接便可唤起应用并跳转到指定页面;
1.1.3 它使应用之间产生了联系,使应用不再孤立存在;
1.1.4 它优化了用户体验,这一点是它最终要达到的目的。
1.2 官方解释
当单击链接或编程请求调用 Web URI 意图时,Android 系统按顺序依次尝试以下每一个操作,直到请求成功为止:
1.2.1 打开用户首选的应用程序,它可以处理 URI,如果指定的话。
1.2.2 打开可以处理 URI 的唯一可用应用程序。
1.2.3 允许用户从对话框中选择应用程序。
官方文档:https://developer.android.com/training/app-links/deep-linking
2. URL Scheme 协议格式
scheme://host/path:port/path?query1=xxxx&query2=xxxx
例如:
deeplinkapp://com.mytest.deeplink:8080/deeplinkDetail?param1=test
上面包含了 scheme、host、port、path、query。
deeplinkapp:代表该 Scheme 协议名称(scheme)。
com.mytest.deeplink:代表 Scheme 作用于哪个地址域(host)。
8080:代表路径端口号(port)。
deeplinkDetail:代表 Scheme 指定的页面(path)。
param1:代表传递的参数名称(query)。
3. 使用 DeepLink
3.1 修改 manifest 文件
我们需要在清单文件 manifest 中对于要开放给外部的 activity 添加 intent-filter。配置如下:
<activity
android:name=".******Activity">
<intent-filter>
< !—必须设置-->
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
< !--协议部分,自主设置-->
<data
android:scheme="****" < !—如 android:scheme="deeplinkapp"-->
android:host="****" < !—如 android:host="com.mytest.deeplink"-->
android:port="****" < !—如 android:port="8080" -->
android:path="****" < !—如 android:path="deeplinkDetail" -->
/>
< /intent-filter>
< /activity>
3.2 代码处理
在对应 Activity 中的添加逻辑处理代码:
if (getIntent() != null && getIntent().getData() != null)
{
Uri uri = getIntent().getData();
// 完整的 url 信息
String url = uri.toString();
// scheme 部分
String scheme = uri.getScheme();
// host 部分
String host = uri.getHost();
//port 部分
int port = uri.getPort();
// 访问路径
String path = uri.getPath();
// Query 部分
String query = uri.getQuery();
//获取指定参数值
String param1= uri.getQueryParameter("param1");
}
4. 测试
4.1 使用 adb 命令
$ adb shell am start -a android.intent.action.VIEW –d
例如:
adb shell am start -a android.intent.action.VIEW –d deeplinkapp://com.mytest.deeplink:8080/deeplinkDetail?
param1=test com.mytest.deeplink
4.2 使用 web 打开
替换 deeplink.html 中的 deeplink 地址,拷贝文件到手机,使用浏览器打开 html 即可
Deeplink.html:
<!DOCTYPE html>
<html>
<head>
<title>deeplink test</title>
</head>
<body>
<a href="deeplinkapp://com.mytest.deeplink:8080/deeplinkDetail?param1=test">打开 APP</a>
</body>
<html>
5. Apk 和 Rpk 的 deeplink 查询或获取方法
5.1 Apk(Android)的 deeplink 查询或获取方法
5.1.1 请跟产品经理或者开发人员确认应用的页面已经支持 deeplink。
Deeplink 格式如下:
[scheme]://[host]/[path]?[query]
5.1.2 获取应用的 AndroidManifest 文件,找到对应页面的 Activity 配置。
示例:
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
< intent-filter android:label="@string/filter_view_http_gizmos">
< action android:name="android.intent.action.VIEW" />
< category android:name="android.intent.category.DEFAULT" />
< category android:name="android.intent.category.BROWSABLE" />
< !-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
< !-- note that the leading "/" is required for pathPrefix-->
< /intent-filter>
< intent-filter android:label="@string/filter_view_example_gizmos">
< action android:name="android.intent.action.VIEW" />
< category android:name="android.intent.category.DEFAULT" />
< category android:name="android.intent.category.BROWSABLE" />
< !-- Accepts URIs that begin with "example://gizmos” -->
< data android:scheme="example"
android:host="testhost"
android:pathPrefix="/gizmos" />
< /intent-filter>
< /activity>
5.1.3 查看 intent-filter 标签中的 data 标签,标签中的 scheme 和 host 的值分别对应 deeplink 中的 scheme 和 host 字段。
5.1.4 对于 path,data 标签中共支持 path,pathPattern,pathPrefix 三种设置方式,其意义分别如下:
Path:指定了完整的 path 路径,必须跟配置的值完全一样,应用才会处理;
pathPattern:指定了完整 path 的正则表达式,即传入的 path 必须满足 pathPattern 指定的正则表达式应用才会处理;
pathPrefix:指定了 path 的前缀,即传入的 path 以 pathPrefix 的值为前置即可处理;
query 代表传入到页面的参数,其为 key-value 值对,多个参数间用 &连接。
5.2 Rpk(快应用)的 deeplink 查询或获取方法
详情参考快应用deeplink文档。
Deeplink 参数添加方式:
负一屏或其他卡片宿主,通过 deeplink 或者 router.push 跳转打开快应用,无论是否有历史留存页面,都可以直接跳转目标落地页,返回可一键返回至宿主应用页面。
5.2.1 原跳转链接无具体页面,只有包名,如:
hap://app/com.freecharge.android.quickapp
则在后面添加 hap://app/com.freecharge.android.quickapp/?___PARAM_LAUNCH_FLAG___=clearTask
注意:
"/?"都不能少
5.2.2 原跳转链接有指定跳转目录,但无跳转参数,如:
hap://app/org.hap.govaffairs/views/HealthQrcode/Result
在后面添加 hap://app/org.hap.govaffairs/views/HealthQrcode/Result?___PARAM_LAUNCH_FLAG___=clearTask
注意:
"?"不能少
5.2.3 原跳转链接本身就有指定跳转目录和跳转参数,如:
hap://app/com.wifi.quickapp.reader.free/Page/Go?path=read&bookid=70317&chapterid=15688960
在后面添加 hap://app/com.wifi.quickapp.reader.free/Page/Go?path=read&bookid=70317&chapterid=15688960&___PARAM_LAUNCH_FLAG___=clearTask
注意:
"&"不能少
评论