PythonIDE Docs
中文
简体中文

原生能力入口

MiniApp 常用原生能力入口,不是完整模块总表。

主文档已合并:入口模型、Python 模块表、AppUI 原生组件入口表与侧边栏导航均由 schema 生成,请优先阅读 **iOS 原生能力**。本文仅保留历史深链,不再维护独立能力表。

MiniApp 场景下的原生能力配方:按任务选模块、组合调用、状态写回界面。

边界:这是 MiniApp 配方索引,不是可 import 的模块。完整 API 以各模块文档为准;系统调用放在按钮回调,不要写在 body() 里。

#模块概览

说明
导入按场景 import 对应模块(如 photosstorage
适合做什么选图、定位、通知、持久化、网络列表等 MiniApp 常见流
调用时机按钮、刷新、选择器触发;body() 只读 State
数据分工设置 storage、记录 database、密钥 keychain
反馈成功/取消/失败都写回 State 或 HUD

#快速开始

保存主题并触发触觉反馈:

python
import haptics
import storage

storage.set("demo.theme", "Dark")
if haptics.is_supported():
    haptics.notification("success")
print("已保存:", storage.get("demo.theme"))

#AppUI 示例

设备信息、快照、通知组合;所有原生调用在按钮回调里。

python
import appui
import device
import haptics
import notification
import storage

SNAPSHOT_KEY = "native.snapshot"
REMINDER_ID = "native.snapshot.reminder"

state = appui.State(
    message="就绪",
    rows=[
        {"id": "model", "title": "型号", "value": "点击刷新"},
        {"id": "battery", "title": "电量", "value": "—"},
    ],
)


def row_key(row):
    return row["id"]


def row_view(row):
    return appui.LabeledContent(row["title"], value=row["value"])


def refresh_device_info():
    state.rows = [
        {"id": "model", "title": "型号", "value": device.model()},
        {"id": "battery", "title": "电量", "value": f"{device.battery_level():.0%}"},
    ]
    state.message = "设备信息已刷新"


def save_snapshot():
    storage.set_json(SNAPSHOT_KEY, state.rows)
    if haptics.is_supported():
        haptics.notification("success")
    state.message = "快照已保存"


def remind_later():
    perm = notification.request_permission()
    if not perm.get("granted"):
        state.message = "未获得通知权限"
        return

    result = notification.schedule(
        REMINDER_ID,
        "原生快照",
        "查看已保存的设备快照",
        delay=60,
    )
    state.message = f"已调度提醒: {result}"


def body():
    return appui.NavigationStack(
        appui.List([
            appui.Section("设备", [
                appui.ForEach(state.rows, row_builder=row_view, key=row_key),
            ]),
            appui.Section("操作", [
                appui.Button("刷新设备", action=refresh_device_info),
                appui.Button("保存快照", action=save_snapshot)
                .button_style("bordered_prominent"),
                appui.Button("1 分钟后提醒", action=remind_later),
            ], footer=state.message),
        ]).navigation_title("原生能力")
    )


appui.run(body, state=state)

#API 参考

#能力入口

能力主文档典型用途
定位与地图location坐标、地理编码、指南针
相册与相机photos选图、拍照、保存
通知与实时活动notificationlive_activity提醒、角标、锁屏状态
持久化storagedatabasekeychain设置、记录、密钥
设备与传感器devicemotion屏幕、电池、传感器
触觉与声音hapticssound反馈、提示音
网络networkwebsocketHTTP、实时连接
编辑器工具栏keyboard插入代码片段

#场景配方

目标推荐组合说明
选图并保存设置appui + photos + storage按钮触发 picker,路径写入 State
下载并存相册network + photos下载到本地再 save_video
地图展示位置permission + location + MapView先查权限再定位
健康面板permission + health + Chart拒绝时显示空状态
提醒任务notification + storage稳定 identifier 调度/取消
播放历史database + List大列表勿塞 storage
安全配置biometric + keychain + Form密钥进 keychain
传感器面板motion + haptics高频数据避免每帧重建 UI
远端列表network + List + .refreshable请求放刷新回调

#使用规则

  • 权限类能力先查状态,再请求。
  • 触觉、通知、声音不要在循环里连续触发。
  • 写代码前打开对应模块文档,按公开 Python API 调用。

#常见错误

错误写法后果修正
body() 里请求权限/发通知刷新时反复弹窗放进按钮回调
token 写入 storage 或日志泄露风险keychain
权限拒绝后空白页用户不知原因显示说明与重试按钮
用户取消选择未处理崩溃或脏状态判断 None 并保留原状态
网络失败清空旧数据体验差保留缓存并显示错误

#相关文档

文档用途
iOS 原生能力入口模型、模块表与权限矩阵
全部模块总览按分类浏览模块
运行时选择appui / scene / widget 选型
permission统一权限查询与申请
photos相册与相机
notification本地通知

#使用原则

  • 原生能力放在用户触发的回调里,不要写在 body() 构建期
  • 先查最小模块,再组合;避免一次 import 多个无关模块
  • 返回值、取消和拒绝都要给用户可见反馈

#失败路径

情况处理
权限拒绝提示去设置开启,并保留当前页面
设备不支持is_available() 或模块返回值判断
用户取消不要当作成功继续写数据

#预期效果

运行示例后,界面应出现文档描述的目标结果;若与预期不符,请按「失败路径」排查。