Брелок реакции-нативной версии поделился с виджетом Swift Today - PullRequest
0 голосов
/ 03 декабря 2018

У нас есть реактивное приложение, которое использует библиотеку 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 часто меняется, и мы получаем разные идентификаторы для каждой части, что препятствует правильной работе виджета

1 Ответ

0 голосов
/ 23 июля 2019

Измените этот код в приложении:

{ accessGroup: 'org.reactjs.native.example.myreactapp'})

на

{ accessGroup: '3P********.org.reactjs.native.example.myreactapp'})
...