У нас есть реактивное приложение, которое использует библиотеку act-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)
}
IЯ хотел бы иметь возможность получить эти данные в моем сегодняшнем виджете, сделанном в 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)")
}
Код ниже взят из этого блога
Но это не работает,Как вы, возможно, заметили, мне нужно передать идентификатор устройства в виджет, потому что, в отличие от Android, UUID часто меняется, и мы получаем разные идентификаторы для каждой части, что препятствует правильной работе виджета