探索 Shiply 远程配置在 iOS 和 Android App 中的使用

328 阅读17分钟

一、  远程配置在软件开发中解决了哪些痛点?

在移动开发的诸多场景中,远程配置开关都发挥着不可或缺的作用。无论是新功能上线的谨慎试探,还是旧功能优化的灵活调整;无论是针对特定用户的精准营销,还是应对突发状况的应急处理,配置开关都能轻松搞定。它就像一把“万能钥匙”,随时为开发者打开解决问题的大门,让App在复杂多变的市场环境中游刃有余,始终保持着最佳的性能和用户体验。

1.1 新功能上线的“安全阀门”

“又要发布新功能了,可万一线上出问题咋办?每次都提心吊胆的。”这是许多开发者的心声。以往,新功能一上线,就像把一颗未经检验的“炸弹”扔进用户池,一旦出错,满盘皆输。但现在,远程配置的加入,让这一切变得从容不迫。通过设置功能总开关,开发者可以先将新功能“潜伏”在App中,静待最佳时机。一旦发现新功能存在漏洞或异常,只需轻轻一按远程开关,就能瞬间将其“封印”,避免问题蔓延,给用户带来糟糕体验。这就好比给新功能套上了一层“防护罩”,让开发者在创新的道路上大胆前行,无惧风险。

1.2 交互方案的“试金石”

在设计App时,常常面临两种交互方案的抉择困境:“到底哪种方案更受用户青睐呢?”以往,开发者只能凭借经验和少量用户反馈来“盲选”,结果往往不尽人意。如今,借助远程配置,开发者可以将两种方案同时上线,就像在App里搭建了两个“试验田”。通过远程配置,精准地将不同用户群体导向不同的交互方案,实时收集用户的行为数据、留存率、转化率等关键指标。经过一段时间的“实战演练”,数据会清晰地告诉开发者哪一方更胜一筹。如此一来,决策不再依赖主观臆断,而是基于真实、可靠的数据反馈,让App的交互设计更加贴合用户心意,提升整体使用体验。

1.3 老旧设备的“性能守护者”

随着App功能的不断丰富,一些老旧设备开始力不从心,卡顿、闪退等问题频发,严重影响用户体验。以往,开发者只能眼睁睁看着这部分用户流失,或者花费大量精力去优化代码,却收效甚微。远程配置的出现,为老旧设备带来了福音。开发者可以根据设备的性能参数,如CPU型号、内存大小等,通过远程配置动态关闭一些对性能要求较高的功能模块。比如,对于配置较低的设备,关闭高清视频播放、复杂的动画效果等功能,让App在老旧设备上也能流畅运行,宛如给这些设备量身定制了一套“轻量化”方案,延长了设备的使用寿命,也留住了宝贵的用户群体。

1.4 复杂模块的“精准调优器”

对于App中的复杂模块,如播放器、编辑器、端智能模型等,参数调优一直是个难题。以往,开发者需要依赖大量的线下测试和人工经验来调整参数,但这种方式往往难以精准把握线上用户的实际使用场景和需求。远程配置的加入,让开发者能够实时查看大盘监控数据,根据用户的行为习惯、网络环境、使用频率等多维度信息,精准地下发参数进行调优。比如,当发现用户在弱网络环境下频繁使用播放器时,可以远程调整视频缓存策略、分辨率切换逻辑等参数,确保用户在不同网络条件下都能获得最佳的播放体验。这种基于数据驱动的精准调优,让复杂模块的性能和功能表现更加出色,有效提升了App的核心竞争力。

1.5 提审与部署的“同步加速器”

App开发过程中,常常遇到这样的尴尬局面:App客户端已经开发完成,迫不及待地等着上线,可后台服务却还没部署到位。只能干等着后台上线,白白浪费宝贵的上线窗口期。远程配置巧妙地化解了这一难题。开发者可以先将App提交审核,同时在后台通过远程配置设置好相关的功能开关和参数。一旦后台服务部署完成,只需轻轻一点,远程配置就能将功能“激活”,让App瞬间具备完整的功能。这样一来,客户端和后台的部署不再相互掣肘,大大缩短了上线周期,让App能够更快地触达用户,抢占市场先机。

1.6 抽样率调整的“即时响应器”

