Есть ли способ обнаружить статус роуминга на iOS 6? - программирование
Подтвердить что ты не робот

Есть ли способ обнаружить статус роуминга на iOS 6?

Мое приложение, использующее ниже методы для обнаружения роуминга в iOS 4 и 5.

NSString *carrierPListSymLinkPath = @"/var/mobile/Library/Preferences/com.apple.carrier.plist"; 
NSString *operatorPListSymLinkPath = @"/var/mobile/Library/Preferences/com.apple.operator.plist"; 

NSFileManager *fm = [NSFileManager defaultManager]; 
NSError *error = nil; 

NSString *carrierPListPath = [fm destinationOfSymbolicLinkAtPath:carrierPListSymLinkPath error:&error];     

NSString *operatorPListPath = [fm destinationOfSymbolicLinkAtPath:operatorPListSymLinkPath error:&error];

return (![operatorPListPath isEqualToString:carrierPListPath]); 

Но этот код всегда возвращает false на iOS6 (даже я не роуминг, он всегда возвращает false), я думаю, что это может быть изменение местоположения файла plist от Apple, любой сталкивается с той же проблемой, может ли кто-нибудь помочь мне в этом

Спасибо.

4b9b3361

Ответ 1

Это ответ, который я получил от apple:

"Действительно. К сожалению, эти файлы никогда не были документированы как открытый API и, как таковые, никогда не предназначались для использования сторонними приложениями. Во многих случаях такие ограничения применяются либо технически с помощью изолированной программной среды iOS, либо в Обзор приложений. Однако ни один из этих процессов не является совершенным, и бывают случаи, когда приложения в конечном итоге делают то, что им не нужно делать. К сожалению, это затрудняет работу этих приложений, когда их действие улучшается, как это произошло в этом случае.

Что касается прямых обходных решений, на самом деле их нет. Единственные API общедоступной телефонии на iOS предоставляются базой Core Telephony. Его класс CTTelephonyNetworkInfo предоставляет информацию о сотовом сервере пользователя, а не о сети, в которой они находятся в роуминге.

Они предлагают вам использовать проверку гео-ip.

Ответ 2

Опираясь на ту же проблему здесь, начиная с iOS6 beta 1, поскольку эта версия /var/mobile/Library/Preferences/com.apple.operator.plist sym-link больше не обратима.

Никакой другой способ только для устройств не является общедоступным, в то время как уникальное решение - проверить ip через geo-ip, как сказал Траусти Тор или проверить класс ip, если вы разрабатывают приложение для одного оператора.