আইওএস এ ইন্টারনেট সংযোগ সনাক্ত করার সবচেয়ে সহজ উপায়?


147

আমি জানি এই প্রশ্নটি অন্য অনেকেরই দ্বীপ হিসাবে দেখা দেবে, তবে আমি মনে করি না যে এখানে সাধারণ কেসটি ভালভাবে ব্যাখ্যা করা হয়েছে। কোনও অ্যান্ড্রয়েড এবং ব্ল্যাকবেরি পটভূমি থেকে আসা, HTTPUrlConnectionযদি কোনও সংযোগ না পাওয়া যায় তাৎক্ষণিকভাবে অনুরোধ করে । এটি পুরোপুরি বুদ্ধিমান আচরণের মতো বলে মনে হচ্ছে এবং আমি বিস্মিত NSURLConnectionহয়ে আইওএসে এটি অনুকরণ করি নি।

আমি বুঝতে পারি যে অ্যাপল (এবং অন্যরা যারা এটি প্রসারিত করেছে) Reachabilityনেটওয়ার্ক অবস্থা নির্ধারণে সহায়তা করার জন্য একটি শ্রেণি সরবরাহ করে। আমি প্রথমে এটি দেখে খুশি হয়েছিলাম এবং এর মতো কিছু দেখার সম্পূর্ণ প্রত্যাশা bool isNetworkAvailable()রেখেছিলাম, তবে আমার বিস্ময়ের পরিবর্তে আমি একটি জটিল ব্যবস্থা পেয়েছি যা বিজ্ঞপ্তির নিবন্ধকরণ এবং কলব্যাকগুলির প্রয়োজন, এবং আপাতদৃষ্টিতে অপ্রয়োজনীয় বিবরণগুলির একগুচ্ছ। আরও ভাল উপায় থাকতে হবে।

আমার অ্যাপ্লিকেশন ইতিমধ্যে সংযোগ ব্যর্থতা, কোনও সংযোগ না সহ, কর্কশভাবে পরিচালনা করে। ব্যবহারকারীকে ব্যর্থতার বিষয়ে অবহিত করা হয় এবং অ্যাপটি এগিয়ে চলে।

সুতরাং আমার প্রয়োজনীয়তাগুলি সহজ: একক, সিঙ্ক্রোনাস ফাংশনটি আমি এইচটিটিপি অনুরোধের আগে কল করতে পারি যে আমাকে অনুরোধটি প্রেরণা করতে আসলেই বিরক্ত করা উচিত কিনা। আদর্শভাবে এটির জন্য কোনও সেট আপ প্রয়োজন নেই এবং কেবল একটি বুলিয়ান দেয়।

এটি কি আইওএস-এ সম্ভব নয়?



প্রতিটি এইচটিটিপি অনুরোধের পূর্বে আপনার কখনই একটি সিঙ্ক্রোনাস নেটওয়ার্কের পুনঃব্যবহারযোগ্যতা পদ্ধতিটি কল করা উচিত নয়; এই কাজটি করা কেবল এক ধরণের পাগল না যদি না অ্যাক্টিভিয়লিটি আপনাকে নেটওয়ার্কের অবস্থার পরিবর্তন করতে না পারে এবং তারপরে আপনি এইচটিটিপি অনুরোধ না প্রেরণ করতে পারবেন না। সময়সীমা অস্তিত্বের পুরো কারণটিও এটির কারণেই রয়েছে (এবং তারপরে আপনার সেই দৃশ্যটি মনোযোগ সহকারে পরিচালনা করা উচিত)।
অ্যাসিঙ্ক উপায়ের

উত্তর:


251

আমি আরও কিছু গবেষণা করেছি এবং আমি আমার উত্তরটি আরও বর্তমান সমাধান দিয়ে আপডেট করছি। আপনি ইতিমধ্যে এটি দেখেছেন কিনা তা আমি নিশ্চিত নই তবে অ্যাপল দ্বারা সরবরাহ করা একটি দুর্দান্ত নমুনা কোড রয়েছে।

নমুনা কোডটি এখানে ডাউনলোড করুন

