我们为iOS、Android和Flutter应用程序提供预先构建的sdk,以便在移动应用程序中快速简单地实现OTA (over -air)服务,但有时这还不够。对于这些情况,我们提供了一个公共API,可以构建包、管理版本,并从应用程序发出请求以获得最新的翻译包。
在本文中,您将学习如何使用OTA API端点.我们将使用邮递员来发送HTTP请求并探索响应,当然你也可以使用我们的API游乐场或任何其他工具。
概述
将您的应用程序与Lokalise OTA服务集成包括三个步骤:
- 代码库集成-不是OTA本身的一部分,而是持续开发和本地化工作流程的基础。欲了解更多信息,请查看这个关于GitHub集成的视频,或使用我们的任何其他代码存储库集成.
- 包管理- OTA服务提供压缩文件,其中包含每种语言和每个应用程序版本的密钥和翻译。这些文件称为“包”,可以使用UI和API创建、管理和配置它们。
- 获取翻译-在其他一切都设置好之后,剩下的就是实现一个GET请求,为特定用户获取最新的翻译包。
获取API令牌
首先,你需要一个令牌执行API请求,如下文所述.请确保创建一个读/写令牌。还请记住,您的令牌不能公开共享,否则恶意用户可以代表您执行任意API请求。
获取JWT
请注意,大多数操作都需要JWT。
你将不能创建、列出或冻结捆绑包,以及使用常规API令牌的请求转换捆绑包。另外,请确保你的JWT的安全。生成的JWT过期30.分钟。
接下来,您需要获取一个JWT:出于安全目的,我们将使用这个令牌进行操作。要实现这一点,需要向https://api.www.wwealerts.com/api2/projects/ {project_id} /令牌端点。让我们使用API游乐场(创建一个服务JWT令牌端点):
你必须提供以下资料:
- 验证标题—上一步获取的API密钥。
- 项目ID-要使用的Lokalise项目的标识符。这个ID可以在项目设置中找到。
- 服务-设置为
在线旅行社
.
准备好后,单击试一试.你会得到上图所示的JWT的响应。复制JWT从响应字段。
接下来,继续执行jwt.io把你的JWT粘贴到编码字段。在右边,您将看到您有权访问的项目和相应的团队ID。请注意团队ID因为我们将在接下来的章节中需要这些信息:
清单包
此时至少应该创建一个bundle。
要创建SDK包,目前的方法是通过API从Lokalise下载文件使用
flutter_sdk
文件格式。请记住,您的项目必须至少有一个翻译键分配给其他
创建bundle之前的平台。
接下来,您可以通过发送HTTP GET请求来列出您的OTA包https://ota.www.wwealerts.com/v3/teams/ {teamId} /项目/ {lokaliseProjectId} /包.请务必更换{{teamId}}
和{{projectId}}
使用在上一步中获得的值。
你还需要通过你的JWT作为授权记名令牌:
发送请求后,您将得到以下响应:
{"data": [{"id": 51, "projectId": "13648544637b6fd6ab5ae7.20741558", "isPrerelease": false, "isProduction": true, "createdAt": "2022-11-21T13:46:48.768Z", "createdBy": "114645", "framework": "ios_sdk", "description": null, "isFrozen": false, "lokaliseId": null, "fileId": "7bc6e610-ba89-4712-98d9-60fbd4539ee1", "modifiedAt": "2022-11-21T13:46:48.899Z"}, {"id": 52, "projectId": "13648544637b6fd6ab5ae7.20741558", "isPrerelease": false, "isProduction": false, "createdAt":"2022-11-21T13:46:58.292Z", "createdBy": "114645", "framework": "ios_sdk", "description": null, "isFrozen": false, "lokaliseId": null, "fileId": "19663483-8095-4b0c-92d4-22628f5bcb46", "modifiedAt": "2022-11-21T13:54:49.675Z"},]}
请注意,每个项目最多只能有一个预发布包和一个产品包。
看一下第一个包(带有id
51)。在这种情况下isPrerelease
设置为假
而isProduction
设置为真正的
这意味着这是一个产品包。第二个bundle将这两个属性都设置为假
.
预发布包和产品包之间的区别是什么?
- 产品翻译包将默认提供给移动用户:换句话说,该包旨在提供稳定的应用程序版本。
- 只有当移动SDK特别要求预发布版本时,才会向用户提供预发布包。它通常用于测试目的。
暂存一个bundle(可选)
接下来,让我们试着推出一个捆绑包这将导致切换isPrerelease
属性来真正的
.这是一个可选步骤,如果您不想使用预发布版本,可以安全地跳过它。
目前,我有以下捆绑与id
52:
{"id": 52, "projectId": "13648544637b6fd6ab5ae7.20741558", "isPrerelease": false, "isProduction": false, "createdAt": "2022-11-21T13:46:58.292Z", "createdBy": "114645", "framework": "ios_sdk", "description": null, "isFrozen": false, "lokaliseId": null, "fileId": "19663483-8095-4b0c-92d4-22628f5bcb46", "modifiedAt": "2022-11-21T13:54:49.675Z"}
要启动它,我们必须发送一个HTTP POST请求https://ota.www.wwealerts.com/v3/teams/ {teamId} /项目/ /{框架}/ {lokaliseProjectId} /框架阶段.再次确认更换teamId
而且projectId
使用前面获得的值。至于{{sdk}}
时,它的值应该与框架
属性。在这个例子中,它的值是ios_sdk
.
请确保提供您的JWT并将其设置为授权持名令牌:
最后,请求体应该包含您的包IDbundleId
:
发送请求后,您将得到一个HTTP 204(无内容)响应,这意味着一切都按预期工作。
现在你可以再次请求bundle列表:
{"data": [{"id": 51, "projectId": "13648544637b6fd6ab5ae7.20741558", "isPrerelease": false, "isProduction": true, "createdAt": "2022-11-21T13:46:48.768Z", "createdBy": "114645", "framework": "ios_sdk", "description": null, "isFrozen": false, "lokaliseId": null, "fileId": "7bc6e610-ba89-4712-98d9-60fbd4539ee1", "modifiedAt": "2022-11-21T13:46:48.899Z"}, {"id": 52, "projectId": "13648544637b6fd6ab5ae7.20741558", "isPrerelease": true, "isProduction": false, "createdAt":"2022-11-21T13:46:58.292Z", "createdBy": "114645", "framework": "ios_sdk", "description": null, "isFrozen": false, "lokaliseId": null, "fileId": "19663483-8095-4b0c-92d4-22628f5bcb46", "modifiedAt": "2022-11-21T14:03:14.714Z"}]}
请注意isPrerelease
属性现在设置为真正的
第二个bundle (ID为52)。太棒了!
发布一个bundle
现在,这个bundle已经被分段了,我们可以这样做了发布它并因此设置isProduction
属性来真正的
.
要实现这一点,必须将HTTP POST请求设置为https://ota.www.wwealerts.com/v3/teams/ {teamId} /项目/ {lokaliseProjectId} /框架/{框架}/发布.与之前一样,请提供以下数据:
{{teamId}}
而且{{projectId}}
这些都是之前得到的。{{sdk}}
的值应该与框架
属性。- 提供您的JWT并将其设置为授权持名令牌。
- 提供
bundleId
在请求体中。
发送请求后,您将得到一个HTTP 204(无内容)响应,这意味着一切都按预期工作。
现在你可以再次请求bundle列表:
{"data": [{"id": 51, "projectId": "13648544637b6fd6ab5ae7.20741558", "isPrerelease": false, "isProduction": false, "createdAt": "2022-11-21T13:46:48.768Z", "createdBy": "114645", "framework": "ios_sdk", "description": null, "isFrozen": false, "lokaliseId": null, "fileId": "7bc6e610-ba89-4712-98d9-60fbd4539ee1", "modifiedAt": "2022-11-21T14:12:27.105Z"}, {"id": 52, "projectId": "13648544637b6fd6ab5ae7.20741558", "isPrerelease": true, "isProduction": true, "createdAt":"2022-11-21T13:46:58.292Z", "createdBy": "114645", "framework": "ios_sdk", "description": null, "isFrozen": false, "lokaliseId": null, "fileId": "19663483-8095-4b0c-92d4-22628f5bcb46", "modifiedAt": "2022-11-21T14:12:27.108Z"}]}
注意,第二个bundle (ID 52)现在有isProduction
属性设置为真正的
而第一个(ID 51)具有相同的属性设置假
.这是因为我们不能为一个项目提供两个产品包。
创建一个bundle冻结
现在让我们看看怎么做创建一个bundle冻结这基本上是一个版本范围,包应该提供。例如,你可以说捆绑包ID 52应该只提供给当前使用应用程序2.0 - 3.0版本的客户。而使用1.0版本的客户则应该获得一个较旧的捆绑包ID 51。
要创建包冻结,您应该发送一个HTTP POST请求到https://ota.www.wwealerts.com/v3/teams/ {teamId} / {lokaliseProjectId} / bundle-freezes /项目.请提供以下数据:
{{teamId}}
而且{{projectId}}
这些都是之前得到的。- 提供您的JWT并将其设置为授权持名令牌。
- 提供
bundleId
在请求体中。 - 另外,请求体应该包含
从
而且来
属性指定版本范围(例如,2.1.5
或3.1
).
因此,在本例中,包ID 52应该提供给所有使用2.0到3.0版本的客户。
请求发送后,您将得到以下响应:
{"数据":{" id ": 21日“projectId”:23日,“bundleId”:52岁的“从”:“2.0”,“对”:" 3.0 "}}
列出绑定包冻结(可选)
现在已经创建了bundle冻结,您可以查看所有冻结的列表对于给定的项目。这是一个可选步骤。
为了实现这一点,发送一个HTTP GET请求到https://ota.www.wwealerts.com/v3/teams/ {teamId} / {lokaliseProjectId} / bundle-freezes /项目.请提供以下数据:
{{teamId}}
而且{{projectId}}
这些都是之前得到的。- 提供您的JWT并将其设置为授权持名令牌。
请求发送后,您将得到以下响应:
{“数据”:[{“projectId”:“id”:21日23日“bundleId”:52岁的“框架”:“ios_sdk”,“从”:“2.0”,“对”:“3.0”}]}
好了!下一步是获取bundle,但在此之前我们需要生成一个特殊的SDK令牌。
生成SDK令牌
顾名思义,是SDK令牌将被您的移动软件开发工具包用于请求OTA捆绑包。
要生成一个新的SDK令牌,您必须发送一个HTTP POST请求到https://ota.www.wwealerts.com/v3/teams/ {teamId} /项目/ {lokaliseProjectId} /令牌.请提供以下数据:
{{teamId}}
而且{{projectId}}
这些都是之前得到的。- 提供您的JWT并将其设置为授权持名令牌。
一旦请求被发送,你会得到以下响应:
{"data": {"id": 25, "token": "123abc456xyz", "projectId": 23, "lokaliseId": null, "createdAt": "2022-11-21T14:30:21.162Z"}}
记下来令牌
属性,因为我们将在下一步中需要它。
获取OTA捆绑包
当你的应用程序用户加载应用程序,从后台刷新它,或请求更改语言时,你的应用程序应该“请求”OTA服务提供最新的翻译包,并在请求中包含以下信息:
- SDK令牌——你可以为每个使用UI或API的项目生成SDK令牌。对OTA的每个请求都必须在头中包含令牌。
- 项目ID——你的每一个应用程序都应该连接到一个Lokalise项目,在那里翻译被管理。
- SDK框架-例如,
ios_sdk
或android_sdk
,这定义了将返回的翻译文件的格式和结构。 - 应用程序版本——用户已安装的应用程序的特定版本的标识符。这一点很重要,可以为使用不同应用程序版本的用户正确地提供不同的翻译。
- 翻译版本——当前正在本地运行的版本的标识符,以便服务可以检查是否需要更新的版本,或者用户是否已经拥有他们正在运行的版本的最新翻译。它是下载的翻译包的当前ID。它的存在是为了让下载包的应用程序不会重新下载相同的翻译。换句话说,如果应用程序已经提供了与最新翻译包匹配的翻译ID,则不会返回新的翻译包。
现在您有了一个OTA令牌,就可以了取一捆.为了实现这一点,发送一个HTTP GET请求到https://ota.www.wwealerts.com/v3/lokalise/projects/ {lokaliseProjectId} /框架/{框架}.请提供以下数据:
{{projectId}}
这是之前得到的。{{sdk}}
应该与你的捆绑包具有相同的价值框架
属性。- 中提供您的OTA令牌
x-ota-api-token
头。 - 提供必要的查询(GET)参数:
appVersion
(必需)-你想要请求bundle的应用程序的当前版本。提供的值必须是有效的SemVer比如字符串,3.0.0
或2.1.5
.颠换
(必需)-翻译版本。预映
(可选,默认为假
) -你是否想要一个预发布包。
发送请求后,您将得到以下响应:
{"data": {"url":“https://example.com/250439/13648544637b6fd6ab5ae7.20741558/bundles/ef5c0cf9 - def7 - 44 - d8 - af9b - 644802 - a744d8?expires=1669127945&key -对- id=k1817jswqq9f4e&signature=euvsrg tsom3zl1gy1f ~ RDrFeAHI3bU0V5uQ0SImzD9a5-Azg1chV1AmU6n5Y5gGPDlycECeLy6wmrWZiWY3Y191qtyuUz5Y1r-IX1CG7mBOZaRvLc93tZkPHPtrR-7dTEGS4tkzkuKvu9CTtiymhQcKb68f7yVDrsdhN7bZM2xv7ndeGbT2pNjPdb3sLiJLRyNN103x5Y06gdKngyOZMvPSsL99GYBS2nl1Z0NttqYVZXxBVFNbBCa6ejQ40o-36rFaOVXDv1OfnGhenhJt7PVqHXm8qh8S3fDvptpt2hndwK-b8qtTolMmNYkiMuuQTWd2ylMsGT2GQSPU161Okw__", "version": 52}}
请注意版本
属性设置为52
-这是我们之前发布的捆绑包的ID,并创建了一个捆绑包冻结。只要bundle冻结包含从2.0到3.0的版本,并且我们已经设置了appVersion
来3.0.0
,为我们提供了bundle ID 52。
自定义SDK的格式
如果你想用自定义SDK构建一个流(例如,你想为React Native创建一个SDK)怎么办?在这种情况下,您需要选择一种适合您的可用输出格式。此格式应在获取OTA捆绑包在sdk
属性。
ios_sdk
-创建一个包含.string
压缩在. zip
文件。android_sdk
-创建一个bundle with. json
Android文件格式。flutter_sdk
创建一个bundle. zip
文件中的语言文件. json
标准格式。
例如,如果SDK需要JSON文件,则可以使用flutter_sdk
格式。
更多信息
浏览指南iOS,安卓,颤振,以获取具体和更详细的指南,这些指南可能会在构建自己的SDK的过程中启发您。
每个端点都可以使用API文档,其中包括每个参数的详细描述,以及示例请求和响应。
如果您还有任何问题,请与我们的支持团队联系(使用右下角的按钮),他们会很乐意回答并提供更多指导。