1

アプリストアの私のアプリはiPhoneの連絡先にアクセスしています。ユーザーがiOS 6でダウンロードした後、iOS 5で正常に動作している間、iPhoneの連絡先にアクセスできません。問題は、AppleがiOS 6に追加した新しいプライバシー設定です..検索した後、ユーザーの連絡先にアクセスできるようにするには、コードで次のことを行う必要があることがわかりました。

    //in order to test addressbook availability we have to attempt to create an addressbook instance using ABAddressBookCreateWithOptions
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000

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

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {

        ABAddressBookRequestAccessWithCompletion(addressBookRef,
                                                 ^(bool granted, CFErrorRef error) {
                                                     if (granted)
                                                         [self loadContacts];
                                                 });
    } else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {

        // The user has previously given access, add the contact
        [self loadContact];
    } else {

    }

#endif //end iOS6+

    //ABAddressBookCreateWithOptions not available or succeeded. return YES;
    [self loadContacts];

私の問題は、デバイスでのデバッグ中にアラートが表示されないことです。理由がわかりません。上記のコードは正常に動作するはずですが、アプリがアプリストアに送信されたときのみですが、送信前にデバッグモードでテストしたいですか? 何かアドバイス ?

あなたの支援に感謝。ありがとう。

4

2 に答える 2

5

なんとか解決しました。わずかに変更した後の新しいコードは次のとおりです。

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000

    __block MyClassType *controller = self;

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

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {

        ABAddressBookRequestAccessWithCompletion(addressBookRef,
                                                 ^(bool granted, CFErrorRef error) {
                                                     if (granted)
                                                         [controller loadContacts];
                                                 });
    } else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {

        // The user has previously given access, add the contact
        [self loadContacts];
    } else {

    }

#else
    [self loadContacts];
#endif

それをテストできるようにするための鍵は、設定>>一般>>リセット>>場所とプライバシーのリセットからプライバシーと場所の設定をリセットすることです

それは私と一緒にうまくいきました。

于 2012-10-08T19:54:31.603 に答える
1

位置情報とプライバシーをリセットしてもうまくいきません。

シミュレーターの設定をクリアしてから位置情報とプライバシーをリセットしても、私の認証ステータスは常に kABAuthorizationStatusAuthorized です。

于 2012-12-16T22:49:35.537 に答える