আপনার প্রকল্পে Reachability.h এবং Reachability.m ফাইল অন্তর্ভুক্ত করুন। হোস্টের পুনঃব্যবহারযোগ্যতা, ডাব্লুডাব্লুএএন দ্বারা পুনরুদ্ধারযোগ্যতা কীভাবে নির্ধারণ করা যায় তার উদাহরণ দেখতে রিচাবিলিটি অ্যাপ্লিকেশন ডিলিগেট.এম এ একবার দেখুন, খুব সহজেই নেটওয়ার্কের পুনঃব্যবহারযোগ্যতা যাচাইয়ের জন্য, আপনি এর মতো কিছু করতে পারেন

Reachability *networkReachability = [Reachability reachabilityForInternetConnection];   
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];    
if (networkStatus == NotReachable) {        
    NSLog(@"There IS NO internet connection");        
} else {        
     NSLog(@"There IS internet connection");        
}

@ বেনজামিনপিটস: আপনার প্রকল্পে সিস্টেম কনফিগারেশন.ফ্রেমওয়ার্ক যুক্ত করতে ভুলবেন না।


46
আপনার প্রকল্পে সিস্টেম কনফিগারেশন.ফ্রেমওয়ার্ক যুক্ত করতে ভুলবেন না।
বেনিয়ামিন পিট

1
@ চন্দ্রু এটি কাজ করে। নেটওয়ার্ক সংযোগ সনাক্ত করার জন্য এটি আমি দেখতে সবচেয়ে সহজ এবং কার্যকর উপায়। সহজ এবং সহজ!
এস 1 ইউ

3
এই সঙ্গে যত্নশীল। নেটওয়ার্কটি পুনরুদ্ধার করা হলেও এটি কমপক্ষে সিমুলেটারে নির্ভরযোগ্যভাবে কাজ করে না তা খুঁজে পাচ্ছি। আমি ওয়াইফাই বন্ধ করে দিয়েছি এবং এটি কোনও নেটওয়ার্ক উপলব্ধ নেই বলে সঠিকভাবে রিপোর্ট করেছে; তবে তারপরে আমি ওয়াইফাইটি চালু করি এবং এসসিনেট ওয়ার্ক রিচ্যাবিলিটি গেটফ্লাগগুলি 0 ফিরে আসতে থাকে, যদিও প্রকৃত নেটওয়ার্ক অনুসন্ধানগুলি ঠিকঠাক কাজ করে।
জো স্ট্রাউট

2
আমি বিশ্বাস করি নীচে আমার উত্তরটির ( স্ট্যাকওভারফ্লো.com / a / 26593728 / 557362 ) কম কাজ দরকার (অন্যান্য ফাইল ডাউনলোড করা নেই) তবে এটি কেবল আমার অভিমত।
জিলসডিমিল্ডন

3
দ্রষ্টব্য যে এটি আপনাকে কেবল নির্দিষ্ট হোস্টের সংযোগটি রাউটেবল কিনা তা জানায় । এর অর্থ এই নয় যে আপনি আসলে সংযোগ করতে সক্ষম। উদাহরণ: আপনি আপনার আইফোনের ওয়াইফাইটিকে আপনার ক্যামেরার ওয়াইফাইয়ের সাথে সংযুক্ত করেন। ওয়াইফাই একটি ডিফল্ট গেটওয়ের সাথে সংযুক্ত: সমস্ত হোস্টগুলি পৌঁছনীয়ের প্রতিবেদন করবে। তবে এগুলি আসলে নয় - ক্যামেরাটি একটি ডেড-এন্ড সংযোগ।
xaphod

45

এই ধরণের প্রশ্নের জন্য এই থ্রেডটি শীর্ষস্থানীয় গুগল ফলাফল হিসাবে দেখে আমি বুঝতে পেরেছিলাম যে আমার জন্য কাজ করা সমাধানটি আমি সরবরাহ করব। আমি ইতিমধ্যে এএফ নেট নেটওয়ার্কিং ব্যবহার করছিলাম , তবে অনুসন্ধানে আমার প্রকল্পের মধ্যভাগ পর্যন্ত এএফ নেটওয়ার্কিংয়ের সাথে কীভাবে এই কাজটি সম্পাদন করা যায় তা প্রকাশ করা যায় নি।

আপনি যা চান তা হ'ল এএফ নেটওয়ার্কিং রিচাবিলিটি ম্যানেজার

