我已经为存储strTokenValue创建了计算属性,并将其发送到Web服务。
private var strTokenValue = String()
var tokenValue: String {
get {
if strTokenValue != "" {
return strTokenValue
}
else {
if let token = StrongBoxController.sharedInstance.keychainStore.unarchive(objectForKey: "TokenValue") as? Data {
strTokenValue = StrongBoxController.sharedInstance.convertDataToString(value: token)
return strTokenValue
}
else {
return ""
}
}
}
set {
strTokenValue = ""
StrongBoxController.sharedInstance.saveValues(value: "\(newValue)", key: “TokenValue”)
}
}
我们已经异步发送每个用户操作,并且没有等待跟踪函数Web服务的成功响应,所以我没有在下面的代码中添加成功和失败响应。
func track(actionTaken: String,incidentNumber: String,message: String,completion:@escaping(_ success: Bool, _ error: String,_ actionTakenName: String) -> Void ) {
DispatchQueue.global(qos: .background).async {
let url = "\(ServerCommunication.sharedInstance.getDomainBaseUrl())api/track"
let parameters = [
“token_value” : self.tokenValue,
"device_os":"iOS",
"device_type": UIDevice.modelName,
"action_taken": actionTaken,
"message" : message,
]
}
}
我们已经调用了另一个Web服务来发送图像和令牌值。
请求:
“token_value” : “”,
"device_os":"iOS",
"device_type": “iPhone X”,
"action_taken": “Image captured”,
"message" : “”,
func convertDataToString(value: Data) -> String {
return String(decoding: value, as: UTF8.self)
}
public func unarchive(objectForKey key:String) -> Any? {
guard let data = self.data(forKey: key) else {
return nil
}
let unarchiver = NSKeyedUnarchiver(forReadingWith: data as Data)
return unarchiver.decodeObject(forKey: key)
}
@objc func saveValues(value : String, key: String) {
_ = self.keychainStore.archive(convertStringToData(value: value), key: key, accessibility: kSecAttrAccessibleWhenUnlockedThisDeviceOnly)
}
在某些情况下,在trackActions Web服务中,同时调用的Web服务和“TokenValue”都会变为空
问题似乎是使用convertStringToData可能不会用convertStringToData...我想是因为convertDataToString不使用NSKeyedAarchiver...为了解决问题,您应该使用unarchive...保存数据使用
func convertDataToString(value: Data) -> String? {
return String(data: value, encoding: .utf8)
}
func convertStringToData(value: String) -> Data? {
return value.data(using: .utf8)
}
和
keychainStore.archive(convertStringToData(value: value), key: key, accessibility: kSecAttrAccessibleWhenUnlockedThisDeviceOnly)
stored = convertDataToString(StrongBoxController.sharedInstance.keychainStore.unarchive(objectForKey: "TokenValue"))
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。