在进行A/B测试或功能灰度发布时,抽样率的调整至关重要。以往,每次调整抽样率都需要找到后台开发人员,修改代码,重新部署,费时费力。远程配置的出现,让抽样率调整变得轻而易举。开发者只需在远程配置平台上简单操作,就能实时调整抽样率,无需繁琐的代码修改和部署流程。无论是想扩大灰度范围,还是缩小测试群体,都能瞬间实现,让测试和优化工作更加灵活高效,能够快速响应市场变化和用户反馈,及时调整策略。

1.7 黑白名单的“精准管控器”

在某些特殊场景下,开发者需要对用户访问进行精准管控。比如,某些内测功能只希望特定用户群体体验,或者要屏蔽一些恶意用户对特定功能的滥用。以往,这种管控往往需要在客户端或后台进行复杂的逻辑判断和权限设置,操作繁琐且容易出错。远程配置让这一切变得简单明了。开发者可以轻松地在远程配置平台上设置黑白名单,针对特定用户ID、设备ID等下发访问控制指令。这些指令会实时同步到客户端,精准地控制用户的访问权限。无论是内测邀请,还是恶意用户封禁,都能做到精准无误,有效保障了App的功能安全和用户体验。

1.8 特定时间功能的“定时开关”

有些功能只在特定时间才有意义,比如限时抢购、节日专属活动等。以往,开发者需要在代码中嵌入复杂的定时逻辑,到了指定时间手动触发或关闭功能,稍有不慎就会出现功能提前开启或延迟关闭的情况,引发用户投诉。远程配置的定时功能让这一切迎刃而解。开发者可以提前在远程配置平台上设置好功能的开启和关闭时间,到了指定时刻,远程配置自动触发开关,精准控制功能的展示和隐藏。这样一来,不仅避免了人工操作的失误,还能让功能的上线和下线更加符合业务节奏,给用户带来恰到好处的惊喜体验。

一、  远程配置在软件开发中解决了哪些痛点?

在移动开发的诸多场景中,远程配置开关都发挥着不可或缺的作用。无论是新功能上线的谨慎试探,还是旧功能优化的灵活调整;无论是针对特定用户的精准营销,还是应对突发状况的应急处理,配置开关都能轻松搞定。它就像一把“万能钥匙”,随时为开发者打开解决问题的大门,让App在复杂多变的市场环境中游刃有余,始终保持着最佳的性能和用户体验。

1.1 新功能上线的“安全阀门”

“又要发布新功能了,可万一线上出问题咋办?每次都提心吊胆的。”这是许多开发者的心声。以往,新功能一上线,就像把一颗未经检验的“炸弹”扔进用户池,一旦出错,满盘皆输。但现在,远程配置的加入,让这一切变得从容不迫。通过设置功能总开关,开发者可以先将新功能“潜伏”在App中,静待最佳时机。一旦发现新功能存在漏洞或异常,只需轻轻一按远程开关,就能瞬间将其“封印”,避免问题蔓延,给用户带来糟糕体验。这就好比给新功能套上了一层“防护罩”,让开发者在创新的道路上大胆前行,无惧风险。

1.2 交互方案的“试金石”

在设计App时,常常面临两种交互方案的抉择困境:“到底哪种方案更受用户青睐呢?”以往,开发者只能凭借经验和少量用户反馈来“盲选”,结果往往不尽人意。如今,借助远程配置,开发者可以将两种方案同时上线,就像在App里搭建了两个“试验田”。通过远程配置,精准地将不同用户群体导向不同的交互方案,实时收集用户的行为数据、留存率、转化率等关键指标。经过一段时间的“实战演练”,数据会清晰地告诉开发者哪一方更胜一筹。如此一来,决策不再依赖主观臆断,而是基于真实、可靠的数据反馈,让App的交互设计更加贴合用户心意,提升整体使用体验。

1.3 老旧设备的“性能守护者”

随着App功能的不断丰富,一些老旧设备开始力不从心,卡顿、闪退等问题频发,严重影响用户体验。以往,开发者只能眼睁睁看着这部分用户流失,或者花费大量精力去优化代码,却收效甚微。远程配置的出现,为老旧设备带来了福音。开发者可以根据设备的性能参数,如CPU型号、内存大小等,通过远程配置动态关闭一些对性能要求较高的功能模块。比如,对于配置较低的设备,关闭高清视频播放、复杂的动画效果等功能,让App在老旧设备上也能流畅运行,宛如给这些设备量身定制了一套“轻量化”方案,延长了设备的使用寿命,也留住了宝贵的用户群体。

