İPhone SDK'dan standart API'lerle kendi telefon numaranızı almanın bir yolu var mı?
İPhone SDK'dan standart API'lerle kendi telefon numaranızı almanın bir yolu var mı?
Yanıtlar:
Olumsuz işaretler alma riski altında, en yüksek dereceli çözümün (şu anda ilk yanıt) 5 Kasım 2009'dan itibaren en son SDK Anlaşmasını ihlal ettiğini önermek istiyorum. Başvurumuz bunu kullandığından dolayı reddedildi. İşte Apple'ın yanıtı:
"Güvenlik nedeniyle, iPhone OS bir uygulamayı (tercihleri ve verileri dahil) dosya sistemindeki benzersiz bir konumla sınırlar. Bu kısıtlama, uygulamanın" korumalı alanı "olarak bilinen güvenlik özelliğinin bir parçasıdır. Korumalı alan, bir uygulamanın dosyalara, tercihlere, ağ kaynaklarına, donanıma vb. erişimlerini sınırlayan taneli denetimler. "
Cihazın telefon numarası, uygulamanızın kapsayıcısında mevcut değil. Uygulamanızın App Store için yeniden değerlendirilebilmesi için uygulamanızı yalnızca dizin kapsayıcısında okuyacak şekilde revize etmeniz ve ikili dosyalarınızı iTunes Connect'e yeniden göndermeniz gerekir.
Kendi telefon numarasını girmek zorunda kullanıcıyı yedeklemek istedim çünkü bu gerçek bir hayal kırıklığı oldu.
Hayır, bunu yapmanın yasal ve güvenilir bir yolu yok.
Bir yol bulursanız, daha önce her yöntemde olduğu gibi gelecekte devre dışı bırakılacaktır.
Güncelleme: Apple tarafından iOS 4 veya çevresinde kaldırılmış gibi görünüyor
Daha önceki bir cevabı genişletmek için, böyle bir şey benim için yapar:
NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];
Not : Bu, iPhone'un iTunes etkinleştirmesi sırasında girilen ve boş veya yanlış bir değer olabilen "Telefon numarası" nı alır. Bu oluyor DEĞİL SIM karttan okuyun.
En azından 2.1. NSUserDefaults'ta da uzun süre dayanamayan birkaç ilginç anahtar var. (Bu benim UIWebView kullanan benim app)
WebKitJavaScriptCanOpenWindowsAutomatically
NSInterfaceStyle
TVOutStatus
WebKitDeveloperExtrasEnabledPreferenceKey
ve bunun gibi.
Başkalarının ne yaptığını bilmiyorlar.
Özel API'yi kullanarak kullanıcı telefon numarasını aşağıdaki şekilde alabilirsiniz:
extern NSString* CTSettingCopyMyPhoneNumber();
+(NSString *) phoneNumber {
NSString *phone = CTSettingCopyMyPhoneNumber();
return phone;
}
Ayrıca Projenize CoreTelephony.framework ekleyin.
Aşağıdaki kod satırını kullanıp kullanmadığınızı muhtemelen bildiğiniz gibi, uygulamanız Apple tarafından reddedilecek
NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];
işte bir referans
http://ayeapi.blogspot.com/2009/12/sbformatphonenumber-is-lie.html
bunun yerine aşağıdaki bilgileri kullanabilirsiniz
NSString *phoneName = [[UIDevice currentDevice] name];
NSString *phoneUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];
ve bunun gibi
@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.
Bu yardımcı olur umarım!
[UIDevice identifierForVendor]
Bunun yerine kullanın .
Bilinen tüm yöntemlerin iOS 11'den itibaren yamalandığı ve engellendiği için, telefon numaralarını (özel API'lere sahip özel bir uygulamada bile) yakalamak için yalnızca iOS API'larını kullanamazsınız. bunu yapmak için özel API'leri kullandıkları için uygulama mağazasındaki tüm uygulamaları reddedeceklerini unutmayın. Ayrıntılar için @ Dylan'ın cevabına bakınız.
Ancak, herhangi bir kullanıcı veri girişi olmadan telefon numarasını yakalamanın yasal bir yolu vardır . Bu, Snapchat'in yaptıklarına benzer, ancak kullanıcının kendi telefon numarasını yazmasını gerektirmediği için daha kolaydır.
Fikir, uygulamanın programlı olarak uygulamanın benzersiz kurulum koduna sahip bir sunucuya SMS mesajı göndermesidir. Uygulama daha sonra aynı sunucuyu, bu benzersiz uygulama yükleme koduna sahip bir cihazdan kısa süre önce SMS alıp almadığını görmek için sorgulayabilir. Varsa, onu gönderen telefon numarasını okuyabilir. İşte süreci gösteren bir demo video . Gördüğünüz gibi, bir cazibe gibi çalışıyor!
Bu süper kolay kurmak değil, ama öğretici sağlanan örnek kod ile ücretsiz bir AWS katta hiçbir ücret ödemeden birkaç saat içinde yapılandırılabilir burada .
Size telefon numarası almak için bir plist dosyasını okuyabilirsiniz. Jailbreak yapmayan iDevices üzerinde çalışmaz:
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'ın buna izin verip vermediğini bilmiyorum ama iPhone'larda çalışıyor.
Bunu yapmak için resmi bir API yok. Özel API kullanarak aşağıdaki yöntemi kullanabilirsiniz:
-(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 ve özel imza olmadan iOS 6'da çalışır.
Belirtildiği gibi creker üzerinde JB ile iOS 7 o çalışma yapmak için yetkileri kullanmak gerekir.
Burada bulabileceğiniz yetkilerle nasıl yapılır: iOS 7: Özel API ile kendi numaranızı nasıl alabilirim?
AppStore, uygulama kapsayıcısının dışına ulaştığı için reddeder.
Uygulamalar kendi paketlerinde bağımsız olmalıdır ve belirtilen kapsayıcı alanının dışında veri okuyamaz veya yazamaz.
Bölüm 2.5.2: https://developer.apple.com/app-store/review/guidelines/#software-requirements