默言忆旧
默言忆旧
  • 发布:2025-03-21 17:14
  • 更新:2025-03-27 10:27
  • 阅读:176

#插件需求# 鸿蒙next 支持直接设置 UrlSchemes 跳转指定界面

分类:鸿蒙Next

uniapp打包鸿蒙next后,希望能支持设置UrlSchemes,即可直接打开指定页面。

预期目标:可以支持跟Android和iOS一样,在manifest.json中直接配置UrlSchemes,即可实现在应用内打开指定界面的功能。
实际结果:在鸿蒙Next中返回按钮后,鸿蒙云调试的手机跳转的是空白界面,安卓手机则是成功跳转到uniapp页面路由“/pages/resulte/success/index”界面。

Android和iOS示例代码主要在uniapp的 App.vue中执行:

复制代码```export default {  
    onLaunch: function(options) {  
        // #ifdef APP-PLUS  
        plus.screen.lockOrientation("portrait-primary");  
        this.checkArguments(); // 检测启动参数    
        // 重点是以下: 一定要监听后台恢复 !一定要    
        plus.globalEvent.addEventListener('newintent', (e) => {  
            this.checkArguments(); // 检测启动参数    
        });  
        // #endif  
    },  
    onHide: function() {  
        console.log('App Hide')  
        //#ifdef APP-PLUS || APP-HARMONY  
        plus.runtime.arguments = null;  
        plus.runtime.arguments = "";  
        //#endif  
    },  
    onDestroy() {  
        // 销毁监听器  
        plus.globalEvent.removeEventListener('newintent');  
    },  
    methods: {  
        checkArguments() {  
            try {  
                var args = plus.runtime.arguments;  
                if (args) {  
                    // 处理args参数,如直达到某新页面等  
                    let params = args.split("?")[1];  
                    if (params != undefined) {  
                        uni.reLaunch({  
                            url: "/pages/resulte/success/index?" + params  
                        })  
                    }  

                }  
            } catch (e) {  
                console.log('Shortcut-exception: ' + e);  
            }  
        }  
    }  
}```  

这里可以实时监控url地址,实现应用内若点击了UrlSchemes指定地址,直接跳转的功能。

为了让鸿蒙能够拉起应用,已在生成的项目entry/src/main/module.json5中,设置以下参数:

复制代码          {  
            "entities": [  
              "entity.system.home"  
            ],  
            "actions": [  
              "action.system.home"  
            ]  
          },  
          {  
            "entities": [  
              "entity.system.browsable"  
            ],  
            "actions": [  
              "ohos.want.action.viewData"  
            ],  
            "uris": [  
              {  
                "scheme": "schemeName",  
                "host": "www.test.com",  
                // path可选,表示域名服务器上的目录或文件路径,例如www.example.com/path1/中的path1  
                // 如果应用只能处理部分特定的path,则此处应该配置应用所支持的path,避免出现应用不能处理的path链接也被引流到应用中的问题  
                "path": "pages/resulte/success/index"  
              }  
            ],  
            // domainVerify须设置为true  
            "domainVerify": true  
          }, // 新增一个skill对象,用于跳转场景。如果存在多个跳转场景,需配置多个skill对象

uniapp里面是嵌套了一个webview界面,src地址是E签宝签署合同,现在签署成功后E签宝返回了一个地址:"schemeName://www.test.com/pages/resulte/success/index?tsignType=SIGN&tsignCode=0&tsignDes=签署成功",

【上述两张图片都是uniapp里面的webview嵌套展示的】。

2025-03-21 17:14 负责人:无 分享
已邀请:
4***@qq.com

4***@qq.com -

这个schemeName://www.test.com/pages/resulte/success/index是写在 e 签宝的重定向地址吧,建议换种方式:重定向地址重新开个服务做消息中转,在新开的这个服务里面通过 postMessage 把信息同步到 app 中

  • 默言忆旧 (作者)

    谢谢您的回复~ 道理上可行,但是信息同步后,鸿蒙里面怎样根据参数,跳转到指定界面呢?

    2025-03-27 11:37

  • 4***@qq.com

    回复 默言忆旧: webview监听@onPostMessage 拿到参数 后随便怎么操作了呀

    2025-03-27 16:46

  • 默言忆旧 (作者)

    回复 4***@qq.com: 忘记回复了,已解决,谢谢

    2025-04-08 15:45

  • 4***@qq.com

    回复 默言忆旧: 什么方案呢

    2025-04-08 16:18

  • 默言忆旧 (作者)

    回复 4***@qq.com: 就是你说的方法,多跳转一个html页面,使用uni.webView.navigateTo跳转的

    2025-04-08 16:57

要回复问题请先登录注册

  • 标题 / 粗斜体
  • 代码片段
  • 超链接 / 图片 / 视频
  • 列表 / 引用

文章内容较多时,可以用标题分段 :

## 大标题 
### 小标题

斜体 / 粗体 :

**粗体** 
*斜体*
***粗斜体***

代码片段 :

``` javascript
代码片段
```

超链接 :

[链接文字](链接地址) 例: [百度](http://www.baidu.com)

图片 :

![图片说明](图片地址) 例: ![百度logo](http://www.baidu.com/img/bdlogo.gif)

视频 :

!![视频说明](视频地址) 例: !![优酷视频](http://youku.com)

有序列表 :

1. 123
2. 123
3. 123

无序列表 :

- 123
- 123
- 123

引用 : ( 双回车后结束引用 )

> 引用内容
引用内容
引用内容