// -- Start monitoring network reachability (globally available) -- //
[[AFNetworkReachabilityManager sharedManager] startMonitoring];

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

    NSLog(@"Reachability changed: %@", AFStringFromNetworkReachabilityStatus(status));


    switch (status) {
        case AFNetworkReachabilityStatusReachableViaWWAN:
        case AFNetworkReachabilityStatusReachableViaWiFi:
            // -- Reachable -- //
            NSLog(@"Reachable");
            break;
        case AFNetworkReachabilityStatusNotReachable:
        default:
            // -- Not reachable -- //
            NSLog(@"Not Reachable");
            break;
    }

}];

পুনরায় ব্যবহারযোগ্যতা সিঙ্ক্রোনালি পরীক্ষা করার জন্য আপনি নিম্নলিখিতগুলিও ব্যবহার করতে পারেন (একবার মনিটরিং শুরু হয়ে গেলে):

-(BOOL) isInternetReachable
{
    return [AFNetworkReachabilityManager sharedManager].reachable;
}

3
আমি AFNetworkReachabilityManagerআলোতে আনার জন্য upvated !
সেলভিন

যাদের কাছে এটি তাত্ক্ষণিকভাবে স্পষ্ট ছিল না: এএফ নেট নেটওয়ার্কিং একটি তৃতীয় পক্ষের লাইব্রেরি।
আর্লোমিডিয়া

1
নেটওয়ার্ক পুনঃব্যবহারযোগ্যতা একটি ডায়াগনস্টিক সরঞ্জাম যা একটি অনুরোধ কেন ব্যর্থ হতে পারে তা বোঝার জন্য ব্যবহার করা যেতে পারে। অনুরোধ করা হবে কি না তা নির্ধারণের জন্য এটি ব্যবহার করা উচিত নয়। - ডকুমেন্টেশন এটাই বলে।
নসভ পাভেল

AFNetworkReachabilityManager.reachableকোনও ধরণের সিঙ্ক্রোনাস চেক করে না। এটি একটি যৌক্তিক reachableViaWWANএবং এর প্রদান করে reachableViaWifi
jdolan

40

দেরিতে জবাব দেওয়ার জন্য দুঃখিত তবে আমি আশা করি এই উত্তরটি ভবিষ্যতে কাউকে সহায়তা করতে পারে।

নিম্নলিখিতটি একটি ছোট দেশীয় সি কোড স্নিপেট যা কোনও অতিরিক্ত শ্রেণি ছাড়াই ইন্টারনেট সংযোগ পরীক্ষা করতে পারে।

নিম্নলিখিত শিরোনাম যুক্ত করুন:

#include<unistd.h>
#include<netdb.h>

কোড:

-(BOOL)isNetworkAvailable
{
    char *hostname;
    struct hostent *hostinfo;
    hostname = "google.com";
    hostinfo = gethostbyname (hostname);
    if (hostinfo == NULL){
        NSLog(@"-> no connection!\n");
        return NO;
    }
    else{
        NSLog(@"-> connection established!\n");
        return YES;
    }
}

সুইফট 3

func isConnectedToInternet() -> Bool {
    let hostname = "google.com"
    //let hostinfo = gethostbyname(hostname)
    let hostinfo = gethostbyname2(hostname, AF_INET6)//AF_INET6
    if hostinfo != nil {
        return true // internet available
      }
     return false // no internet
    }

3
অ্যাপল রিচ্যাবিলিটির চেয়ে অনেক ভাল কাজ করে। তবে ডক্স অনুসারে জেথোস্টবাইয়ের নামটি অপ্রচলিত এবং আপনার getaddrinfo ব্যবহার করা উচিত: স্ট্রাক্ট অ্যাড্রিনফো * রেজ = NULL; int s = getaddrinfo ("আপেল ডটকম", NULL, NULL, & res); বুল নেটওয়ার্ক_ক = (গুলি = 0 && পুনরায়! = ন্যূনল); freeaddrinfo (মাঝামাঝি);
টারটিয়াম

1
যদিও ইন্টারনেটের সহজলভ্যতা পরীক্ষা করার জন্য গুগল ডট কম ব্যবহার করা সাধারণ, তবুও এটি কয়েকটি দেশে এটি অবরুদ্ধ বলে মনে করার মতো বিষয় রয়েছে। ইয়াহু ডট কম বা মাইক্রোসফট ডট কমের মতো আরও "সরকার-বান্ধব" সংস্থাগুলির ডোমেনগুলির চেয়ে আরও ভাল পছন্দ হবে।
লরেন্ট

