2

私のアプリは、Apple の審査チームによって拒否されました。彼らによるとその理由は

「17.1: アプリは、ユーザーの事前の許可を得ずにユーザーに関するデータを送信することはできず、データが使用される方法と場所に関する情報へのアクセスをユーザーに提供できません。具体的には、アプリは最初に許可を要求せずにユーザーの連絡先にアクセスします」

ただし、アプリで連絡先を使用する理由を指定するために、**NSContactsUsageDescription**キーを使用しました。info.plst

許可を得るには、さらに何をしなければなりませんか?

4

2 に答える 2

3

iOS 6 では、デバイスの連絡先にアクセスするには、アドレス帳のアクセス許可要求 iPhone を使用する必要があります。

ここに画像の説明を入力

この例のようなコードを実装する方法:

ABAddressBookRef addressBook;
if ([self isABAddressBookCreateWithOptionsAvailable]) {
    CFErrorRef error = nil;
    addressBook = ABAddressBookCreateWithOptions(NULL,&error);
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
        // callback can occur in background, address book must be accessed on thread it was created on
        dispatch_async(dispatch_get_main_queue(), ^{
            if (error) {

            } else if (!granted) {


            } else {
                // access granted
                 [self GetAddressBook];


            }
        });
    });
} else {
    // iOS 4/5

     [self GetAddressBook];
}
于 2013-07-31T06:05:54.750 に答える
2

アプリケーションがアドレス帳にアクセスできるかどうかをユーザーに確認する必要があります。この機能は、iOS 6.0 以降で実装されています。

このコード スニペットを試すことができます。

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

- viewWillAppear:

// Asking access of AddressBook
// if in iOS 6
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) 
{ 
    // Request authorization to Address Book
    addressBook_ = ABAddressBookCreateWithOptions(NULL, NULL);

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined)
    {
         ABAddressBookRequestAccessWithCompletion(addressBook_, ^(bool granted, CFErrorRef error)
                                                 {
                                                     if (granted == NO)
                                                     {
                                                         // Show an alert for no contact Access
                                                     }
                                                 });
    }
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
    {
        // The user has previously given access, good to go
    }
    else
    {
        // The user has previously denied access
        // Send an alert telling user to change privacy setting in settings app
    }
}
else // For iOS <= 5
{
    // just get the contacts directly
    addressBook_ = ABAddressBookCreate();
}
于 2013-07-31T09:08:39.410 に答える