1. ホーム
  2. iphone

[解決済み] プログラムによる連絡先へのアクセス要求

2022-10-17 12:38:51

質問

iOS 6 にアップデートしてから、iPhone のアドレス帳に連絡先を追加する私のコードが機能しなくなったことに気づきました。Apple は連絡先にアクセスする前にユーザーの許可を必要とするようになったので、これは権限に関連する問題だと思います (修正する この の問題を修正)。

下のスクリーンショットのように、アプリが自動的に連絡先へのアクセス許可を求めると思ったのですが、そうではありません。連絡先を追加しようとしても、次のように失敗します。 ABAddressBookErrorDomain error 1 .

連絡先へのアクセス要求ダイアログをプログラムで起動する必要があるのでしょうか?それはどのように行うのですか?

どのように解決するのですか?

以下の通りです。 このドキュメント によると、アドレス帳へのアクセスは、アップル社のサイト(ページ中央のプライバシーまでスクロールしてください。 を付与する必要があります。 を付与しなければなりません。以下は、私が最終的に行ったことです。

  #import <AddressBookUI/AddressBookUI.h>

  // Request authorization to Address Book
  ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);

  if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
      if (granted) {
          // First time access has been granted, add the contact
          [self _addContactToAddressBook];
      } else {
          // User denied access
          // Display an alert telling user the contact could not be added
      }
    });
  }
  else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
    // The user has previously given access, add the contact
    [self _addContactToAddressBook];
  }
  else {
    // The user has previously denied access
    // Send an alert telling user to change privacy setting in settings app
  }

アップデート iOS 9以降に対応しました。

Apple のウェブサイトから :

重要

アドレスブック UI フレームワークは iOS 9 で非推奨となりました。代わりに ContactsUI フレームワークで定義された API を使用してください。詳しくは ContactsUI