سؤال

أنا أعمل على تطبيق iPhone وسأحب حقا تحديد ما إذا كان الجهاز يتجول حتى أتمكن من تجنب التكلفة بذكاء اتصالات المستخدمين باهظة الثمن إذا خرجت من شبكتهم المنزلية.

التطبيق الذي أكتب فيه هو للهواتف jailbroken، ولكن أفضل استخدام SDKS قياسي إن أمكن.

هنا هو ما وجدت بالفعل:

1. أبل SDKS:في وثائق Apple، وجدت الوعد في واجهة برمجة تطبيقات Apple Scnetworkreachreach. يوفر API إمكانية الوصول إلى هذه الأشياء كما سواء كنت على شبكة واي فاي أو شبكة الهاتف الخليوي، سواء تم إنشاء اتصال شبكة حاليا، وما إلى ذلك، ومع ذلك ابحث في Scnetworkreach Reach Reference PDF ل "Roam Roam" أو "التجوال" يحضر Nil. لذلك يفعل نموذج التعليمة البرمجية الخاصة بهم.

2. Grep من Jailbroken iPhone FS:تفضيلات -> عامة -> علامة تبويب الشبكات هي حيث يمكن للمستخدمين تشغيل أو إيقاف التجوال. هل تبحث في ملف Plist لهذه ("/pplications/preferences/network.plist") كنت قادرا على العثور على المراجع التالية:

        PostNotification = "com.apple.commcenter.InternationalRoamingEDGE.changed";
        cell = PSSwitchCell;
        default = 1;
        defaults = "com.apple.commcenter";
        key = InternationalRoamingEDGE;
        label = "EDGE_ROAMING_TOGGLE";
        requiredCapabilities =             (
            telephony
        );

هذا بالتأكيد تقدم، كما يبدو أنه يمكنني التسجيل للحصول على الإخطارات التي قام المستخدم بتغيير إعدادات elationalroaming. ومع ذلك، أنا لست متأكدا من كيفية تحويل هذا إلى معرفة أنها في الواقع، التجوال حاليا.

3. تحقق من مصادر الفئة ملقاة ل Springboard:لقد ألقيت فئات Springboard باستخدام تفريغ الطبقة. وبعد لم أتمكن من العثور على أي مراجع إلى "التجوال" أو "التجوال"

4. من الواضح أنني بدأت بالتحقق من ذلك إلى هذا:لا يمكن العثور على أي شيء متعلق.

خطوات أخرى: هل لدى أي شخص أي نصيحة هنا؟ أعرف أن هذا ممكن. بوضوح أبل جعلت من الصعب جدا أن نجد ولكن. أشك بشدة في أن هذا ممكن دون استخدام إطار خاص. (مثل coretelephony). نظرا لأن هذا هو تطبيق Jailbroken، قد ألجأ إلى شاشة كشط اسم الناقل مع رمز حقن في Springboard، لكنني أفضل حقا عدم الذهاب إلى هذا الطريق. أي نصيحة موضع تقدير كبير. شكرا.

هل كانت مفيدة؟

المحلول

هنالك! لم يتم توثيقها على الإطلاق، وأشك بشدة في أن هذا سيعمل على هاتف غير جذع (لأنه يتطلب استخدام الملفات غير الموجودة في Sandbox). ومع ذلك، هنا هو كيف يتم ذلك.

نظام ملفات iPhone يحتفظ برنسيين:

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

عندما تشير هذه الروابط إلى نفس الملف، فإن الهاتف لا يتجول. عند الإشارة إلى ملفات مختلفة، الهاتف هو Romaing.

رمز مبسط (لا يوجد خطأ في التحقق، إلخ):

- (BOOL)isRoaming
{
    NSFileManager *fm = [NSFileManager defaultManager];
    NSError *error;
    NSString *carrierPListPath = [fm destinationOfSymbolicLinkAtPath:carrierPListSymLinkPath error:&error];
    NSString *operatorPListPath = [fm destinationOfSymbolicLinkAtPath:operatorPListSymLinkPath error:&error];
    return (![operatorPListPath isEqualToString:carrierPListPath]);
}

نصائح أخرى

حل الهائل ليس هو السبيل الوحيد للقيام بذلك ولكن بالتأكيد هو الأفضل. كما أدركت فقط، فإن السلاسل عادت تحتوي على رموز MCC و MNC للمشغل والناقل! حتى إطار الاتصال الهاتفي الأساسي غير قادر على استرداد هذه المعلومات حول المشغل مرفقة iPhone الخاص بك عند التجوال.

 Logs: 
 carrier: /System/Library/Carrier Bundles/iPhone/72410/carrier.plist
 operator: /System/Library/Carrier Bundles/iPhone/20810/carrier.plist

كما ترون، يحتوي سطر الناقل (المزود الخلوي الأصلي) على الملف داخل "مجلد" 72410، مما يعني MCC 724 (البرازيل) و MNC 10 (VIVO). المشغل (في الواقع، يتم إرفاق هاتفي الخلوي واحد - أنا في التجوال) داخل المجلد 20810، وهو ما يعني MCC 208 (فرنسا) و MNC 10 (SFR).

بالمناسبة، أنا أستخدم iPhone 4 مع iOS5.

على جهاز غير جذع، يمكنك استخدام خدمات الطرف الثالث مثل http://ipinfo.io. (خدمتي الخاصة) لمعرفة البلد الحالي حتى رمز الناقل بناء على عنوان IP للجهاز، ويمكنك بعد ذلك مقارنة التفاصيل CTCarrier لتحديد ما إذا كان الجهاز يتجول. إليك استجابة API القياسية IPINFO.IO:

$ curl ipinfo.io/24.32.148.1 
{
    "ip": "24.32.148.1",
    "hostname": "doc-24-32-148-1.pecos.tx.cebridge.net",
    "city": "Pecos",
    "region": "Texas",
    "country": "US",
    "loc": "31.3086,-103.5892",
    "org": "AS7018 AT&T Services, Inc.",
    "postal": "79772"
}

تتوفر حزم مخصصة تشمل أيضا تفاصيل MNC / MCC من IPS المحمول. يرى http://ipinfo.io/developers. للتفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top