8
@ লরেন্ট: সর্বোত্তম বিকল্পটি হ'ল যে সার্ভারের ঠিকানা থেকে আপনি ডেটা অনুরোধ করতে যাচ্ছেন তা ব্যবহার করা। গুগল ডট কম এখানে একটি উদাহরণ।
ডিসপ্যাচমেন

7
এটি কি কেবল ডিএনএস লুকআপ করছে? যদি তা হয়, তবে কোনও ক্যাশেড ডিএনএসের ফলাফলের ফলে নেটওয়ার্কটি উপলব্ধ রয়েছে বলে ভ্রান্তভাবে বিশ্বাস করে যে ফাংশনটি আসতে পারে?
স্টিফেন মুর

2
@ অমর এটি একটি লুপে চালানো ওয়্যারলেস ডেটা গ্রাস করবে, আপনি এটি করতে চান না।
অর্থ-বিষয়গুলি

31

আমি বর্তমানে এই সাধারণ সিঙ্ক্রোনাস পদ্ধতিটি ব্যবহার করি যার জন্য আপনার প্রকল্প বা প্রতিনিধিদের জন্য অতিরিক্ত কোনও ফাইলের প্রয়োজন নেই।

আমদানি:

#import <SystemConfiguration/SCNetworkReachability.h>

এই পদ্ধতিটি তৈরি করুন:

+(bool)isNetworkAvailable
{
    SCNetworkReachabilityFlags flags;
    SCNetworkReachabilityRef address;
    address = SCNetworkReachabilityCreateWithName(NULL, "www.apple.com" );
    Boolean success = SCNetworkReachabilityGetFlags(address, &flags);
    CFRelease(address);

    bool canReach = success
                    && !(flags & kSCNetworkReachabilityFlagsConnectionRequired)
                    && (flags & kSCNetworkReachabilityFlagsReachable);

    return canReach;
}

তারপরে, আপনি যদি এটিতে রাখেন MyNetworkClass:

if( [MyNetworkClass isNetworkAvailable] )
{
   // do something networky.
}

আপনি যদি সিমুলেটারে পরীক্ষা করছেন তবে আপনার ম্যাকের ওয়াইফাইটি চালু এবং বন্ধ করুন, যেমনটি উপস্থিত হয় সিম্যুলেটর ফোন সেটিংসকে উপেক্ষা করবে।

হালনাগাদ:

  1. শেষ পর্যন্ত আমি মূল থ্রেডটি ব্লক করা এড়াতে একটি থ্রেড / অ্যাসিনক্রোনাস কলব্যাক ব্যবহার করেছি; এবং নিয়মিত পুনরায় পরীক্ষা করা যাতে আমি ক্যাশেড ফলাফলটি ব্যবহার করতে পারি - যদিও আপনার অকারণে ডেটা সংযোগগুলি খোলা রাখা উচিত।

  2. @ থাঙ্ক বর্ণিত হিসাবে ব্যবহার করার জন্য আরও ভাল ইউআরএল রয়েছে, যা অ্যাপল নিজেরাই ব্যবহার করে। http://cadinc.com/blog/why-your-apple-ios-7-device-wont-connect-to-the-wifi-network


1
ধন্যবাদ, এবং এই থ্রেডের বেশিরভাগের মতো: আপনার প্রকল্পে সিস্টেম কনফিগারেশন.ফ্রেমওয়ার্ক যুক্ত করতে ভুলবেন না।
eselk

1
অদ্ভুত, আমার এক্সকোড প্রকল্পে, আমাকে সিস্টেম কনফিগারেশন.ফ্রেমওয়ার্ক যুক্ত করতে হয়নি। আমি স্প্রিটকিট, ইউআইকিট, স্টোরকিট, ফাউন্ডেশন এবং কোরগ্রাফিক্স পেয়েছি, তবে সিস্টেম কনফিগারেশন নয় .... এখানে কি কিছু অন্তর্নিহিত অন্তর্ভুক্তি চলছে?
গিলসডিমিল্ডন

3
এটি আমার পক্ষে কাজ করেছে, কিন্তু যখন আমি ইন্টারনেট সংযোগ নেই এমন কোনও Wi-Fi নেটওয়ার্কের সাথে সংযুক্ত হয়ে যখন এটি চালিয়েছি, তখন এটি আমার ইউআইটিকে প্রায় 30 সেকেন্ডের জন্য লক করে রাখে। সেই পরিস্থিতিতে একটি অ্যাসিনক্রোনাস পদ্ধতির প্রয়োজন।
আর্লোমিডিয়া

