使用OTA API

我们为iOS、Android和Flutter应用程序提供预先构建的sdk,以便在移动应用程序中快速简单地实现OTA (over -air)服务,但有时这还不够。对于这些情况,我们提供了一个公共API,可以构建包、管理版本,并从应用程序发出请求以获得最新的翻译包。

在本文中,您将学习如何使用OTA API端点.我们将使用邮递员来发送HTTP请求并探索响应,当然你也可以使用我们的API游乐场或任何其他工具。

概述

将您的应用程序与Lokalise OTA服务集成包括三个步骤:

  1. 代码库集成-不是OTA本身的一部分,而是持续开发和本地化工作流程的基础。欲了解更多信息,请查看这个关于GitHub集成的视频,或使用我们的任何其他代码存储库集成
  2. 包管理- OTA服务提供压缩文件,其中包含每种语言和每个应用程序版本的密钥和翻译。这些文件称为“包”,可以使用UI和API创建、管理和配置它们。
  3. 获取翻译-在其他一切都设置好之后,剩下的就是实现一个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"},]}

请注意,每个项目最多只能有一个预发布包和一个产品包。

看一下第一个包(带有id51)。在这种情况下isPrerelease设置为isProduction设置为真正的这意味着这是一个产品包。第二个bundle将这两个属性都设置为

预发布包和产品包之间的区别是什么?

  • 产品翻译包将默认提供给移动用户:换句话说,该包旨在提供稳定的应用程序版本。
  • 只有当移动SDK特别要求预发布版本时,才会向用户提供预发布包。它通常用于测试目的。

暂存一个bundle(可选)

接下来,让我们试着推出一个捆绑包这将导致切换isPrerelease属性来真正的.这是一个可选步骤,如果您不想使用预发布版本,可以安全地跳过它。

目前,我有以下捆绑与id52:

{"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.53.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服务提供最新的翻译包,并在请求中包含以下信息:

  1. SDK令牌——你可以为每个使用UI或API的项目生成SDK令牌。对OTA的每个请求都必须在头中包含令牌。
  2. 项目ID——你的每一个应用程序都应该连接到一个Lokalise项目,在那里翻译被管理。
  3. SDK框架-例如,ios_sdkandroid_sdk,这定义了将返回的翻译文件的格式和结构。
  4. 应用程序版本——用户已安装的应用程序的特定版本的标识符。这一点很重要,可以为使用不同应用程序版本的用户正确地提供不同的翻译。
  5. 翻译版本——当前正在本地运行的版本的标识符,以便服务可以检查是否需要更新的版本,或者用户是否已经拥有他们正在运行的版本的最新翻译。它是下载的翻译包的当前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.02.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的版本,并且我们已经设置了appVersion3.0.0,为我们提供了bundle ID 52。

自定义SDK的格式

如果你想用自定义SDK构建一个流(例如,你想为React Native创建一个SDK)怎么办?在这种情况下,您需要选择一种适合您的可用输出格式。此格式应在获取OTA捆绑包sdk属性。

  • ios_sdk-创建一个包含.string压缩在. zip文件。
  • android_sdk-创建一个bundle with. jsonAndroid文件格式。
  • flutter_sdk创建一个bundle. zip文件中的语言文件. json标准格式。

例如,如果SDK需要JSON文件,则可以使用flutter_sdk格式。

更多信息

浏览指南iOS安卓,颤振,以获取具体和更详细的指南,这些指南可能会在构建自己的SDK的过程中启发您。

每个端点都可以使用API文档,其中包括每个参数的详细描述,以及示例请求和响应。

如果您还有任何问题,请与我们的支持团队联系(使用右下角的按钮),他们会很乐意回答并提供更多指导。