【荣耀智慧服务】快捷服务开发指南
荣耀快捷服务是荣耀智慧服务的快捷入口之一,用户点击负一屏 > 我的服务 > 最右侧“更多”按钮,拖到想要添加的图片到“自定义服务”中,即可在快捷服务列表页面中,将想要添加的快捷服务卡片。快捷服务因丰富多样、方便快捷的特点,广受用户和开发者青睐。
快捷服务主要通过开发者提供每个服务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 testtitle>
head>
<body>
<a href="deeplinkapp://com.mytest.deeplink:8080/deeplinkDetail?param1=test">打开APPa>
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查询或获取方法
详情参考快应用https://doc.quickapp.cn/tutorial/platform/deeplink.html文档。
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
注意:
"&"不能少
了解更多详情,欢迎访问荣耀荣耀开发者服务平台官网:https://developer.hihonor.com/
7 月 20 日 - 10 月 20 日,参与荣耀开发者服务平台注册认证,更多好礼相送。
官方联系方式:
官方微信:HONOR_Developer
官方邮箱:[email protected]