2016-06-28 3 views
0

J'utilise un client Swift généré par Swagger qui utilise NSURLCredentials pour s'authentifier auprès d'un serveur. J'utilise le type de persistance .Permanent Mon application communique avec le serveur en arrière-plan et fonctionne correctement, sauf lorsque je verrouille le téléphone (je vois 401 erreurs dans le journal). Je crois que NSURLCredential n'est pas en mesure d'accéder au trousseau lorsque le téléphone est verrouillé. Je suis tombé sur quelques articles qui parlent d'activer l'accès au trousseau en utilisant kSecAttrAccessibleAfterFirstUnlock. Je n'ai pas été en mesure de comprendre comment faire cela avec NSURLCredential. Est-ce que quelqu'un sait si et comment cela peut être configuré?Comment puis-je autoriser l'accès à NSURLCredentials lorsqu'un périphérique iOS est verrouillé?

Répondre

0

Oui, c'est exactement ce qui se passe, selon toute vraisemblance. Vous avez quelques options:

  • Supprimez l'élément de trousseau sous-jacent et recréez-le, en spécifiant qu'il doit être accessible lorsque le périphérique est déverrouillé. Vous n'avez pas besoin d'utiliser NSURLCredential du tout avec cette approche. Il suffit de créer un élément de mot de passe Internet à l'aide des API Keychain Services et le magasin de données d'identification doit le récupérer automatiquement.
  • Conservez les données d'identification en mémoire et implémentez la méthode de délégation URLSession:task:didReceiveChallenge:completionHandler: dans votre délégué de session (ou la méthode équivalente pour NSURLConnection si vous utilisez cette API) pour fournir les informations d'identification lorsque vous y êtes invité.