首页 > 解决方案 > 今天与 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,这会阻止小部件正常工作

标签: iosswiftreact-native-ios

解决方案


在APP里修改这段代码:</p>

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

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

推荐阅读