2
www.apple.comবড় ওয়েবসাইট ... আরও ভাল বিকল্পটি হবেwww.google.com
ফাহিম পার্কার

2
চমৎকার উত্তর! একটি পরামর্শ: পরীক্ষার ইউআরএল, www.appleiphonecell.comসম্ভবত এই উদ্দেশ্যে কঠোরভাবে উপলব্ধ এবং সম্ভবত চীনতে অবরুদ্ধ নয়।
থঙ্ক

11

এটি সম্ভব এবং বাস্তবায়নটি শেষ করার সময় আপনি যদি এটিকে লক্ষ্য করেন তবে এটি খুব সহজ - খুব সহজ, যেহেতু কেবলমাত্র আপনার প্রয়োজনীয় দুটি আইটেম দুটি বুলিয়ান ভেরিয়েবল: ইন্টারনেট পুনঃব্যবহারযোগ্যতা এবং হোস্টের পুনঃব্যবহারযোগ্যতা (আপনার প্রায়শই এর মধ্যে একটিরও বেশি প্রয়োজন )। একবার আপনি যখন আপনার সহায়ক শ্রেণি সংযোগের স্থিতি নির্ধারণ করতে পারেন তখন তারা এই পদ্ধতিগুলি জানার জন্য প্রয়োজনীয় প্রয়োগের পুনরায় যত্ন নেবেন না।

উদাহরণ:

#import <Foundation/Foundation.h>

@class Reachability;

@interface ConnectionManager : NSObject {
    Reachability *internetReachable;
    Reachability *hostReachable;
}

@property BOOL internetActive;
@property BOOL hostActive;

- (void) checkNetworkStatus:(NSNotification *)notice;

@end

এবং .m ফাইল:

#import "ConnectionManager.h"
#import "Reachability.h"

@implementation ConnectionManager
@synthesize internetActive, hostActive;

-(id)init {
    self = [super init];
    if(self) {

    }
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];

    internetReachable = [[Reachability reachabilityForInternetConnection] retain];
    [internetReachable startNotifier];

    hostReachable = [[Reachability reachabilityWithHostName:@"www.apple.com"] retain];
    [hostReachable startNotifier];

    return self;
}

- (void) checkNetworkStatus:(NSNotification *)notice {
    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;

        }
    }

}

// If lower than SDK 5 : Otherwise, remove the observer as pleased.

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}

@end

6

কেউ এর আগে একটি সহজ, পুনরায় ব্যবহারযোগ্য উপায়ে সমাধান করেছেনDDGReachability

সম্পাদনা: বা tonymillion/Reachability


4

আমি কোডটি বের করেছি এবং একটি একক পদ্ধতিতে রেখেছি, আশা করি এটি অন্যকে সহায়তা করবে।

#import <SystemConfiguration/SystemConfiguration.h>

#import <netinet/in.h>
#import <netinet6/in6.h>

...

- (BOOL)isInternetReachable
{    
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;

    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)&zeroAddress);
    SCNetworkReachabilityFlags flags;

    if(reachability == NULL)
        return false;

    if (!(SCNetworkReachabilityGetFlags(reachability, &flags)))
        return false;

    if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
        // if target host is not reachable
        return false;


    BOOL isReachable = false;


    if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
    {
        // if target host is reachable and no connection is required
        //  then we'll assume (for now) that your on Wi-Fi
        isReachable = true;
    }


    if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||
         (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))
    {
        // ... and the connection is on-demand (or on-traffic) if the
        //     calling application is using the CFSocketStream or higher APIs

        if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)
        {
            // ... and no [user] intervention is needed
            isReachable = true;
        }
    }

    if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
    {
        // ... but WWAN connections are OK if the calling application
        //     is using the CFNetwork (CFSocketStream?) APIs.
        isReachable = true;
    }


    return isReachable;


}

[এ] আপনি কোথা থেকে এই কোডটি বের করেছেন? আপনি উত্স একটি লিঙ্ক পোস্ট করতে পারেন? [বি] আপনার নিষ্কাশন কাজের জন্য আপনাকে অনেক ধন্যবাদ! ঠিক যেটা আমার দরকার ছিল. আমি নিজেই এই কাজকর্ম সম্পাদন করতে চলেছিলাম।
তুলিল বাউরক

