Apakah ada cara untuk mendapatkan nomor telepon sendiri dengan API standar dari iPhone SDK?
Apakah ada cara untuk mendapatkan nomor telepon sendiri dengan API standar dari iPhone SDK?
Jawaban:
Dengan risiko mendapatkan nilai negatif, saya ingin menyarankan bahwa solusi peringkat tertinggi (saat ini tanggapan pertama) melanggar Perjanjian SDK terbaru pada 5 November 2009. Aplikasi kami baru saja ditolak karena menggunakannya. Inilah tanggapan dari Apple:
"Untuk alasan keamanan, iPhone OS membatasi aplikasi (termasuk preferensi dan datanya) ke lokasi unik dalam sistem file. Pembatasan ini adalah bagian dari fitur keamanan yang dikenal sebagai" kotak pasir "aplikasi. Kotak pasir adalah sekumpulan fine- kontrol berbutir yang membatasi akses aplikasi ke file, preferensi, sumber daya jaringan, perangkat keras, dan sebagainya. "
Nomor telepon perangkat tidak tersedia dalam wadah aplikasi Anda. Anda perlu merevisi aplikasi Anda untuk membaca hanya dalam wadah direktori Anda dan mengirimkan kembali biner Anda ke iTunes Connect agar aplikasi Anda dipertimbangkan kembali untuk App Store.
Ini benar-benar mengecewakan karena kami ingin agar pengguna tidak perlu memasukkan nomor telepon mereka sendiri.
Tidak, tidak ada cara yang sah dan dapat diandalkan untuk melakukan ini.
Jika Anda menemukan cara, itu akan dinonaktifkan di masa mendatang, seperti yang terjadi pada setiap metode sebelumnya.
Pembaruan: kemampuan tampaknya telah dihapus oleh Apple di atau sekitar iOS 4
Hanya untuk memperluas jawaban sebelumnya, sesuatu seperti ini akan melakukannya untuk saya:
NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];
Catatan : Ini mengambil "Nomor telepon" yang dimasukkan selama aktivasi iTunes iPhone dan bisa bernilai nol atau salah. Ini TIDAK dibaca dari kartu SIM.
Setidaknya itu tidak di 2.1. Ada beberapa kunci menarik lainnya di NSUserDefaults yang mungkin juga tidak bertahan lama. (Ini ada di aplikasi saya yang menggunakan UIWebView)
WebKitJavaScriptCanOpenWindowsAutomatically
NSInterfaceStyle
TVOutStatus
WebKitDeveloperExtrasEnabledPreferenceKey
dan seterusnya.
Tidak yakin apa, jika ada, yang lain lakukan.
Menggunakan Private API Anda bisa mendapatkan nomor telepon pengguna dengan cara berikut:
extern NSString* CTSettingCopyMyPhoneNumber();
+(NSString *) phoneNumber {
NSString *phone = CTSettingCopyMyPhoneNumber();
return phone;
}
Juga termasuk CoreTelephony.framework untuk proyek Anda.
Karena Anda semua mungkin sudah tahu jika Anda menggunakan baris kode berikut, aplikasi Anda akan ditolak oleh Apple
NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];
di sini adalah referensi
http://ayeapi.blogspot.com/2009/12/sbformatphonenumber-is-lie.html
Anda dapat menggunakan informasi berikut sebagai gantinya
NSString *phoneName = [[UIDevice currentDevice] name];
NSString *phoneUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];
dan seterusnya
@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.
Semoga ini membantu!
[UIDevice identifierForVendor]
saja.
Anda tidak dapat menggunakan iOS API sendirian untuk menangkap nomor telepon (bahkan di aplikasi pribadi dengan API pribadi), karena semua metode yang dikenal untuk melakukan ini telah ditambal dan diblokir pada iOS 11. Bahkan jika ditemukan eksploitasi baru, Apple telah membuat jelas bahwa mereka akan menolak aplikasi apa pun dari app store karena menggunakan API pribadi untuk melakukan ini. Lihat jawaban @ Dylan untuk detailnya.
Namun, ada cara hukum untuk menangkap nomor telepon tanpa entri data pengguna . Ini mirip dengan apa yang dilakukan Snapchat, tetapi lebih mudah, karena tidak mengharuskan pengguna untuk mengetikkan nomor telepon mereka sendiri.
Idenya adalah membuat aplikasi secara terprogram mengirim pesan SMS ke server dengan kode instalasi unik aplikasi. Aplikasi kemudian dapat meminta server yang sama untuk melihat apakah baru-baru ini menerima pesan SMS dari perangkat dengan kode instalasi aplikasi yang unik ini. Jika sudah, dapat membaca nomor telepon yang mengirimnya. Ini video demo yang menunjukkan prosesnya. Seperti yang Anda lihat, itu berfungsi seperti pesona!
Ini tidak super mudah untuk diatur, tetapi dapat dikonfigurasi dalam beberapa jam tanpa biaya pada tingkat AWS gratis dengan kode sampel yang disediakan dalam tutorial di sini .
Untuk mendapatkan nomor telepon Anda, Anda dapat membaca file plist. Ini tidak akan berfungsi pada iDevices yang tidak dipenjara:
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]);
Saya tidak tahu apakah Apple mengizinkan ini tetapi berfungsi pada iPhone.
Tidak ada API resmi untuk melakukannya. Menggunakan API pribadi Anda dapat menggunakan metode berikut:
-(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;
}
Ini bekerja di iOS 6 tanpa JB dan penandatanganan khusus.
Seperti yang disebutkan creker di iOS 7 dengan JB Anda harus menggunakan hak untuk membuatnya berfungsi.
Bagaimana cara melakukannya dengan hak yang dapat Anda temukan di sini: iOS 7: Cara mendapatkan nomor sendiri melalui API pribadi?
AppStore akan menolaknya, karena mencapai di luar wadah aplikasi.
Aplikasi harus mandiri dalam bundel mereka, dan mungkin tidak membaca atau menulis data di luar area kontainer yang ditunjuk
Bagian 2.5.2: https://developer.apple.com/app-store/review/guidelines/#software-requirements