首页 > 其他分享 >Flutter OHOS flutter appscheme插件

Flutter OHOS flutter appscheme插件

时间:2024-12-18 09:21:38浏览次数:5  
标签:插件 scheme app value appscheme Android Scheme com flutter

Flutter App Scheme

配置说明

1、Android端配置说明

在您项目中 Android的AndroidManifest.xml文件中按照如下规范添加Scheme,例如android/app/src/main/AndroidManifest.xml

a、在需要启动的Activity中新增以下格式的代码

<!--Android Scheme-->
<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <!--需要被网页拉起必须设置-->
  <category android:name="android.intent.category.BROWSABLE" />
  <category android:name="android.intent.category.APP_BROWSER" />
  <!--协议部分-->
  <data
android:host="hong.com"
android:path="/product"
android:scheme="app" />
</intent-filter>

2、iOS端配置说明

在你的项目中,ios工程中Info.plist文件中按照如下规范添加Scheme,例如:ios/Runner/Info.plist

a、在Info.plist文件中添加如下格式的代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
...
<key>CFBundleURLTypes</key><!-- 表示添加Scheme相关信息 -->
<array>
  <dict>
<key>CFBundleURLName</key>
<string>hong.com/product</string>
<key>CFBundleURLSchemes</key>
<array>
  <string>app</string><!-- 此处是Scheme -->
</array>
  </dict>
</array>
...
  </dict>
</plist>

使用方法

1、初始化

AppScheme appScheme = AppSchemeImpl.getInstance();

2、getInitScheme

appScheme.getInitScheme().then((value){
  if(value != null){
setState(() {
  _platformVersion = "Init  ${value.dataString}";
});
  }
});

3、getLatestScheme

appScheme.getLatestScheme().then((value){
  if(value != null){
setState(() {
  _platformVersion = "Latest ${value.dataString}";
});
  }
});

4、注册从外部打开的Scheme监听信息

appScheme.registerSchemeListener().listen((event) {
  if(event != null){
setState(() {
  _platformVersion = "listen ${event.dataString}";
});
  }
});

URL Scheme协议格式:

一个完整的完整的URL Scheme协议格式由scheme、host、port、path和query组成,其结构如下所示

<scheme>://<host>:<port>/<path>?<query>

xiaoxiongapp://xapi.xiaomanxiong.com/home?redirect_type=1&ios_redirect_url=aaaaaaa.com&android_redirect_url=aaaaaaa.com
如下就是一个自定义的URL
openapp://hhong:80/product?productId=10000007
openapp: 即Scheme 该Scheme协议名称(必填)
hhong: 即Host,代表Scheme作用于哪个地址域(必填)
80: 即port,代表端口号
product:即path,代表打开的页面
param: 即query,代表传递的参数

传递参数的方法跟web端一样,通过问号?分隔,参数名和值之间使用等号=连接,多个参数之间使用&拼接。

Scheme使用

既然我们使用scheme来做打开app并跳转的逻辑,那这个scheme应该声明在哪里比较合适呢?如果你的应用在启动页(splash)或者在主界面(main)初始化了一些必要的设置,比如必要的token信息检查交易或者一些其它校验等,没有这些信息会造成崩溃的,这个时候我们就需要在启动页来声明这个scheme了,获取scheme信息保存起来,然后在主界面做处理逻辑,如跳转到其它界面等。当然你也可以声明scheme在其它地方,具体得需要看怎么实现业务比较方便。

HTML 示列

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<title>测试App Scheme</title>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
</head>
<body>

</body>
</html>

<html>
<head>
   
</head>
<body>
<div>
<a href="app://hong.com/product?productId=10000007&">Android、iOS</a>
</div>

<div>
<a href="app://">app:// 无host</a>
</div>

<div>
<a href="app://hong.com">app:// 无path</a>
</div>

<div>
<a href="app://hong.com/product">app:// 无query</a>
</div>

<div>
<a href="intent://hong.com/product?productId=10000007#Intent;scheme=app;end">Android特殊机型</a>
</div>

<div style="text-align:center;">
<h4>小熊有好货测试</h4>
<div>
<a href="xiaoxiongapp://xapi.xiaomanxiong.com/home?redirect_type=1&ios_redirect_url=www.baidu.com&android_redirect_url=www.baidu.com">测试类型1</a>
</div>
<div>
<a href="intent://xapi.xiaomanxiong.com/home?redirect_type=1&ios_redirect_url=www.baidu.com&android_redirect_url=www.baidu.com#Intent;scheme=xiaoxiongapp;end">(Android特殊机型)测试类型1</a>
</div>
</div>
</body>
</html>

