質問

だから私はこれに困惑しています。

Mac OS Xには、「Me」を取得する簡単な方法があります。組み込みのアドレス帳APIからのカード(Mac /アカウントの所有者)。

iPhoneの所有者に属する連絡先(存在する場合)を見つける方法を見つけた人はいますか?

役に立ちましたか?

解決

文書化されていないユーザーのデフォルトを使用できます:

[[NSUserDefaults standardUserDefaults] objectForKey:@"SBFormattedPhoneNumber"];

次に、その電話番号のカードをアドレス帳で検索します。

ユーザーのデフォルトは文書化されていないため、Appleはいつでも変更する可能性があり、App Storeにアクセスできない場合があることに注意してください。

別のアプローチとしては、もっと脆弱ですが、デバイス名を確認する方法があります。ユーザーがデフォルトの「ユーザー名のiPhone」から変更していない場合は、そして彼らはiPhoneとして本名を使用しているので、そこからユーザー名を取得することができます。繰り返しになりますが、決して最善の解決策ではありませんが、他に試すことができます。

この質問に対する一般に受け入れられている回答は、この機能についてAppleにレーダーを提出し、ユーザーにカードの選択を促すことです。

他のヒント

iPhone SDK 2.2.1以前には、このようなAPIはありません。次の場所にリクエストを提出してください: http://bugreport.apple.com

編集:[廃止された回答]

" me"を取得するためのAPIはありません。 「私」がないためカードカード。 iPhoneの連絡先アプリには、カードを「私」としてマークする方法がなく、APIにはこれが反映されています。

これに対する部分的な解決策を思いつきました

次のようにデバイス名を取得できます

NSString *ownerName = [[UIDevice currentDevice] name];

英語では、デバイスはもともと「Joe Blogg's iPhone」などと呼ばれています

名前を破る

 NSRange t = [ownerName rangeOfString:@"’s"];
    if (t.location != NSNotFound) {
        ownerName = [ownerName substringToIndex:t.location];
    }

その名前を使用して連絡先を検索できます

CNContactStore * contactStore = [CNContactStore new];

 NSPredicate *usersNamePredicate = [CNContact predicateForContactsMatchingName:usersName];

    NSArray * keysToFetch = @[[CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName],CNContactPhoneNumbersKey,CNContactEmailAddressesKey,CNContactSocialProfilesKey, ];

 NSArray * matchingContacts = [contactStore unifiedContactsMatchingPredicate:usersNamePredicate keysToFetch:keysToFetch error:nil];

もちろん、他の言語ではデバイス名の文字列が異なります。 「iPhone Von Johann Schmidt」なので、他の言語ではより多くの解析を行う必要があり、ユーザーがiTunesでデバイスの名前を「Joes phone」のような名前に変更していない場合にのみ機能しますが、出発点は

まあ...それはあなたに一致するアイテムの配列を提供します:)その配列と複数の接触がある場合、あなたはポットラッキーを使用し、最初のものと一緒に行くか、複数のカードを通して仕事をして、あなたが何を取るかそれぞれから必要です。

これは部分的な解決策であると言いましたが、すべてのユーザーケースで機能するわけではありませんが、多くのユーザーで機能し、多少の摩擦が軽減される場合があります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top