Ask for permission to allow access to Contacts iOS [duplicate]
Asked Answered
P

2

12

I am importing all the native address book contacts into my app. Currently, the alertview to ask for permission to 'allow access to the Contacts' is done at the launch of the app.

How do I change it so permission is asked elsewhere in the app? At the click of a button, just like Instagram?

See this picture:

enter image description here

Perimorph answered 12/10, 2013 at 18:48 Comment(2)
Check Programmatically Request Access to ContactsMousse
iOS 9 and above : https://mcmap.net/q/102297/-programmatically-request-access-to-contactsLoraine
A
22

You can read the documentation HERE.

Here is some code to get you started:

//First of all import the AddRessBookUI 
  #import <AddressBookUI/AddressBookUI.h>

  // Request to authorise the app to use addressbook
  ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(nil, nil);

  if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
      if (granted) {
          // If the app is authorized to access the first time then add the contact
          [self _addContactToAddressBook];
      } else {
          // Show an alert here if user denies access telling that the contact cannot be added because you didn't allow it to access the contacts
      }
    });
  }
  else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
    // If the user user has earlier provided the access, then add the contact
    [self _addContactToAddressBook];
  }
  else {
    // If the user user has NOT earlier provided the access, create an alert to tell the user to go to Settings app and allow access
  }

Here are another couple of tutorials that you might like to see that you can find HERE and HERE.

Hope this helps!

UPDATE: You have to use didFinishLaunchingWithOptions to detect the first time your app launches:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
    {
        // The app has already launched once
    }
    else
    {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        // This is the first time the app is launched
    }
}
Arevalo answered 12/10, 2013 at 19:51 Comment(2)
Cool, how do I stop the app asking for access at the launch of the app?Perimorph
@Perimorph check my update on how to detect the first time your app launches. In the else part, you can write some code to not ask for the contacts access.Arevalo
C
0

App asking for permission when you try retrive contacts.

Just call retriving after button touch, not after launching.

Cirro answered 13/10, 2013 at 8:41 Comment(1)
is there a method which it hits when asking for permission?Perimorph

© 2022 - 2024 — McMap. All rights reserved.