今天在群里发现有个同学在问一个问题,如图: 这位同学是想知道如何快速又方便的可以随时切换Release 与 Test服务器域名,方便APP的测试。正好,我们也有相同的场景。那么我们是怎么做的呢?

1、创建一个网络请求Host管理的工具类,我们暂且叫它 CNChangeHostManager 。并且定义Host属性与初始化方法。

@interface CNChangeHostManager : NSObject
@property (nonatomic, copy) NSString *kCNPassPortHost;
+(instancetype)sharedChangeHostObject;

2、定义枚举配置,来区分Host环境

//PassPort
typedef NS_ENUM(NSUInteger, CNPassPortHostType) {
    CNPassPortHostTypeRelease,//正式
    CNPassPortHostTypeTest,//测试
    CNPassPortHostTypeBeta,//预发布

3、实现本地缓存配置与读取配置的方法

//保存配置到沙盒
+ (void)savePassPortHostType:(CNPassPortHostType)passPortHostType
    NSUserDefaults *userdefault = [NSUserDefaults standardUserDefaults];
    [userdefault setInteger:passPortHostType forKey:@"passPortHostType"];
    [userdefault synchronize];
//从沙盒中读取配置
+ (CNPassPortHostType)passPortHostType
    return [[NSUserDefaults standardUserDefaults] integerForKey:@"passPortHostType"];

4、设置单例初始化方法,并设置Host默认值

+ (instancetype)sharedChangeHostObject{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        changeURLObject = [[super allocWithZone:NULL] init];
        [changeURLObject defaultHost];
    return changeURLObject;
-(void)defaultHost
    [self passPortHostWithPassPortHostType:[CNChangeHostManager passPortHostType]];

5、注册通知监听,用于接收改变Host的通知

//注册通知监听,用于接收改变Host
- (instancetype)init{
    if (self = [super init]) {
        //注册通知监听,用于接收改变Host
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changePassPortHost:) name:ChangePassPortHostNotification object:nil];
    return self;

6、实现监听通知方法,读取本地缓存的配置。

- (void)changePassPortHost:(NSNotification *)notification
    [self passPortHostWithPassPortHostType:[CNChangeHostManager passPortHostType]];
-(void)passPortHostWithPassPortHostType:(CNPassPortHostType)passPortHostType
    switch (passPortHostType) {
        case CNPassPortHostTypeRelease:
            self.kCNPassPortHost = @"https://passport.com";
            break;
        case CNPassPortHostTypeTest:
            self.kCNPassPortHost = @"https://test-passport.com";
            break;
        case CNPassPortHostTypeBeta:
            self.kCNPassPortHost = @"https://pre-passport.com";
            break;
        default:
            self.kCNPassPortHost = @"https://passport.com";
            break;

7、设置中修改Host 方法

switch (index) {
    case 0:
        [CNChangeHostManager savePassPortHostType:(CNPassPortHostTypeRelease)];
        break;
    case 1:
        [CNChangeHostManager savePassPortHostType:(CNPassPortHostTypeTest)];
        break;
    case 2:
        [CNChangeHostManager savePassPortHostType:(CNPassPortHostTypeBeta)];
        break;
    default:
        break;
[[NSNotificationCenter defaultCenter] postNotificationName:ChangePassPortHostNotification object:nil];

8、Host 读取方式

[NSString stringWithFormat:@"/login",[CNChangeHostManager sharedChangeHostObject].kCNPassPortHost]

这样就可以随时切换Host环境配置了。

分类:
iOS
标签: