应用内环境切换
需求说明
- 可以随意切换环境状态
- 支持自定义环境地址
- 支持关闭切换环境功能
- 恢复默认设置
实现效果
核心实现
GPAPIManager.h
#import <Foundation/Foundation.h>
#define HOST_TYPE 0
#if HOST_TYPE == 0
#define kIsProduction @"0" // 0 开发环境 1生产环境 可以用于极光推送等
#elif HOST_TYPE == 1
#define kIsProduction @"1"
#elif HOST_TYPE == 2
#define kIsProduction @"1"
#endif
typedef NS_ENUM(NSInteger, GPHostType) {
GPHostTypeDev = 0, // 开发
GPHostTypeGray, // 灰度
GPHostTypeRelease, // 正式
GPHostTypeDIY // 自定义
};
#define kHostUrl [GPAPIManager hostUrl]
NS_ASSUME_NONNULL_BEGIN
@interface GPAPIManager : NSObject
// 地址数组
+ (NSArray *)localServicePrefixs;
+ (NSArray *)localServiceTitlePrefixs;
// 环境地址
+ (NSString *)hostUrl;
// 环境地址类型
+ (void)saveHostType:(GPHostType)type;
// 环境地址类型
+ (GPHostType)hostType;
// 保存自定义地址
+ (void)saveDiyHostUrl:(NSString *)hostUrl;
// 获取自定义地址
+ (NSString *)diyHostUrl;
// 自定义模式开关(开启定义后,切换请求地址才能使用)
+ (void)saveEnabled:(BOOL)on;
// 是否开启自定义(开启定义后,切换请求地址才能使用)
+ (BOOL)isEnabled;
// 恢复默认设置(关闭自定义功能)
+ (void)resetData;
@end
NS_ASSUME_NONNULL_END
GPAPIManager.m
#import "GPAPIManager.h"
static NSString* const kHostTypeKey = @"hostTypeKey";
static NSString* const kDiyUrlKey = @"diyUrlKey";
static NSString* const kEnabled = @"kEnabled";
@interface GPAPIManager ()
@end
@implementation GPAPIManager
+ (NSArray *)localServicePrefixs{
return @[
@"dev.api.com",
@"test.api.com",
@"api.com",
];
}
+ (NSArray *)localServiceTitlePrefixs{
return @[
@"测试地址",
@"预发地址",
@"正式地址",
@"自定义地址"
];
}
+ (NSString *)hostUrl {
NSArray *localHostArray = [self localServicePrefixs];
if (HOST_TYPE == 2) { //正式环境
return localHostArray[GPHostTypeRelease];
}else{
NSInteger type = [self hostType];
if (type == GPHostTypeDev) {
return localHostArray[0];
} else if (type == GPHostTypeGray) {
return localHostArray[1];
} else if (type == GPHostTypeRelease) {
return localHostArray[2];
} else if (type == GPHostTypeDIY) {
return [self diyHostUrl];
}
}
return @"";
}
+ (void)saveHostType:(GPHostType)type {
[[NSUserDefaults standardUserDefaults] setInteger:type forKey:kHostTypeKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
+ (GPHostType)hostType {
// 是否开启自定义切换
if ([self isEnabled]) {
return [[NSUserDefaults standardUserDefaults] integerForKey:kHostTypeKey];
}
return HOST_TYPE;
}
// 保存自定义地址
+ (void)saveDiyHostUrl:(NSString *)hostUrl {
[[NSUserDefaults standardUserDefaults] setObject:hostUrl forKey:kDiyUrlKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
// 获取自定义地址
+ (NSString *)diyHostUrl {
return [[NSUserDefaults standardUserDefaults] objectForKey:kDiyUrlKey];
}
// 恢复默认设置
+ (void)resetData {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kEnabled];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kHostTypeKey];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kDiyUrlKey];
}
// 自定义模式开关
+ (void)saveEnabled:(BOOL)on {
[[NSUserDefaults standardUserDefaults] setBool:on forKey:kEnabled];
[[NSUserDefaults standardUserDefaults] synchronize];
}
// 是否开启自定义
+ (BOOL)isEnabled {
return [[NSUserDefaults standardUserDefaults] boolForKey:kEnabled];
}
@end
如何使用
// 上线前切换至正式环境 不显示接口切换入口,不允许切换接口操作
if ([self isRelease]) {
return;
}
if (HOST_TYPE == 2) {
// 关闭环境,自定义参数
[GPAPIManager saveEnabled:NO];
return YES;
}else{
[GPAPIManager saveEnabled:YES];
return NO;
}