1.4 复杂模块的“精准调优器”

对于App中的复杂模块,如播放器、编辑器、端智能模型等,参数调优一直是个难题。以往,开发者需要依赖大量的线下测试和人工经验来调整参数,但这种方式往往难以精准把握线上用户的实际使用场景和需求。远程配置的加入,让开发者能够实时查看大盘监控数据,根据用户的行为习惯、网络环境、使用频率等多维度信息,精准地下发参数进行调优。比如,当发现用户在弱网络环境下频繁使用播放器时,可以远程调整视频缓存策略、分辨率切换逻辑等参数,确保用户在不同网络条件下都能获得最佳的播放体验。这种基于数据驱动的精准调优,让复杂模块的性能和功能表现更加出色,有效提升了App的核心竞争力。

1.5 提审与部署的“同步加速器”

App开发过程中,常常遇到这样的尴尬局面:App客户端已经开发完成,迫不及待地等着上线,可后台服务却还没部署到位。只能干等着后台上线,白白浪费宝贵的上线窗口期。远程配置巧妙地化解了这一难题。开发者可以先将App提交审核,同时在后台通过远程配置设置好相关的功能开关和参数。一旦后台服务部署完成,只需轻轻一点,远程配置就能将功能“激活”,让App瞬间具备完整的功能。这样一来,客户端和后台的部署不再相互掣肘,大大缩短了上线周期,让App能够更快地触达用户,抢占市场先机。

1.6 抽样率调整的“即时响应器”

在进行A/B测试或功能灰度发布时,抽样率的调整至关重要。以往,每次调整抽样率都需要找到后台开发人员,修改代码,重新部署,费时费力。远程配置的出现,让抽样率调整变得轻而易举。开发者只需在远程配置平台上简单操作,就能实时调整抽样率,无需繁琐的代码修改和部署流程。无论是想扩大灰度范围,还是缩小测试群体,都能瞬间实现,让测试和优化工作更加灵活高效,能够快速响应市场变化和用户反馈,及时调整策略。

1.7 黑白名单的“精准管控器”

在某些特殊场景下,开发者需要对用户访问进行精准管控。比如,某些内测功能只希望特定用户群体体验,或者要屏蔽一些恶意用户对特定功能的滥用。以往,这种管控往往需要在客户端或后台进行复杂的逻辑判断和权限设置,操作繁琐且容易出错。远程配置让这一切变得简单明了。开发者可以轻松地在远程配置平台上设置黑白名单,针对特定用户ID、设备ID等下发访问控制指令。这些指令会实时同步到客户端,精准地控制用户的访问权限。无论是内测邀请,还是恶意用户封禁,都能做到精准无误,有效保障了App的功能安全和用户体验。

1.8 特定时间功能的“定时开关”

有些功能只在特定时间才有意义,比如限时抢购、节日专属活动等。以往,开发者需要在代码中嵌入复杂的定时逻辑,到了指定时间手动触发或关闭功能,稍有不慎就会出现功能提前开启或延迟关闭的情况,引发用户投诉。远程配置的定时功能让这一切迎刃而解。开发者可以提前在远程配置平台上设置好功能的开启和关闭时间,到了指定时刻,远程配置自动触发开关,精准控制功能的展示和隐藏。这样一来,不仅避免了人工操作的失误,还能让功能的上线和下线更加符合业务节奏,给用户带来恰到好处的惊喜体验。

二、  通过 Shiply 使用远程配置

市面上的大部分远程配置服务,都只能提供简单的开关值、配置值下发,而缺少高阶能力。例如:配置发布的测试、发布、审批流程;能够灰度放量;自定义下发条件;自定义用户群体等等。

腾讯推出的 Shiply 远程配置,结合实际发布过程中的痛点,提供了很多实用功能,使得配置的发布过程更加可控,是一个强大的远程配置发布平台。

Shiply 的配置在使用上和其他配置平台有着明显差异,像umeng、firebase是所有配置内容一个版本,每次都改都对所有配置内容生成一个新的版本。而 Shiply 是以每个配置项的发布任务承载发布变更的,这意味着 Shiply 的发布粒度可以控制的非常小,小到每次变更都只针对这个配置本身,并且可以支持配置项级别的灰度、放量、回滚等等。同时是支持增量拉取的,在拉取效率、拉取成功率上有明显的优势。

2.0 快速接入 SDK

