2014-05-04 1 views
3

C'est un peu en retard par rapport à ce que la plupart des gens demandent. Je veux déclencher volontairement la boîte de dialogue demandant l'autorisation des utilisateurs à:Je veux déclencher iOS7 pour demander aux utilisateurs la permission d'utiliser le compte Bluetooth et Twitter

  • Se connecter à des périphériques Bluetooth, même en mode hors connexion.
  • Accédez à votre compte Twitter sur iOS.

J'ai déjà un dialogue similaire pour le bon fonctionnement de l'emplacement. Je le fais parce que je veux rendre le processus de demande de permission un peu plus doux, comme Heyday, en montrant un écran de bienvenue expliquant pourquoi l'application a besoin de ce service puis quand l'utilisateur appuie sur OK, lance la requête et déclenche la boîte de dialogue .

J'ai déjà essayé certaines choses. Pour Twitter J'ai essayé ce qui suit:

- (void)triggerTwitterApprovalWithCompletion:(void (^)(BOOL, NSError *))completion { 
    self.accountStore = [[ACAccountStore alloc] init]; //setup as a property. 
    ACAccountType *twitterAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; 
    [self.accountStore requestAccessToAccountsWithType:twitterAccountType options:nil completion:^(BOOL granted, NSError *error) { //completion handling is on indeterminate queue so I force main queue inside 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     completion(granted, error); //triggers displaying the next screen, working 
    }); 
    }]; 
} 

Mais même si l'autorisation est donnée, il est automatique et non le résultat de l'utilisateur présenté avec une boîte de dialogue et l'approuver.

Avec la version Bluetooth, je n'ai pas encore trouvé de code qui pourrait le déclencher. Les docs et les guides de programmation sont relativement silencieux sur la question de demander des autorisations. La seule référence que je peux trouver est qu'en ayant une clé de plist pour bluetooth-peripheral l'utilisateur sera automatiquement invité au lancement de l'application. C'est trop tôt dans le flux pour être utile.

Répondre

4

Seul le rôle de périphérique nécessite l'autorisation de l'utilisateur pour s'exécuter. Le central peut faire ce qu'il veut. Il suffit d'instancier un CBPeripheralManager lorsque vous voulez que l'utilisateur donne son autorisation et qu'il déclenche la boîte de dialogue.

pmanager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; 

Ensuite, vous utilisez la méthode délégué peripheralManagerDidUpdateState: pour obtenir informé de la décision de l'utilisateur. Vous n'avez pas besoin de définir le mode arrière-plan bluetooth-peripheral dans le plist si votre application ne fonctionne pas en arrière-plan. Gardez à l'esprit que la boîte de dialogue n'apparaîtra qu'une seule fois pendant la durée de vie de l'application et que le paramètre ne sera pas réinitialisé lorsque l'application sera supprimée et réinstallée.

Notez également que, compte tenu de ce comportement, le

La seule référence que je peux trouver est que, en ayant une touche plist pour l'utilisateur Bluetooth périphérique sera invité automagiquement sur l'application lancement.

N'est pas vrai.

Pour la partie twitter. Je n'ai pas encore essayé d'utiliser cette API, mais j'ai trouvé plusieurs réponses suggérant que l'autorisation est gérée automatiquement pour vous ou que iOS ne vous demandera que la première fois.

Pour tester les questions pop-up vous devez réinitialiser manuellement les paramètres dans
Réglages ->général ->Réinitialiser - >Réinitialiser l'emplacement & Confidentialité

Juste un petit ajout: best practices for asking for user permission

+0

Ah, je vous remercie. J'ai ce code là mais je n'avais pas vu le dialogue depuis quelque temps. Bon à savoir supprimer/réinstaller ne le déclenche pas à réapparaître. – Cocoadelica

+0

Des pensées sur la partie twitter? – Cocoadelica

+0

Ajout de notes sur Twitter. Je n'ai pas encore pu l'essayer moi-même, alors prenez-le avec un grain de sel. – allprog

Questions connexes