کنترل دسترسی به اینترنت در IOS
شاید برای شما هم پیش اومده باشه که هنگام نوشتن یک اپلیکیشن IOS دسترسی اپلیکیشن به اینترنت رو کنترل کنین و تشخیص بدین آیا کاربر به شبکه ی اینترنت متصل می باشد تا در صورت نیاز هنگامی که کاربر به اینترنت متصل نیست عملیات مختلفی را انجام دهید. با Zero To Hero در این مقاله همراه باشید تا روش های صحیح و اصولی را بیاموزید.
روش اول – استفاده از یک کلاس ساده
۱) ابتدا فریم ورک SystemConfiguration را به پروژه ی خود اضافه کنید.
۲) Reachability.h و Reachability.m را از طریق لینک گیت هاب Tony Million به پروژه خود اضافه کنید.
۳) کد زیر را در قسمت interface بنویسید.
#import "Reachability.h" // Add this to the interface in the .m file of your view controller @interface MyViewController () { Reachability *internetReachableFoo; } @end
۴) سپس کد زیر را به m. فایل در view controller خود اضافه کنید.
// Checks if we have an internet connection or not - (void)testInternetConnection { internetReachableFoo = [Reachability reachabilityWithHostname:@"www.google.com"]; // Internet is reachable internetReachableFoo.reachableBlock = ^(Reachability*reach) { // Update the UI on the main thread dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Yayyy, we have the interwebs!"); }); }; // Internet is not reachable internetReachableFoo.unreachableBlock = ^(Reachability*reach) { // Update the UI on the main thread dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Someone broke the internet :("); }); }; [internetReachableFoo startNotifier]; }
روش دوم – همانند گذشته ها خودتان همه کار را انجام دهید !
۱) ابتدا فریم ورک SystemConfiguration را به پروژه خود اضافه کنید.
۲) Reachability.h و Reachability.m را از طریق وب سایت اپل به پروژه خود اضافه کنید.
۳) در h. فایل خود class Reachability@ را اضافه کنید.
۴) چند شی ساده بسازید تا قسمت interface در .h فایل را بررسی کنید.
Reachability* internetReachable; Reachability* hostReachable;
۵) یک متد به .h فایل اضافه کنید تا وضعیت شبکه آپدیت شود.
-(void) checkNetworkStatus:(NSNotification *)notice;
۶) در m. فایل خود کد زیر را اضافه کنید.
-(void) checkNetworkStatus:(NSNotification *)notice;
۷) در m. فایل خود کد زیر را به عنوان init، viewWillAppear یا viewDidLoad اضافه کنید.
-(void) viewWillAppear:(BOOL)animated { // check for internet connection [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; internetReachable = [Reachability reachabilityForInternetConnection]; [internetReachable startNotifier]; // check if a pathway to a random host exists hostReachable = [Reachability reachabilityWithHostName:@"www.apple.com"]; [hostReachable startNotifier]; // now patiently wait for the notification }
۸) متد زیر را استفاده کنید تا از رویدادهای گوناگون مطلع شوید.
-(void) checkNetworkStatus:(NSNotification *)notice { // called after network status changes NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; switch (internetStatus) { case NotReachable: { NSLog(@"The internet is down."); self.internetActive = NO; break; } case ReachableViaWiFi: { NSLog(@"The internet is working via WIFI."); self.internetActive = YES; break; } case ReachableViaWWAN: { NSLog(@"The internet is working via WWAN."); self.internetActive = YES; break; } } NetworkStatus hostStatus = [hostReachable currentReachabilityStatus]; switch (hostStatus) { case NotReachable: { NSLog(@"A gateway to the host server is down."); self.hostActive = NO; break; } case ReachableViaWiFi: { NSLog(@"A gateway to the host server is working via WIFI."); self.hostActive = YES; break; } case ReachableViaWWAN: { NSLog(@"A gateway to the host server is working via WWAN."); self.hostActive = YES; break; } } }
۹) در dealloc یا viewWillDisappear یا متدهای مشابه removeObserver را انجام دهید.
-(void) viewWillDisappear:(BOOL)animated { [[NSNotificationCenter defaultCenter] removeObserver:self]; }
توجه : کلاس Reachability در این پروژه استفاده شده است، ممکن است این کلاس از نظر naming با پروژه های دیگر تداخل ایجاد کند، برای جلوگیری از تداخل Reachability.h و Reachability.m را به نام دیگری تغییر دهید تا مشکل حل شود.
موفق باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.