[解決済み] iOS KeyChainがバックグラウンドから値を取得しない件
質問
現在、iOS KeyChain にユーザー名 (メールアドレス)、メールアドレスとパスワードの塩漬けハッシュを保存しています。私はARC'ifiedバージョンを使用しています。 はこちら .
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];
これは、アプリがアクティブな間にネットワーク呼び出しのためにトークンを引き出す必要があるときに、すべてうまく機能します。これは、クリーン アップからのログインと、すべてのネットワーク呼び出しで動作します。問題は、アプリがバックグラウンドにあるときに発生します。
これは散発的にしか発生せず、特定の iOS バージョンまたはデバイスに突き止めることはまだできないことを覚えておいてください。
ユーザーが場所を移動し (地域監視)、サーバーのステータスを更新したいと思います。私は、他のすべてのネットワーク呼び出しに対して行うのと同じ方法で、キーチェーンからトークンを引き出して、状態を更新しようとします。しかし、ユーザーによっては、その値がゼロになっています。それがないと、ネットワークのものを更新することができないのです。なぜ、ほとんどのユーザーには機能するのに、ごく一部のユーザーには機能しないのでしょうか?
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
NSString *token = [wrapper objectForKey:(__bridge id)kSecValueData];
keychainwrapperのARCでないバージョンに戻しましたが、やはり同じ結果になってしまいます。これについて何かフィードバックがあれば幸いです。私のユーザーのごく一部ですが、解決して心配のないようにしたい問題です。事前にありがとうございます。
また、私のバックグラウンドの作業は全てbackgroundTaskで設定し、タイムアウトを防いでいます。キーチェーンにまつわる作業には何の問題もありませんが、トークンが満たされるまでは物事を進めないようにしています。
EDIT 私は彼らがキーチェーンがバックグラウンドから値を取得しないことについての私の問題を考え出した。私は、この質問が後で他の人にとって貴重になるかもしれないと感じるので、以下に答えを投稿し、受け入れます。
どのように解決するのですか?
私の質問は、その理由についてはほぼ的を得ていましたが、完全ではありませんでした。ブログに次ぐブログ、チュートリアルに次ぐチュートリアルを読み漁り、ついに、何が起こっているのかのヒントを与えてくれるものを見つけたのです。
ロックされたホーム画面。キーチェーンのチュートリアルでは、キーチェーンのアクセシビリティ設定を常に空白にしていたため、Apple の最も低い/最も安全なアクセス レベルがデフォルトになっていました。しかし、このレベルでは、ユーザーがロック画面にパスコードを設定している場合、キーチェーンへのアクセスは許可されません。ビンゴ! これで、散発的な動作と、ごく一部のユーザーにしか発生しない理由がわかりました。
1 行のコードで、すべての混乱が解決されます。
[wrapper setObject:(__bridge id)kSecAttrAccessibleAlways forKey:(__bridge id)kSecAttrAccessible];
ユーザー名とパスワードの値を設定しているところに、この行を追加します。魅力的なように動作します。これが誰かの助けになることを願っています。私がピースをまとめることができるまで、かなり長い間私を困惑させました。
関連
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] UIPageControlのページネーションドットの色を変更するにはどうしたらよいですか?
-
[解決済み] Objective-CでENUMを定義して使用するにはどうすればよいですか?
-
[解決済み] iPhoneのシミュレータに.ipaファイルをインストールする方法は?
-
[解決済み] iosアプリの最大メモリ使用量
-
[解決済み] レビュー待ちの状態でバイナリを拒否する(バイナリ拒否ボタンが見つからない)
-
[解決済み] iPhone/iPadのディスクの空き容量を確認する方法を教えてください。
-
[解決済み] Objective-C 2.0でメソッドに非推奨のフラグを立てるにはどうすればよいですか?
-
[解決済み] UIViewのサブビューをセンタリングする方法
-
[解決済み] UIScrollViewをコンテンツに合わせて自動サイズ調整する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Cocoapodsの使用時にXcodeの警告を無視する
-
[解決済み] UITextViewのキーボードをリターンキーで解除するには?
-
[解決済み] UIViewの下に影を描くには?
-
[解決済み] iOSシミュレータでファイルシステムを確認する方法はありますか?
-
[解決済み] iPhone UIViewアニメーションのベストプラクティス
-
[解決済み] UIViewのサブビューをセンタリングする方法
-
[解決済み] ナビゲーションコントローラスタック、サブビュー、モーダルコントローラを使用せずに、ビューコントローラの変化をアニメーション化する?
-
[解決済み] position: iPadとiPhoneで固定が効かない。
-
[解決済み] iOSアプリをクラッシュさせる確実な方法とは?
-
[解決済み] CALayerのanchorPointを変更すると、ビューが移動します。