সুতরাং, দেখে মনে হচ্ছে এটি একমাত্র উত্তর যা কোনও রিমোট সার্ভার (গুলি) চেক করে না?
জ্যাস্পার

অন্যদের জন্য ম্যাকোজে এটি পরীক্ষা করার জন্য, নোট করুন যে kSCNetworkReachabilityFlagsIsWWAN OS_IPHONE ম্যাকোস নয় for
জেফকোপ

4

আমি স্বীকৃত উত্তরের দ্রুততম সংস্করণটি এখানে লিখছি , যদি কেউ এটি ব্যবহারযোগ্য মনে করে তবে কোডটি সুইফট 2-এ লেখা হয়েছে,

স্যাম্পলকোড থেকে প্রয়োজনীয় ফাইলগুলি ডাউনলোড করতে পারেন

আপনার প্রকল্পে যুক্ত Reachability.hএবং Reachability.mফাইল করুন ,

Bridging-Header.hআপনার প্রকল্পের জন্য যদি না থাকে তবে এখন ফাইল তৈরি করতে হবে ,

আপনার Bridging-Header.hফাইলের ভিতরে এই লাইনটি যুক্ত করুন:

#import "Reachability.h"

এখন ইন্টারনেট সংযোগের জন্য পরীক্ষা করার জন্য

static func isInternetAvailable() -> Bool {
    let networkReachability : Reachability = Reachability.reachabilityForInternetConnection()
    let networkStatus : NetworkStatus = networkReachability.currentReachabilityStatus()

    if networkStatus == NotReachable {
        print("No Internet")
        return false
    } else {
        print("Internet Available")
        return true
    }

}

3

আমি মনে করি এটি সাহায্য করতে পারে ..

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

if([AFNetworkReachabilityManager sharedManager].isReachable)
{
    NSLog(@"Network reachable");
}
else
{   
   NSLog(@"Network not reachable");
}

নেটওয়ার্ক ইন্টারফেসটি পরিবর্তন না করা এবং ইন্টারনেট সংযোগ নষ্ট হয়ে গেলে এটি কাজ করে না।
প্রতীক সোমাইয়া

2

আপনি যদি ইতিমধ্যে আপনার প্রকল্পে এএফ নেটওয়ার্কিং কনফিগার করেছেন তবে আপনি এটি ব্যবহার করে দেখতেও পারেন।

-(void)viewDidLoad{  // -- add connectivity notification --//
[[NSNotificationCenter defaultCenter ] addObserver:self selector:@selector(ReachabilityDidChangeNotification:) name:AFNetworkingReachabilityDidChangeNotification object:nil];}
-(void)ReachabilityDidChangeNotification:(NSNotification *)notify
{
// -- NSLog(@"Reachability changed: %@", AFStringFromNetworkReachabilityStatus(status));  -- //
NSDictionary *userInfo =[notif userInfo];
AFNetworkReachabilityStatus status= [[userInfo valueForKey:AFNetworkingReachabilityNotificationStatusItem] intValue];
switch (status)
{
    case AFNetworkReachabilityStatusReachableViaWWAN:
    case AFNetworkReachabilityStatusReachableViaWiFi:
        // -- Reachable -- //
// -- Do your stuff when internet connection is available -- //
        [self getLatestStuff];
        NSLog(@"Reachable");
        break;
    case AFNetworkReachabilityStatusNotReachable:
    default:
        // -- Not reachable -- //
        // -- Do your stuff for internet connection not available -- //
NSLog(@"Not Reachable");
        break;
}
}

1

পুনঃব্যবহারযোগ্যতা না ব্যবহার করে সুইফ্ট ব্যবহার করে সংযোগ পরীক্ষা করার জন্য এখানে একটি ভাল সমাধান solution আমি এটি এই ব্লগে খুঁজে পেয়েছি ।

আপনার প্রকল্পে একটি নতুন সুইফট ফাইল তৈরি করুন Network.swift(উদাহরণস্বরূপ)। এই ফাইলটি ভিতরে এই কোডটি আটকান:

import Foundation

public class Network {

    class func isConnectedToNetwork()->Bool{

        var Status:Bool = false
        let url = NSURL(string: "http://google.com/")
        let request = NSMutableURLRequest(URL: url!)
        request.HTTPMethod = "HEAD"
        request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
        request.timeoutInterval = 10.0

        var response: NSURLResponse?

