当前位置: 首页 > news >正文

Flutter杂学: iOS 上启用自动填充和关联域

下面是详细的配置和代码,以确保在 iOS 上启用自动填充和关联域(Associated Domains)功能。

配置步骤

1. 在 Apple Developer 控制台中启用 Associated Domains

  • 登录 Apple Developer。
  • 导航至您的 App ID 设置页面。
  • 找到您要配置的 App ID,并点击编辑(Edit)。
  • 在 Capabilities 部分启用 “Associated Domains”。添加您的域名,例如 applinks:example.com 和 webcredentials:example.com。

2. 更新 Xcode 项目8

  • 打开您的 Flutter 项目的 Runner.xcworkspace 文件:open ios/Runner.xcworkspace
  • 选择项目导航器中的 Runner 项目。
  • 在目标 (Targets) 部分选择 Runner。
  • 打开 “Signing & Capabilities” 选项卡。
  • 点击左上角的 + Capability 按钮,选择 “Associated Domains”。
  • 在 Associated Domains 部分添加您的域名,如 applinks:example.com 和 webcredentials:example.com。

3. 配置服务器上的 apple-app-site-association 文件

在您的服务器上创建 .well-known 目录。
在该目录下创建一个 apple-app-site-association 文件,内容如下:

json
{"applinks": {"apps": []},"webcredentials": {"apps": ["ABCDE12345.com.example.app"]}
}

将 ABCDE12345.com.example.app 替换为您的实际应用程序 ID。

4. 更新 Info.plist 文件

编辑 ios/Runner/Info.plist 文件,添加以下键值:

<key>NSAppTransportSecurity</key>
<dict><key>NSAllowsArbitraryLoads</key><true/>
</dict>
<key>NSUserTrackingUsageDescription</key>
<string>We need your permission to track usage data.</string>
<key>CFBundleURLTypes</key>
<array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLSchemes</key><array><string>com.example.app</string> <!-- 替换为您的实际 URL Scheme --></array></dict>
</array>
<key>AssociatedDomains</key>
<array><string>applinks:example.com</string> <!-- 替换为您的实际域名 --><string>webcredentials:example.com</string> <!-- 替换为您的实际域名 -->
</array>

完整的 Flutter 示例代码

import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';class LoginPage extends StatefulWidget {@override_LoginPageState createState() => _LoginPageState();
}class _LoginPageState extends State<LoginPage> {final TextEditingController usernameController = TextEditingController();final TextEditingController passwordController = TextEditingController();final FlutterSecureStorage storage = FlutterSecureStorage();@overridevoid initState() {super.initState();_loadCredentials();}Future<void> _loadCredentials() async {String? username = await storage.read(key: "username");String? password = await storage.read(key: "password");if (username != null && password != null) {setState(() {usernameController.text = username;passwordController.text = password;});}}Future<void> _saveCredentials(String username, String password) async {await storage.write(key: "username", value: username);await storage.write(key: "password", value: password);}@overrideWidget build(BuildContext context) {return Scaffold(body: Center(child: AutofillGroup(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Padding(padding: const EdgeInsets.all(16.0),child: TextField(controller: usernameController,decoration: InputDecoration(labelText: 'Username'),autofillHints: [AutofillHints.username],),),Padding(padding: const EdgeInsets.all(16.0),child: TextField(controller: passwordController,decoration: InputDecoration(labelText: 'Password'),obscureText: true,autofillHints: [AutofillHints.password],),),ElevatedButton(onPressed: () async {String username = usernameController.text;String password = passwordController.text;await _saveCredentials(username, password);// Handle login logic here},child: Text('Login'),),],),),),);}
}void main() {runApp(MaterialApp(home: LoginPage()));
}
  • 发布新版本
  • 构建新的应用版本:
  • flutter build ios打开 Xcode 并归档应用:打开 ios/Runner.xcworkspace。
  • 选择 Product -> Archive。
  • 将应用提交到 App Store Connect。
  • 发布新版本:
  • 登录 App Store Connect。
  • 提交新版本并等待审核通过。

总结

通过上述步骤和代码配置,您可以在 iOS 上启用自动填充和关联域功能。请确保所有步骤都正确完成,并在发布前进行充分测试。这样不仅可以提升用户体验,还可以确保应用的稳定性和安全性。如果有任何问题或需要进一步的帮助,请随时询问。

http://www.lryc.cn/news/470957.html

相关文章:

  • 接口自动化-框架搭建(Python+request+pytest+allure)
  • [论文阅读]Constrained Decision Transformer for Offline Safe Reinforcement Learning
  • 工具_Nginx
  • web开发Model1
  • ImportError: cannot import name ‘Sequential‘ from ‘keras.models‘
  • python实战(二)——房屋价格回归建模
  • UHF机械高频头的知识和待学习的疑问
  • 深入理解 SQL 中的 WITH AS 语法
  • 同三维T80005JEHA-4K60 4K60超高清HDMI/AV解码器
  • 深信服秋季新品重磅发布:安全GPT4.0数据安全大模型与分布式存储EDS新版本520,助力数字化更简单、更安全
  • Flutter图片控件(七)
  • JavaEE初阶---文件IO总结
  • 10.28Python_pandas_csv
  • 数据处理与可视化:pandas 和 matplotlib 初体验(9/10)
  • 鸿蒙学习总结
  • 如何修改文件创建时间?六个超简单修改方法介绍
  • 【MySQL 保姆级教学】内置函数(9)
  • 华为大咖说丨如何通过反馈机制来不断优化大模型应用?
  • 上海亚商投顾:沪指缩量震荡 风电、传媒股集体走强
  • 三磺酸-Cy3.5-羧酸在水相环境中表现良好,能够提高成像的清晰度和准确性
  • 国标GB28181视频平台EasyGBS国标GB28181软件实现无需插件的视频监控对讲和网页直播
  • mac nwjs程序签名公证(其他mac程序也一样适用)
  • 网络应用技术 实验一:路由器实现不同网络间通信(华为ensp)
  • 使用 Qt GRPC 构建高效的 Trojan-Go 客户端:详细指南
  • 【mysql进阶】5-事务和锁
  • 指增和中性产品的申赎加减仓及资金调拨自动化伪代码思路
  • 【论文分享】居住开放空间如何影响老年人的情感:使用可穿戴传感器的现场实验
  • 入门 | Prometheus+Grafana 普罗米修斯
  • 制作Ubuntu根文件系统
  • 16个最佳测试管理工具(2024)