美文网首页
手机上根据不同地域选择不同的服务器的几种思路

手机上根据不同地域选择不同的服务器的几种思路

作者: Miss_DQ | 来源:发表于2016-10-11 14:45 被阅读379次

今天,接手项目的时候。有个需求,根据用户的位置不同,进行切换不同的服务器,以保证数据传输的质量。在大型网游的话,很有必要根据不同服务器的承载能力进行匹配用户最佳的服务器。至于我这app上的项目的话,区分的就是国内和国外的服务器。

一、根据IP进行判断当前的位置

我觉得这是一个比较稳定的判断方式,因为能准确知道用户当前位置的一个是app抓取的定位信息,另外一个就是你的IP地址。然而位置服务不是所有用户都会打开的。所以这个方法比较可行。
至于这个方法,首先要获取当前手机的IP地址,这中间有涉及到当前的网络格式,当然在我们国内大部分都是ipv4,在国外ipv6也是比较多的。所以流程大致这样:判断网络格式(是否是ipv6)->得出网络地址->调用接口去查询当前所在的区域。

二、根据系统的Region来处理

这个方法是通过获取系统的Region来获取,不过该region是用户自己设置的,并不是根据地理位置实时改变的。

 //测试系统Region
    NSLocale *locale = [NSLocale currentLocale];
    NSLog(@"%@",[locale objectForKey:NSLocaleCountryCode]);//US:美国   CN:中国

三、根据定位来处理

如果用户打开了定位服务,这就非常好办了,比如你是一个天气或者导航,相信用户都会给你开放location。使用定位的流程就是:获取系统授权->打开定位服务->位置反编码获取当前区域

#import <CoreLocation/CoreLocation.h>
@property (nonatomic,strong)CLLocationManager * manager;
-(CLLocationManager *)manager
{
    if (_manager == nil)
    {
        _manager = [CLLocationManager new];
        
        //异步返回用户当前位置
        _manager.delegate = self;
        _manager.distanceFilter = kCLLocationAccuracyThreeKilometers;
        //定位效果
        _manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
        
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
        {
            [_manager requestWhenInUseAuthorization];
        }
    }
    return _manager;
}
#pragma mark - 定位代理
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
    NSLog(@"定位成功...");
    CLLocation *location = locations[0];
    [self.manager stopUpdatingLocation];
    
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        CLPlacemark * mark = placemarks[0];
        [PublicFunction saveCity:mark.locality];
    }];
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    NSLog(@"定位失败...");
}

同时,注意下info.plist中的定位的配置。

四、根据国际化来处理

这个方法是根据用户的使用习惯来处理的,但是很不靠谱。因为中国人也有很多使用英文语言的,这样国内的用户就访问了国外的服务器了。但是这种方法是最简单的...黑黑

 NSArray *languages = [NSLocale preferredLanguages];
 NSString *currentLanguage = [languages objectAtIndex:0];
 NSLog(@"%@" , currentLanguage);//注意中文的一些简体和繁体

相关文章

网友评论

      本文标题:手机上根据不同地域选择不同的服务器的几种思路

      本文链接:https://www.haomeiwen.com/subject/prhbyttx.html