标签:插件,scheme,app,value,appscheme,Android,Scheme,com,flutter
From: https://www.cnblogs.com/hongmengos/p/18613861

相关文章

  • 四大跨平台开发框架深度解析——uniapp、uniapp-X、React Native与Flutter
    引言随着移动互联网的飞速发展,跨平台开发框架成为了开发者们关注的焦点。这些框架旨在通过编写一套代码,实现多个平台的应用开发,从而大幅提高开发效率和降低维护成本。本文将深入剖析uniapp、uniapp-X、ReactNative和Flutter这四个主流的跨平台开发框架,探讨它们的优缺点及......
  • pg添加插件
    下载:https://github.com/cybertec-postgresql/pg_show_plans [root@pg1~]#unzippg_show_plans-master.zipArchive:pg_show_plans-master.zipb9f71815a911a186ffda53d356242a0150a1746bcreating:pg_show_plans-master/inflating:pg_show_plans-master/.editorconfi......
  • 纯js超酷select下拉框美化插件
    tastySelect是一款纯js超酷select下拉框美化插件。tastySelect下拉框插件支持多选,内置两种主题,使用CSS3动画过渡效果,整体设计时尚大方。预览 下载  使用方法在页面中引入tastySelect.css和tastySelect.min.js文件。<linkhref="css/tastySelect.css"rel="styles......
  • RTSP播放器EasyPlayer.js使用无插件流媒体服务器接口实现web网页H5播放
    在数字化时代,流媒体播放器已成为信息传播和娱乐消遣的主流载体。随着技术的进步,流媒体播放器的核心技术和发展趋势不断演变,影响着整个行业的发展方向。许多用户在使用无插件流媒体服务器时,常常对标准化的用户界面感到不满,因为这些界面可能无法满足他们特定的日常观看需求。为了......
  • 【Vue】Pinia持久化插件
    默认情况下,由于pinia是内存存储,当你刷新页面的时候pinia中的数据会丢失,可以借助于persist插件解决这个问题,persist插件支持将pinia中的数据持久化到sessionStorage和localStorage中。1、安装persist插件npminstallpinia-persistedstate-plugin2、pinia中使用persist......
  • 《Vue3笔记》第05节:Vue3项目引入Axios插件实现网络通信
    这篇文章基于前一个小节的代码基础之上,介绍如何在Vue3项目中引入Axios插件实现网络通信的功能。Vue3项目开发(微信文章集合)1.1、安装依赖Axios是一款实现网络通信的插件,在前后的分离的项目中,要和后端接口进行数据通信,就可以采用Axios这个插件。首先安装Axios插件所需要的......
  • jquery目录树插件
    file-explore是一款简单的jquery目录树插件。它使用嵌套的无序列表作为目录树的结构,结合font-awesome图标可以制作出非常漂亮的jquery目录树效果。 在线预览 下载 使用方法在页面中引入file-explore.css和font-awesome文件,以及jquery和file-explore.js文件。<lin......
  • 轻松绕过网站复制限制,Stylus插件让复制更自由!
    有时候,我们浏览网页时可能会遇到一些网站禁止复制,甚至禁止选中文字的情况,这让我们在需要复制内容时非常不方便。不过,别担心!今天我要为大家推荐一个超级实用的小工具——Stylus插件,它能让你轻松定制网页的复制体验,解决这些烦恼。Stylus插件介绍Stylus是一款浏览器插件,可以......
  • Bootstrap多级下拉菜单插件
    bootstrap-submenu是一款在原生bootstrapDropdowns组件的基础上进行扩展,可以生成多级子菜单的多级下拉菜单插件。原生的bootstrap下拉菜单只有一层,通过bootstrap-submenu插件,可以生成多级子菜单。在线预览下载 安装可以通过npm和bower来安装bootstrap-submenu插件。$np......
  • k8s阶段08 k8s扩展(kubectl插件), 调度器(亲和调度, 污点和容忍度调度), 集群日常管理
    Kubernetes扩展机制扩展Kubernetes1.kubectl插件2.APIServer扩展身份认证、鉴权和动态准入控制相关插件3.API扩展,以支持更多的资源类型4.调度器扩展以支持更多调度算法5.控制器扩展以支持更多的Controller或Operator6.网络插件,扩展Kubelet以配置Pod网络7.设备插件,扩展......