        var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: nil) as NSData?

        if let httpResponse = response as? NSHTTPURLResponse {
            if httpResponse.statusCode == 200 {
                Status = true
            }
        }

        return Status
    }
}

তারপরে আপনি ব্যবহার করে আপনার প্রকল্পের যে কোনও জায়গায় সংযোগের জন্য পরীক্ষা করতে পারেন:

if Network.isConnectedToNetwork() == true {
    println("Internet connection OK")
} else {
    println("Internet connection FAILED")
}

0

সম্পাদনা: এটি নেটওয়ার্ক ইউআরএলগুলির জন্য কাজ করবে না (মন্তব্য দেখুন)

আইওএস 5 হিসাবে, একটি নতুন এনএসআরএল উদাহরণ পদ্ধতি রয়েছে:

- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error

আপনি যে ওয়েবসাইটটির প্রতি যত্নশীল সেটিকে এটি নির্দেশ করুন বা এটি Apple.com- এ দেখান; আমি মনে করি ইন্টারনেট আপনার ডিভাইসে কাজ করছে কিনা তা দেখার জন্য এটি নতুন এক-লাইন কল।


আসলে আমার নিজের পরীক্ষায় এটি সর্বদা মিথ্যা প্রত্যাবর্তন করে। ডক্সটি জানিয়েছে যে এটি 4.x এর ক্ষেত্রে তবে 5+ তে এটি কাজ করা উচিত। ওয়াইএমএমভি
এসজি 1

এটি আপনি যে পরিস্থিতিতে সন্ধান করছেন তাতে কাজ করে না বলে মনে হয়। স্ট্যাকওভারফ্লো.com
হাইনলাইন

7
এটি ইন্টারনেট ইউআরএল নয়, ফাইল ইউআরএল জন্য ব্যবহৃত হয়।
ভিক্টর বোগদান

0

আমি উপলব্ধ ইন্টারনেট চেকিং বিকল্পগুলির সাথেও খুশি ছিলাম না (এটি নেটিভ এপিআই নয় কেন?!?!)

আমার নিজের সমস্যাটি ছিল 100% প্যাকেটের ক্ষতির সাথে - যখন কোনও ডিভাইস রাউটারের সাথে সংযুক্ত থাকে তবে রাউটারটি ইন্টারনেটে সংযুক্ত থাকে না। পুনরূদ্ধারযোগ্যতা এবং অন্যান্যরা যুগে যুগে স্থির থাকবে। আমি একটি অ্যাসিঞ্চ সময়-আউট যোগ করে এটি মোকাবেলা করার জন্য একটি ইউটিলিটি সিঙ্গলটন ক্লাস তৈরি করেছি। এটি আমার অ্যাপ্লিকেশনটিতে দুর্দান্ত কাজ করে। আশা করি এটা সাহায্য করবে. গিথুবের লিঙ্কটি এখানে:

https://github.com/fareast555/TFInternetChecker


0

(আইওএস) এক্সকোড 8.2, সুইফট 3.0 এ ইন্টারনেট সংযোগের উপলভ্যতা পরীক্ষা করা হচ্ছে

নেটওয়ার্ক উপলব্ধতা যাচাই করার জন্য এটি সহজ পদ্ধতি। আমি এটি সুইফট ২.০ তে অনুবাদ করতে পেরেছি এবং এখানে চূড়ান্ত কোড। বিদ্যমান অ্যাপল রিচ্যাবিলিটি ক্লাস এবং অন্যান্য তৃতীয় পক্ষের লাইব্রেরিগুলি সুইফটে অনুবাদ করা খুব জটিল বলে মনে হয়েছিল।

এটি 3 জি এবং ওয়াইফাই উভয় সংযোগের জন্য কাজ করে।

আপনার প্রকল্প নির্মাতাকে "SystemConfigration.framework" যুক্ত করতে ভুলবেন না।

//Create new swift class file Reachability in your project.

import SystemConfiguration

public class Reachability {
class func isConnectedToNetwork() -> Bool {
    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)
    let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
            SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
        }
    }
    var flags = SCNetworkReachabilityFlags()
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability! , &flags) {
        return false
    }
    let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
    let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
    return (isReachable && !needsConnection)
   }
}

// Check network connectivity from anywhere in project by using this code.

if Reachability.isConnectedToNetwork() == true {
     print("Internet connection OK")
} else {
 print("Internet connection FAILED")
}

