我有一个使用 ExpoSecureStore 的 ReactNative 应用程序(仅针对 iOS 发布)从 iOS 钥匙串(keychain)中放置和读取值。
我正在过渡到 Flutter,我 需要让用户保持登录状态,即从之前安装的 RN 版本的应用程序中获取他们的身份验证 token 。
所以,这就是我所做的:
因此,我的 Flutter 安装不会删除 token ,但无法访问它们。
2020 年 3 月 18 日更新。
这是 ReactNative 的 AppstoreConnect 上的最新版本如下所示:
这是我们的 的相同信息 flutter build :
我尝试将 Flutter 的 XCode 项目中的钥匙串(keychain)组设置为各种值:
TEAM_ID.*
, TEAM_ID.
, TEAM_ID
, *
, TEAM_ID.com.my_real_app_id
等等..但没有任何帮助有什么我想念的吗?
==============原始问题继续================
我正在使用
FlutterSecureStoragePlugin
( link to the .m
file ) 访问钥匙串(keychain)值。这是
EXSecureStore.m
的链接文件 - EXSecureStore.m on GitHub .kSecAttrService
),默认为 "app"
. ExpoSecureStore.m
读取钥匙串(keychain)值的代码。至FlutterSecureStoragePlugin.m
但仍然没有运气.. RN 和 Flutter 库将字符串传递给原生 iOS 的方式会有什么不同吗?我想我不知道钥匙串(keychain)访问肯定发生了一些事情,所以非常欢迎任何帮助!
感谢您的阅读!
最佳答案
我终于解决了世博安全商店访问问题!
TL;博士
最重要的是你设置了相同的keychain access group
, 相同 kSecAttrService
(钥匙串(keychain)服务),当然还有您要访问的项目的 key 。
以下是先决条件:
keychain access group
与 react native 的构建中的值相同,即 TEAM_ID.*
.这可以通过以下两个选项之一来实现:*
,如下图所示,或 project_dir/ios/Runner/Runner.entitlements
) 并添加项目 $(AppIdentifierPrefix)*
或 项目 TEAM_ID.*
到keychain access groups
大批。请注意,如果您要添加第一项,则没有 .
在 *
之前, 自 AppIdentifierPrefix
转换为 TEAM_ID.
在构建之前。 Link to the apple docs on the keychain-access-groups
entitlement .TEAM_ID.*
,它还应该能够访问钥匙串(keychain)项目。请注意,将钥匙串(keychain)访问组设置为 TEAM_ID.* 意味着只有同一开发人员(团队)开发的应用程序才能访问 RN 应用程序的钥匙串(keychain)项。 kSecAttrService
) .对于世博会,如果您没有通过 keychainService
SecureStore 选项中的参数,kSecAttrService
您要写入(或获取)的项目的属性将为 app
.您可以自己查看 here, on the expo native library's source code on GitHub (link) .我创建了一个 flutter 库的分支,我会在 future 的某个时候提出拉取请求,但你可以将插件的默认钥匙串(keychain)服务更改为 app
也是。当前默认为 flutter_secure_storage_service
,见 the plugin's source code on GitHub (link) . kSecAttrAccount
)我想得到。帮助我的是使用 Flutter 插件的 readAll
方法(link to the native source code of readAll
on GitHub)。它向我展示了钥匙串(keychain)项目确实在那里,但 key 与 ReactNative 应用程序使用的不同。正如我通过调试发现的那样(文档中没有!!!), expo 用户名和 expo 项目名称添加在 ** 之前用于键的字符串**!因此,如果在 ReactNative 应用程序中您使用 key accessToken
保存 token ,它将作为 保存到钥匙串(keychain)中@expousername/project-name-accessToken
!它不在文档中,我不知道它是如何发生的,因为我查看了源代码 在我的问题中,我说我已经从 expo 的库中将 Objective-C 代码复制到了 Flutter 的插件中,但这不是必需的。
关于ios - 从 Flutter 应用程序访问 ExpoSecureStore 存储的钥匙串(keychain)值 [iOS],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60703577/