2.0.1 查找最新版本 iOS SDK

可以在SDK 版本标签查询最新版本,截至目前,最新的版本是 1.3.5-rc.3 版本。

image.png

2.0.2 集成 iOS SDK

在 podfile 中声明依赖,然后执行 pod install 即可安装成功

source 'https://cdn.cocoapods.org/'pod 'ShiplyRDelivery', '~> 1.3.5-rc.3'

在全局功能与设置-项目设置,复制出APP ID和APP KEY

2.0.2 集成 iOS SDK

在 podfile 中声明依赖,然后执行 pod install 即可安装成功

source 'https://cdn.cocoapods.org/'pod 'ShiplyRDelivery', '~> 1.3.5-rc.3'

在全局功能与设置-项目设置,复制出APP ID和APP KEY

image.png

#import <UIKit/UIDevice.h>
#import "sys/utsname.h"

#import <ShiplyRDelivery/RDeliveryJsonModelImpl.h>
#import <ShiplyRDelivery/RDNetworkImpl.h>
#import <ShiplyRDelivery/RDLoggerImpl.h>
#import <ShiplyRDelivery/RDMMKVFactoryImpl.h>

// 依赖注入,我没有替换官方实现的诉求,直接用默认实现即可
RDeliveryDepends *depends = [RDeliveryDepends new];
depends.httpImpl = [RDNetworkImpl sharedInstance];
depends.logImpl = [RDLoggerImpl sharedInstance];
depends.kvImpl = [RDMMKVFactoryImpl sharedInstance];
depends.jsonModelImpl = [RDeliveryJsonModelImpl sharedInstance];

//初始化SDK设置
RDeliverySDKSettings *setting = [RDeliverySDKSettings settingWithAppId:@"29c5720503"                             appKey:@"xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"                       guid:@"your_app_user_id"                                        depends:depends];
setting.qimei = @"my_app_device_id";
setting.envId = RDeliveryReleaseEnvId; // 正式环境
setting.updateMode = RDCONFIG_UPDATE_MODE_APP_START | RDCONFIG_UPDATE_MODE_SCHEDUAL;
struct utsname systemInfo;
uname(&systemInfo);
NSString *deviceType = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
setting.deviceType = deviceType;
setting.systemVersion = [UIDevice currentDevice].systemVersion;

RDeliverySDK *rdeliverySDK = [RDeliverySDK createSDKWithSettings:setting];

2.1 新建配置

image.png

2.1.1【新建配置】填写基本信息

这里除了【配置Key】和【配置值模板】是选择后确定的,其他都能再改。

image.png

2.1.2 新建配置后的列表

image.png

2.2 新建发布任务

新建完配置项后,现在还是无法拉取到配置内容的。因为这个平台的远程配置内容,是承载在发布任务上的,这也是和其他平台的差异之一。所以需要新建发布任务,设置下发条件,填写下发内容等等。

image.png

2.2.1 填写配置内容

image.png

2.2.2 设置放量策略

image.png

2.2.3 创建任务后的列表

创建完发布任务之后,现在仍然无法拉取到配置内容,因为此时的任务状态需要去扭转成体验中,才能进行测试。

image.png

2.3 进入任务详情,进行测试体验

image.png

2.3.1 添加体验人员,用于验证配置下发

处于【测试体验】状态的任务,线上用户是拉不到的,而测试人员可以通过加白名单来测试配置拉取。

image.png

image.png

2.4 审批并且发布

在本地测试,已经能够拉取到发布内容了,现在可以将这个任务发布,经过审批之后,线上用户就能拉取到了。

image.png

2.4.1 正式发布任务后的列表

image.png

2.5 复制任务到 Android 平台

可以通过复制任务,将已有的下发内容复制成一个新的任务,通过修改下发条件为:应用包含于 Android 平台,实现对 Android 平台的下发

image.png

image.png

通过以上步骤,我们完成了对 iOS、Android 平台下发远程配置的操作。

三、  总结

腾讯 Shiply 的远程配置功能,在发布粒度控制、灰度策略、下发条件、版本管理、权限与审批管理、增量拉取等层面有着特有的优势,相比市面上其他同类产品,Shiply 远程配置的功能要强大得多,也更符合中大型 App 的复杂的开发部署和协作方式。但是初次使用,会有一点学习成本,相信通过阅读本文,你也可以轻松集成 SDK 并创建你的第一个远程配置。