ios - 今天与 Swift 共享的 Keychain react-native 小部件
问题描述
我们有一个 react-native 应用程序,它以这种方式使用react-native-keychain库(就像在这个问题中一样):
import * as Keychain from 'react-native-keychain';
try {
Keychain.setInternetCredentials(
'device-id',
'RANDOMDATA',
DeviceInfo.getUniqueID().toString(),
{ accessGroup: 'org.reactjs.native.example.myreactapp'})
.then(() => console.log('Done'))
} catch (err) {
console.log("error save", err)
}
我希望能够在我用 swift 制作的今天的小部件中检索这些数据,我需要知道它的存储密钥。以下是我应该在小部件上恢复它的方式:
let itemKey = "device-id"
let keychainAccessGroupName = "3P********.org.reactjs.native.example.myreactapp"
let queryLoad: [String: AnyObject] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: itemKey as AnyObject,
kSecReturnData as String: kCFBooleanTrue,
kSecMatchLimit as String: kSecMatchLimitOne,
kSecAttrAccessGroup as String: keychainAccessGroupName as AnyObject
]
var result: AnyObject?
let resultCodeLoad = withUnsafeMutablePointer(to: &result) {
SecItemCopyMatching(queryLoad as CFDictionary, UnsafeMutablePointer($0))
}
if resultCodeLoad == noErr {
if let result = result as? Data,
let keyValue = NSString(data: result,
encoding: String.Encoding.utf8.rawValue) as String? {
// Found successfully
print("device-id : ", keyValue)
}
} else {
print("Error loading from Keychain: \(resultCodeLoad)")
}
下面的代码来自这个博客
但它不起作用。您可能已经注意到,我需要将设备 ID 传递给小部件,因为与 Android 不同,UUID 经常更改,并且我们在每个部分获得不同的 ID,这会阻止小部件正常工作
解决方案
在APP里修改这段代码:</p>
{ accessGroup: 'org.reactjs.native.example.myreactapp'})
至
{ accessGroup: '3P********.org.reactjs.native.example.myreactapp'})
推荐阅读
- user-interface - Pycharm中的tkinter问题
- office-js - Office.context.mailbox.item.saveAsync 调用在共享邮箱上失败
- c - 使用 malloc() 在 C 中的方法中初始化 cstrings 数组
- c# - 在同一天但不同时间的日期时间列表中查找空白
- webpack - Webpack - 是否可以最小化包依赖?
- python - Python - 更改列表中特定单词的区分大小写
- java - 如何获取JavaFX程序控制器内部的调用节点
- java - 终端输出 Vscode
- ruby-on-rails - Rspec:如何显示测试文件的覆盖率
- javascript - 只需一行代码即可将类的 disable 属性设置为 true