# @criipto/verify-expo 中文文档

规范地址：https://npmcn.com/package/%40criipto/verify-expo/

版本：4\.0\.3
npm 元数据更新时间：2026-10-22T08:17:21.987Z
中文译文更新时间：2026-11-11T00:44:39.416Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40criipto/verify-expo
原文对照：https://npmcn.com/package/%40criipto/verify-expo/?lang=original
项目主页：https://github.com/criipto/criipto-verify-expo#readme
源码仓库：https://github.com/criipto/criipto-verify-expo

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：63.4 kB，17 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：1 个
- peer 依赖：expo \>=54，react \>=19，react-native \>=0\.81
- 首次发布：2023-07-17T14:08:54.796Z
- 最新版本发布：2026-10-22T08:17:21.435Z
- 近 30 天下载量：4867（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：26（近 12 个月 10 个）

## 中文简介

接受 MitID, NemID, 瑞典 BankID, 挪威 BankID , 并在您的 Expo (React-Native) app 中接受更多登录

## 安装

```sh
npm install @criipto/verify-expo
```

也可以使用：`pnpm add @criipto/verify-expo`、`yarn add @criipto/verify-expo`、`bun add @criipto/verify-expo`

## README

# criipto 验证- expo

Idura 校验 Expo SDK 允许您的用户与许多欧洲的 eID 提供者进行认证 。 它允许您的申请作为 [_公共客户端_](https://docs.idura.app/verify/getting-started/glossary/#public-clients)意思是它不使用客户秘密 而是使用 [捷克](https://docs.idura.app/verify/getting-started/glossary/#pkce-proof-key-for-code-exchange) 以确保恶意行为者无法拦截授权代码.

除了基本的OIDC流量,SDK还支持 [应用程序切换](https://docs.idura.app/verify/guides/appswitch/)。 。 。 .

## 所需资源

-   曝光 SDK **54个或较新** (舰只反应原生0.81 /克特林 2.1.20 / AGP 8.11).
-   机器人 `minSdkVersion` **26个或较新**。 博览会的预建默认值为 24, 所以你必须明确选择通过 [`expo-build-properties`](https://docs.expo.dev/versions/latest/sdk/build-properties/) 看到了吗 [安装](https://npmcn.com/package/%40criipto/verify-expo/#readme-installation)。 。 。 .
-   iOS系统 **17.4 或更新**,与 `use_frameworks! :linkage => :dynamic`. Idura 校验 iOS SDK 作为 Swift 软件包分发,需要动态框架链接. 博览会插件通过 `expo-build-properties`。 。 。 .
-   这个模块包括了本土代码,因此不会与"博览会Go"合作. 比如说,你必须用一个建筑 `npx expo run:ios` 编号 : `npx expo run:android` 或EAS Build. (英语).

两个平台都派代表到本地的Idura验证SDKs([机器人](https://github.com/criipto/idura-verify-android), (中文(简体) ), [iOS系统](https://github.com/criipto/idura-verify-ios)) (中文(简体) ). 旧的博览会发行量的消费者应保持 `@criipto/verify-expo` 3.x (中文(简体) ).

## 安装

```sh
npm install @criipto/verify-expo expo-build-properties
```

## 初始化

SDK需要配置两条信息:

-   你的"偶像"域名.
-   你的偶像客户身份证.

SDK假设:

-   你会用你的 [Idura 域名](https://docs.idura.app/verify/getting-started/glossary/#domain-idura-domain) ,以主机运行您的重定向 URL(既可以使用自定义域, \*.criipto.id, 也可以使用 \*.idura. 经纪域).
-   您的重定向 URL 将是 `https://[YOUR IDURA DOMAIN]/[ios|android]/callback`目前,不支持自定义重定向 URL 。 需要的话就打开一个问题.

您应该注册在 [偶像仪表板](https://dashboard.idura.app/)。如果您的域为 `https://samples.criipto.id`,您应当同时注册 `https://samples.criipto.id/ios/callback` 财务报告和审定财务报表 `https://samples.criipto.id/android/callback`。 。 。 .

然后配置两个插件在 `app.json`。 。 。 . `expo-build-properties` 必须显示 **在此之前** `@criipto/verify-expo` 因此,它首先被应用:

```json
"plugins": [
  ["expo-build-properties", {
    "android": { "minSdkVersion": 26 },
    "ios": { "useFrameworks": "dynamic", "deploymentTarget": "17.4" }
  }],
  ["@criipto/verify-expo", {
    "domain": "YOUR_IDURA_DOMAIN",
    "clientID": "urn:my:application:identifier:XXXX"
  }]
]
```

插件失败 `expo prebuild` 如果其中任何一项要求未得到满足,则有方便复制的错误.

## 开始

打电话 `login()` 直接——没有供货商或接通电线. 配置( E)`domain`, (中文(简体) ), `clientID`生活在这里 `app.json` 并被本地模块读取。 将结果保存在自己的状态( A)`useState`zustand,反应-平稳——你的电话),因为包裹没有为你保留一个:

```jsx
// src/LoginButton.jsx
import { useState } from "react";
import { Button, Text } from "react-native";
import { login, OAuth2Error, UserCancelledError } from "@criipto/verify-expo";

export default function LoginButton() {
  const [claims, setClaims] = useState(null);
  const [error, setError] = useState(null);

  const handlePress = async (acrValues) => {
    try {
      const { id_token, trace_id, claims } = await login({ acrValues });
      setClaims(claims);
      setError(null);
    } catch (e) {
      if (e instanceof UserCancelledError) return; // expected; not an error condition
      setError(e);
      setClaims(null);
    }
  };

  return (
    <>
      <Button
        onPress={() => handlePress("urn:grn:authn:dk:mitid:substantial")}
        title="Login with Danish MitID"
      />
      <Button
        onPress={() => handlePress("urn:grn:authn:se:bankid:same-device")}
        title="Login with Swedish BankID"
      />
      <Button onPress={() => handlePress("urn:grn:authn:se:frejaid")} title="Login with Freja ID" />
      <Button
        onPress={() => handlePress("urn:grn:authn:no:bankid:substantial")}
        title="Login with Norwegian BankID"
      />

      {error ? <Text>An error occurred: {error.toString()}</Text> : null}
      {claims ? <Text>{JSON.stringify(claims, null, 2)}</Text> : null}
    </>
  );
}
```

失败时 `login()` 扔出已打出的错误 : `UserCancelledError` 对于拒绝流动的用户, `OAuth2Error` 对于IP错误, `NoSuitableBrowserError` (Android- only) 当没有安装自定义 Tab 功能浏览器时, 加上 `ModuleNotConfiguredError` 编号 : `UnknownPromptError` 编号 : `IduraVerifyInternalError`都带着SDK的 `trace_id` 如果有的话,请在Idura仪表板中找到相关数据.

## 暖和起来

土生土长的SDK是建立在第一个 `login()` 调用,即当OIDC发现时,JWKS取取和-在Android上-可使用浏览器的扫描发生. 要删除登录路径, 打电话 `warmUp()` 从屏幕上记录到的效果中:

```ts
import { useEffect } from "react";
import { warmUp } from "@criipto/verify-expo";

useEffect(() => {
  warmUp();
}, []);
```

它完全是可选的,从不扔出,而且不只打一次就便宜了。 因为它没有报告,一个配置错误的应用程序仍然失败 `login()` 与 `ModuleNotConfiguredError` ——原生地侧记下原因 `CriiptoVerifyExpo` 标记(logcat)或通过 `NSLog`,这样你就可以看到它 同时连接一个集成.

## 电子会议(仅iOS)

用于显示登录页面的网页视图允许您在ephemeral或共享浏览器会话中选择.

-   **届会** 与用户的默认浏览器共享不 cookie,因此用户可能必须输入他们的登录细节. 这是默认.
-   **共享会议** 与用户的默认浏览器共享 cookie,因此登录细节可能在登录之间被记住. 然而,系统每次用户登录时都会呈现一个权限对话框("Your App"想用'idura.broctor'来签名").

默认值是使用平时会话 .

根据您申请的UX要求,由您决定哪个流量更好。 并非所有的eID都要求用户在网页视图中输入任何内容——例如瑞典BankID将用户直接带到他们的认证器应用. 为此原因,您可能也想要使用共享会话来进行一些 eID 而不是其他 。 过 `preferEphemeralSession` 编辑 `login()` 调用以覆盖每流 :

```ts
await login({
  acrValues: "urn:grn:authn:dk:mitid:substantial",
  preferEphemeralSession: false, // opt into a shared browser session
});
```

丹麦 MITID 支持 a [重新校正流量](https://docs.idura.app/verify/e-ids/danish-mitid/#reauthentication),所以如果需要重新认证用户的MitID,则不需要依赖共享浏览器会话.

在Android上,参数被默默地忽略了:自定义 Tab会话不与浏览器共享饼干,而Android SDK则不暴露选择.

## 偶像

了解更多关于Idura的信息,并注册到您的免费开发者账户 [(原始内容存档于2016-10-12). idura.eu](https://www.idura.eu/)。 。 。 .

## 常见问题

### @criipto/verify-expo 是什么？

接受 MitID, NemID, 瑞典 BankID, 挪威 BankID , 并在您的 Expo \(React-Native\) app 中接受更多登录

### 如何安装 @criipto/verify-expo？

在项目目录运行 npm install @criipto/verify-expo，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：expo（\>=54）、react（\>=19）、react-native（\>=0\.81）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @criipto/verify-expo 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/criipto\_\_verify-expo 是否存在。

### @criipto/verify-expo 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @criipto/verify-expo 可以商用吗？

@criipto/verify-expo 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @criipto/verify-expo 的下载量有多少？

根据 npm 官方下载统计，@criipto/verify-expo 在 2026/10/11 – 2026/11/09 这 30 天内被下载 4,867 次，日均约 162 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @criipto/verify-expo 还在维护吗？

最新版本 4\.0\.3 发布于 2026/10/22（19 天前）；至今共发布 26 个版本，其中过去 12 个月发布了 10 个；首次发布于 2023/07/17。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

