我目前正在 iOS KeyChain 中存储用户名(电子邮件)以及电子邮件和密码的加盐哈希值。我正在使用找到的 ARC'化版本 here .
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
[wrapper setObject:APP_NAME forKey:(__bridge id)kSecAttrService];
[wrapper setObject:email forKey:(__bridge id)kSecAttrAccount];
[wrapper setObject:token forKey:(__bridge id)kSecValueData];
当我需要在应用程序处于事件状态时为我的网络调用提取 token 时,这一切都很好。它适用于从干净的启动登录,以及整个网络调用。当应用程序处于后台时,问题就开始了。
请记住,这只是偶尔发生,我还没有将它固定到特定的 iOS 版本或设备上。
用户访问了一个位置(区域监控),我想用他们的状态更新服务器。我尝试将 token 从钥匙串(keychain)中拉出,就像我对其他所有网络调用所做的一样,并更新状态。但对于某些用户而言,该值为零。没有它,我无法更新网络内容。为什么这对大多数人有效,但对一小部分人无效?
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
NSString *token = [wrapper objectForKey:(__bridge id)kSecValueData];
我已经回到 keychainwrapper 的非 ARC 版本,但我仍然得到相同的结果。如果对此有任何反馈,我将不胜感激。这只是我用户的一小部分,但这是一个我想解决而不用担心的问题。提前致谢。
此外,我所有的后台工作都设置在 backgroundTask 中以防止事情超时。我对围绕钥匙串(keychain)的工作没有任何问题,但在我的 token 被填满之前我不会让事情继续进行。
编辑 我已经解决了我的问题,他们的钥匙串(keychain)没有从后台检索值。我将在下面发布答案并接受它,因为我觉得这个问题以后可能对其他人有值(value)。
最佳答案
我的问题很接近问题的原因,但不完全是。在阅读了一个又一个博客、一个又一个教程之后,我终于找到了一个可以暗示可能正在发生的事情的内容。
锁定主屏幕。钥匙串(keychain)教程总是将钥匙串(keychain)的可访问性设置留空,因此它默认为 Apple 的最低/最安全访问级别。但是,如果用户在锁定屏幕上有密码,则此级别不允许钥匙串(keychain)访问。答对了!这解释了零星的行为以及为什么这种情况只发生在一小部分用户身上。
一行代码,解决了整个烂摊子。
[wrapper setObject:(__bridge id)kSecAttrAccessibleAlways forKey:(__bridge id)kSecAttrAccessible];
在我设置用户名和密码值的地方添加这一行。奇迹般有效。希望这会帮助那里的人。这让我困惑了很长一段时间,直到我能够将这些碎片拼凑起来。
关于iphone - iOS KeyChain 不从后台检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536859/
我是ruby的新手,我认为重新构建一个我用C#编写的简单聊天程序是个好主意。我正在使用Ruby2.0.0MRI(Matz的Ruby实现)。问题是我想在服务器运行时为简单的服务器命令提供I/O。这是从示例中获取的服务器。我添加了使用gets()获取输入的命令方法。我希望此方法在后台作为线程运行,但该线程正在阻塞另一个线程。require'socket'#Getsocketsfromstdlibserver=TCPServer.open(2000)#Sockettolistenonport2000defcommandsx=1whilex==1exitProgram=gets.chomp
我试图在我的网站上实现使用Facebook登录功能,但在尝试从Facebook取回访问token时遇到障碍。这是我的代码:ifparams[:error_reason]=="user_denied"thenflash[:error]="TologinwithFacebook,youmustclick'Allow'toletthesiteaccessyourinformation"redirect_to:loginelsifparams[:code]thentoken_uri=URI.parse("https://graph.facebook.com/oauth/access_token
我不太确定为什么这不起作用,我一直在寻找解决方案。很简单,我正在运行一个执行require'CSV'的小脚本。,它在我的Mac1.9.3-p327上运行良好,但在p374上的服务器上无法运行。我得到的错误是/home/deployer/.rbenv/versions/1.9.3-p374/lib/ruby/1.9.1/rubygems/custom_require.rb:36:inrequire':cannotloadsuchfile--CSV(LoadError)from/home/deployer/.rbenv/versions/1.9.3-p374/lib/ruby/1.9.1/
我正在使用RubyonRailsv3.0.9,我想检索我设置了链接的每个网站的favicon.ico图像。也就是说,如果在我的应用程序中我设置了http://www.facebook.com/URL,我想检索Facebook的图标并在我的网页中使用\插入它。当然,我也想为所有其他网站这样做。如何以“自动”方式从网站检索favicon.ico图标(“自动”是指在网站中搜索图标并获取它的链接-我认为不是,因为并非所有网站都有一个名为“favicon.ico”的图标。我想以“自动”方式识别它)?P.S.:我想做的是像Facebook在您的Facebook页面中添加链接\URL时所做的那样:它
我想知道使用fork{}从Rails应用程序“后台”处理是否是个好主意...从我收集到的fork{my_method;Process#setsid}实际上做了它应该做的事情。1)创建另一个具有不同PID的进程2)不中断调用过程(例如它继续w/o等待fork完成)3)执行子进程直到它完成..这很酷,但这是个好主意吗?fork到底在做什么?它会在内存中创建我的整个railsmongrel/passenger实例的重复实例吗?如果是这样那就太糟糕了。或者,它是否以某种方式在不消耗大量内存的情况下完成。我的最终目标是取消我的后台守护进程/队列系统,转而支持这些进程的fork(主要是发送电子邮件
我想从C函数返回多个值,恕我直言,散列是一个不错的选择。我首先使用rb_intern('A_KEY')创建key,但扩展崩溃了。现在,我正在使用rb_str_new2,但我更喜欢符号。如何创建一个新符号,并在不引用类或方法的情况下使用它? 最佳答案 您需要使用ID2SYM宏将从rb_intern获得的标识符转换为ruby符号。尝试改变rb_intern('A_KEY')到ID2SYM(rb_intern('A_KEY')) 关于c-我如何在Ruby的C扩展API上检索'standal
我正在使用RubyonRails3.2.2,为了显示开发目的的警告消息,我在我的代码中使用了logger.warn。我想检索运行logger.warn的方法名称,以便将该方法名称输出到日志文件。classClassName在我希望看到的日志文件中:IwouldliketoretrieveanddisplaytheClassName#method_name这可能吗?如果可以,我该怎么做? 最佳答案 classClassName这应该可以完成工作。 关于ruby-如何检索当前方法名称以便将其
我正在开始一个用Rails2编写的项目。看起来它需要旧版本的Rake,它在我的Ruby1.8.7全局gemset中。我想避免只为这个应用程序卸载全局1.8.7rake。无论如何我可以创建一个忽略全局gemset的gemset吗?编辑:我想避免的最明显的解决方案是从全局gemset中卸载gem。在我的特殊情况下,我开始了一些遗留应用程序的工作。它与rake0.9.3和我的调试gems(awesome_print、hirb、wirb等)之类的gem一起中断。虽然我目前的解决方案(在下面的评论中)是一个hack,但它似乎是我想要的最少工作量。我希望有一些我不知道的gemset异常命令。
我正在尝试使用带有openfire服务器的rubyxmpp4r库获取openfire多用户群聊天历史记录。我可以构建请求,但没有收到服务器回复。下面是发现请求iqr=Iq.new(:get,"example.com")iqr.add_namespace("http://jabber.org/protocol/disco#info")client.send(iqr)这是请求的框架但我没有收到服务器回复。我关注了XEP-0160和XEP-0013。我在这里错过了什么?openfire是否提供房间聊天记录?有相应的API吗?非常感谢任何帮助。而且我不太了解openfire,因此非常感谢有
我正在构建一个与RubyonRails后端对话的iPhone应用程序。RubyonRails应用程序还将为Web用户提供服务。restful_authentication插件是提供快速和可定制的用户身份验证的绝佳方式。但是,我希望iPhone应用程序的用户在新列中存储一个由手机的唯一标识符([[UIDevicedevice]uniqueIdentifier])自动创建的帐户。稍后,当用户准备好创建用户名/密码时,帐户将更新为包含用户名和密码,iPhone唯一标识符保持不变。用户在设置用户名/密码之前不能访问该网站。然而,他们可以使用iPhone应用程序,因为该应用程序可以使用它的标识符