334

iPhone SDKから標準APIで自分の電話番号を取得する方法はありますか?

4

9 に答える 9

324

マイナス評価になる可能性はありますが、2009 年 11 月 5 日の時点で最高ランクのソリューション (現在は最初の回答) が最新の SDK 契約に違反していると提案したいと思います。Apple からの回答は次のとおりです。

「セキュリティ上の理由から、iPhone OS はアプリケーション (設定とデータを含む) をファイル システム内の一意の場所に制限します。この制限は、アプリケーションの「サンドボックス」として知られるセキュリティ機能の一部です。ファイル、設定、ネットワーク リソース、ハードウェアなどへのアプリケーションのアクセスを制限する粒度の高い制御。」

デバイスの電話番号は、アプリケーションのコンテナ内では利用できません。アプリケーションを App Store で再検討するには、ディレクトリ コンテナ内で読み取り専用になるようにアプリケーションを修正し、バイナリを iTunes Connect に再送信する必要があります。

ユーザーが自分の電話番号を入力する手間を省きたかったので、これは本当に残念でした。

于 2009-11-06T04:16:35.673 に答える
139

いいえ、これを行う合法的で信頼できる方法はありません。

以前のすべての方法で発生したように、方法が見つかった場合、将来的には無効になります。

于 2008-10-10T22:58:32.227 に答える
86

更新:この機能は、iOS 4 またはその周辺で Apple によって削除されたようです


以前の回答を拡張するだけで、次のようなことができます:

NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];

: これにより、iPhone の iTunes アクティベーション中に入力された「電話番号」が取得され、null または正しくない値になる可能性があります。SIMカードからは読み取られません。

少なくとも 2.1 ではそうです。NSUserDefaults には、持続しない可能性のある興味深いキーが他にもいくつかあります。(これは、UIWebView を使用する私のアプリにあります)

WebKitJavaScriptCanOpenWindowsAutomatically
NSInterfaceStyle
TVOutStatus
WebKitDeveloperExtrasEnabledPreferenceKey

等々。

どちらかといえば、他の人が何をしているのかわかりません。

于 2008-10-22T03:09:03.383 に答える
28

プライベート API を使用すると、次の方法でユーザーの電話番号を取得できます。

extern NSString* CTSettingCopyMyPhoneNumber();


+(NSString *) phoneNumber {
NSString *phone = CTSettingCopyMyPhoneNumber();

return phone;
}

CoreTelephony.framework もプロジェクトに含めます。

于 2012-08-30T14:28:04.080 に答える
23

As you probably all ready know if you use the following line of code, your app will be rejected by Apple

NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];

here is a reference

http://ayeapi.blogspot.com/2009/12/sbformatphonenumber-is-lie.html

you can use the following information instead

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

NSString *phoneUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];

等々

@property(nonatomic,readonly,retain) NSString    *name;              // e.g. "My iPhone"
@property(nonatomic,readonly,retain) NSString    *model;             // e.g. @"iPhone", @"iPod Touch"
@property(nonatomic,readonly,retain) NSString    *localizedModel;    // localized version of model
@property(nonatomic,readonly,retain) NSString    *systemName;        // e.g. @"iPhone OS"
@property(nonatomic,readonly,retain) NSString    *systemVersion;     // e.g. @"2.0"
@property(nonatomic,readonly) UIDeviceOrientation orientation;       // return current device orientation
@property(nonatomic,readonly,retain) NSString    *uniqueIdentifier;  // a string unique to each device based on various hardware info.

お役に立てれば!

于 2010-05-25T00:03:18.517 に答える
2

それを行うための公式APIはありません。プライベート API を使用すると、次のメソッドを使用できます。

-(NSString*) getMyNumber {
    NSLog(@"Open CoreTelephony");
    void *lib = dlopen("/Symbols/System/Library/Framework/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);
    NSLog(@"Get CTSettingCopyMyPhoneNumber from CoreTelephony");
    NSString* (*pCTSettingCopyMyPhoneNumber)() = dlsym(lib, "CTSettingCopyMyPhoneNumber");
    NSLog(@"Get CTSettingCopyMyPhoneNumber from CoreTelephony");

    if (pCTSettingCopyMyPhoneNumber == nil) {
        NSLog(@"pCTSettingCopyMyPhoneNumber is nil");
        return nil;
    }
    NSString* ownPhoneNumber = pCTSettingCopyMyPhoneNumber();
    dlclose(lib);
    return ownPhoneNumber;
}

JB や特別な署名なしで iOS 6 で動作します。

JBを使用したiOS 7のcrekerで述べたように、資格を使用して機能させる必要があります。

ここで見つけることができる資格でそれを行う方法: iOS 7: プライベート API を介して自分の番号を取得する方法?

于 2014-09-18T23:02:40.603 に答える
2

電話番号を取得するには、plist ファイルを読み取ることができます。ジェイルブレイクされていない iDevices では動作しません:

NSString *commcenter = @"/private/var/wireless/Library/Preferences/com.apple.commcenter.plist";
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:commcenter];
    NSString *PhoneNumber = [dict valueForKey:@"PhoneNumber"];
    NSLog([NSString stringWithFormat:@"Phone number: %@",PhoneNumber]);

Apple がこれを許可しているかどうかはわかりませんが、iPhone では動作します。

于 2013-03-28T09:46:22.560 に答える