Có cách nào để có được số điện thoại của riêng mình bằng các API tiêu chuẩn từ SDK iPhone không?
Có cách nào để có được số điện thoại của riêng mình bằng các API tiêu chuẩn từ SDK iPhone không?
Câu trả lời:
Có nguy cơ bị đánh dấu tiêu cực, tôi muốn đề xuất rằng giải pháp xếp hạng cao nhất (hiện là phản hồi đầu tiên) vi phạm Thỏa thuận SDK mới nhất kể từ ngày 5 tháng 11 năm 2009. Ứng dụng của chúng tôi đã bị từ chối vì sử dụng nó. Đây là phản hồi từ Apple:
"Vì lý do bảo mật, HĐH iPhone giới hạn một ứng dụng (bao gồm tùy chọn và dữ liệu của nó) ở một vị trí duy nhất trong hệ thống tệp. Hạn chế này là một phần của tính năng bảo mật được gọi là" hộp cát "của ứng dụng. các điều khiển chi tiết giới hạn quyền truy cập của ứng dụng vào các tệp, tùy chọn, tài nguyên mạng, phần cứng, v.v. "
Số điện thoại của thiết bị không khả dụng trong vùng chứa ứng dụng của bạn. Bạn sẽ cần sửa lại ứng dụng của mình để chỉ đọc trong vùng chứa thư mục của bạn và gửi lại tệp nhị phân của bạn lên iTunes Connect để ứng dụng của bạn được xem xét lại cho App Store.
Đây là một sự thất vọng thực sự vì chúng tôi muốn phụ tùng người dùng phải nhập số điện thoại của riêng họ.
Không, không có cách hợp pháp và đáng tin cậy để làm điều này.
Nếu bạn tìm thấy một cách, nó sẽ bị vô hiệu hóa trong tương lai, vì nó đã xảy ra với mọi phương pháp trước đây.
Cập nhật: khả năng dường như đã bị Apple xóa trên hoặc xung quanh iOS 4
Chỉ cần mở rộng câu trả lời trước đó, một cái gì đó như thế này sẽ giúp tôi:
NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];
Lưu ý : Điều này lấy "Số điện thoại" đã được nhập trong quá trình kích hoạt iTunes của iPhone và có thể là null hoặc giá trị không chính xác. Nó KHÔNG được đọc từ thẻ SIM.
Ít nhất là trong 2.1. Có một vài khóa thú vị khác trong NSUserDefaults cũng có thể không tồn tại. (Đây là trong ứng dụng của tôi sử dụng UIWebView)
WebKitJavaScriptCanOpenWindowsAutomatically
NSInterfaceStyle
TVOutStatus
WebKitDeveloperExtrasEnabledPreferenceKey
và như thế.
Không chắc chắn những gì, nếu bất cứ điều gì, những người khác làm.
Sử dụng API riêng, bạn có thể nhận được số điện thoại của người dùng theo cách sau:
extern NSString* CTSettingCopyMyPhoneNumber();
+(NSString *) phoneNumber {
NSString *phone = CTSettingCopyMyPhoneNumber();
return phone;
}
Cũng bao gồm CoreTelephony.framework cho dự án của bạn.
Như bạn có thể đã biết nếu bạn sử dụng dòng mã sau đây, ứng dụng của bạn sẽ bị Apple từ chối
NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];
đây là một tài liệu tham khảo
http://ayeapi.blogspot.com/2009/12/sbformatphonenumber-is-lie.html
thay vào đó bạn có thể sử dụng thông tin sau
NSString *phoneName = [[UIDevice currentDevice] name];
NSString *phoneUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];
và như thế
@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.
Hi vọng điêu nay co ich!
[UIDevice identifierForVendor]
Thay vào đó hãy sử dụng .
Bạn không thể sử dụng API iOS một mình để nắm bắt số điện thoại (ngay cả trong một ứng dụng riêng có API riêng), vì tất cả các phương pháp thực hiện điều này đã được vá và chặn kể từ iOS 11. Ngay cả khi tìm thấy khai thác mới, Apple đã thực hiện rõ ràng rằng họ sẽ từ chối bất kỳ ứng dụng nào từ cửa hàng ứng dụng để sử dụng API riêng để thực hiện việc này. Xem câu trả lời của @ Dylan để biết chi tiết.
Tuy nhiên, có một cách hợp pháp để bắt số điện thoại mà không cần nhập dữ liệu người dùng . Điều này tương tự như những gì Snapchat làm, nhưng dễ dàng hơn, vì nó không yêu cầu người dùng nhập số điện thoại của riêng họ.
Ý tưởng là để ứng dụng gửi tin nhắn SMS đến máy chủ có mã cài đặt duy nhất của ứng dụng. Sau đó, ứng dụng có thể truy vấn cùng một máy chủ để xem gần đây có nhận được tin nhắn SMS từ một thiết bị có mã cài đặt ứng dụng độc đáo này không. Nếu có, nó có thể đọc số điện thoại đã gửi. Đây là video demo cho thấy quá trình. Như bạn có thể thấy, nó hoạt động như một bùa mê!
Điều này không dễ để thiết lập, nhưng nó được cấu hình trong vài giờ miễn phí trên tầng AWS miễn phí với mã mẫu được cung cấp trong hướng dẫn tại đây .
Để có được số điện thoại của bạn, bạn có thể đọc một tập tin plist. Nó sẽ không hoạt động trên các iDevices không jailbreak:
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]);
Tôi không biết nếu Apple cho phép điều này nhưng nó hoạt động trên iPhone.
Không có API chính thức để làm điều đó. Sử dụng API riêng, bạn có thể sử dụng phương pháp sau:
-(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;
}
Nó hoạt động trên iOS 6 mà không cần JB và ký đặc biệt.
Như đã đề cập đến creker trên iOS 7 với JB, bạn cần sử dụng các quyền lợi để làm cho nó hoạt động.
Cách thực hiện với các quyền lợi bạn có thể tìm thấy ở đây: iOS 7: Làm cách nào để có số riêng thông qua API riêng?
AppStore sẽ từ chối nó, vì nó tiếp cận bên ngoài vùng chứa ứng dụng.
Các ứng dụng phải được chứa trong các gói của chúng và không được đọc hoặc ghi dữ liệu bên ngoài khu vực chứa được chỉ định
Mục 2.5.2: https://developer.apple.com/app-store/review/guferences/#software-requirements