এক্সকোড সংস্করণ 7.2 (7C68) সহ, এই কোডটিতে সংকলক ত্রুটি রয়েছে
ড্যানিয়েল

@ ড্যানিয়েল, পয়েন্টিং ইস্যু করার জন্য ধন্যবাদ, এটি অনিরাপদ পয়েন্টারগুলির কারণে, যেমন সুইফট 2 / এক্সকোড সেখানে সিনট্যাক্স আপডেট করছে, আমাদের তাদের অনুসরণ করা উচিত। আমি একই কোড আপডেট করেছি। ty;)
ভিজে আওহাদ

আপনি যদি কোনও Wi-Fi এর সাথে সংযুক্ত থাকেন তবে ইন্টারনেটের সাথে সংযোগ স্থাপন করতে সক্ষম না হন (একটি গুগল পৃষ্ঠা খুলুন) তবুও এটি পৌঁছনীয়ের জন্য সত্য ফিরে আসে। এটা ভুল.
আর্িল্ডো জুনিয়র

0

অ্যাপল এর পুনঃব্যবস্থাপনার জন্য প্রতিস্থাপন সুইজারনে ক্লোজার দিয়ে পুনরায় লিখিত , টেনমিলিয়ন দ্বারা অনুপ্রাণিত: https://github.com/ashleymills/Reachability.swift

  1. Reachability.swiftআপনার প্রকল্পে ফাইলটি ফেলে দিন । বিকল্পভাবে, কোকোপডস বা কার্থেজ ব্যবহার করুন - প্রকল্পটির README এর ইনস্টলেশন বিভাগটি দেখুন ।

  2. নেটওয়ার্ক সংযোগ সম্পর্কে বিজ্ঞপ্তিগুলি পান:

    //declare this property where it won't go out of scope relative to your listener
    let reachability = Reachability()!
    
    reachability.whenReachable = { reachability in
        if reachability.isReachableViaWiFi {
            print("Reachable via WiFi")
        } else {
            print("Reachable via Cellular")
        }
    }
    
    reachability.whenUnreachable = { _ in
        print("Not reachable")
    }
    
    do {
        try reachability.startNotifier()
    } catch {
        print("Unable to start notifier")
    }

    এবং বিজ্ঞপ্তি বন্ধ করার জন্য

    reachability.stopNotifier()

0

Alamofire

আপনি যদি ইতিমধ্যে আলমোফায়ার ব্যবহার করেন সমস্ত জন্য তবে এটি থেকে আপনি কী বেনিফিট করতে পারেন তা এখানে।

আপনি আপনার অ্যাপ্লিকেশনটিতে নিম্নলিখিত ক্লাস যুক্ত করতে পারেন এবং MNNetworkUtils.main.isConnected()এটির সাথে সংযুক্ত আছে কি না তা সম্পর্কে একটি বুলিয়ান পেতে কল করতে পারেন।

#import Alamofire

class MNNetworkUtils {
  static let main = MNNetworkUtils()
  init() {
    manager = NetworkReachabilityManager(host: "google.com")
    listenForReachability()
  }

  private let manager: NetworkReachabilityManager?
  private var reachable: Bool = false
  private func listenForReachability() {
    self.manager?.listener = { [unowned self] status in
      switch status {
      case .notReachable:
        self.reachable = false
      case .reachable(_), .unknown:
        self.reachable = true
      }
    }
    self.manager?.startListening()
  }

  func isConnected() -> Bool {
    return reachable
  }
}

এটি একটি সিঙ্গলটন ক্লাস। প্রতিবার, যখন ব্যবহারকারী নেটওয়ার্কটি সংযুক্ত বা সংযোগ বিচ্ছিন্ন করে, তখন এটি self.reachableসত্য / মিথ্যাতে সঠিকভাবে ওভাররাইড হবে , কারণ আমরা NetworkReachabilityManagerসিঙ্গলটন ইনিশিয়ালাইজেশন অন শুনতে শুরু করি ।

এছাড়াও পুনঃব্যবহারযোগ্যতা নিরীক্ষণ করার জন্য, আপনাকে একটি হোস্ট সরবরাহ করা প্রয়োজন, বর্তমানে আমি প্রয়োজন google.comবোধ করে অন্য কোনও হোস্ট বা আপনার কোনও একটিতে নির্দ্বিধায় ব্যবহার করছি ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.