跳过主要内容
替代方案

如何向一个用户或一组用户发送特定的更新

允许用户尝试 beta 版本,而无需 TestFlight 或 Google beta 过程的需要,只需在您的 Ionic 应用程序中添加一个按钮,他们就可以了!

马丁·多纳迪厄

马丁·多纳迪厄

内容营销人员

如何向一个用户或一组用户发送特定的更新

序言

当你开始享受 Capgo 的更新系统时,就像我对我的应用程序一样,你会开始感到“如果我想要更多?”的感觉

我也感到了这种感觉,但由于我是 Capgo 的制造者,所以我能够进行查看!

由于所有内容都是开源的,所以你也有这个权力 :)

在 Capacitor 应用分发过程中,我遇到的下一个痛点是让其他团队成员测试更新!

使用 TestFlight,问题变得简单,邀请人们加入你的团队并让他们了解如何获取它的过程是耗时的!

每次向 Apple 发送更新时,你都有一个随机的机器人审查过程,可能需要 5 分钟或 5 小时,你永远不知道。

我经常因为这个原因推迟了我的演讲……

而对于 Google 来说,这甚至更糟糕,我的生活中最大的谜团是,发布生产版本只需要不到 2 小时,但发布闭 beta 版本需要 1–2 天。

解决方案

为了解决这个问题,我在 Capgo 中创建了 Channel 系统。

npx @capgo/cli@latest bundle upload -c production 如果你设置了生产频道为默认频道,那么版本将更新到所有用户。

如果你这样做了,那么版本将落在一个不同的频道上,这可以在 __CAPGO_KEEP_0__ 中自动化。 npx @capgo/cli@latest bundle upload -c development 在 __CAPGO_KEEP_0__ 中,可以自动化频道更新的过程。 在 GitHub 中,可以自动化频道更新的过程。.

然后您有两种方式让用户从频道获取更新

超级自动方式

当您不想为频道设置创建自己的后端时,这可以很快实现。

只需允许其中一个频道自行设置即可。

允许设置自行在Capgo中

然后在您的Ionic应用程序的code中添加此项,为了获得最佳体验,请在用户点击“注册beta”按钮后使用。

import { CapacitorUpdater } from '@capgo/capacitor-updater'

const deviceId = await CapacitorUpdater.setChannel({ channel: 'beta' })

手动方式

这对于您的内部团队来说很快可以实现。 允许用户从应用程序中复制设备ID并将其发送给您手动,这code将有助于您获取它:

import { CapacitorUpdater } from '@capgo/capacitor-updater'

const deviceId = await CapacitorUpdater.getDeviceId()

在应用程序中隐藏一个按钮,或者只向已连接的用户显示按钮,例如,通过角色。 admin 然后在Web应用程序或原生应用程序__CAPGO_KEEP_0__中连接,作为应用程序管理员,选择您的应用程序,单击设备列表。

Then Go to the Web app or native app Capgo, connect as app admin, select your app, click on the device list.

允许用户从应用程序中复制设备ID并将其发送给您手动,这__CAPGO_KEEP_0__将有助于您获取它: development请让您的团队成员再次打开应用程序,等待 30 秒,然后打开关闭。

他应该获得您的版本。

自动方式

这对您的 beta 测试者来说可能很有用,但这需要更长的时间来实现。

与手动方式相同,您必须获取设备 ID

import { CapacitorUpdater } from '@capgo/capacitor-updater'

const deviceId = await CapacitorUpdater.getDeviceId()

但这次您必须自动将其发送到您的后端,我让您决定如何做。

我只会建议您将其存储在数据库中,这将使您的生活更轻松。

然后在您的后端,您必须将其发送到 Capgo 后端。以下是两个 code 示例:

NodeJS
import axios from 'axios'

await axios.post('https://api.capgo.app/device', {
  app_id: 'YOUR_APP_ID',
  device_id: 'DEVICE_ID',
  channel: 'CHANNEL_NAME', // The name of the channel, or undefined if version_id provided
  version_id: 'VERSION_NAME' // this is optional, if provide it will override the channel, that useful when you want to debug only one user.
}, {
  headers: {
    authorization: 'YOUR_API_KEY' // choose a key with 'write' or 'all' rights
  }
})
Cloudflare
addEventListener('fetch', (event) => {
  event.respondWith(
    handleRequest(event.request).catch(
      err => new Response(err.stack, { status: 500 })
    )
  )
})

async function handleRequest(request) {
  const { pathname, method } = new URL(request.url)
  const body = await request.json()
  const newBody = JSON.stringify({
    app_id: 'YOUR_APP_ID',
    device_id: body.device_id,
    channel: 'alpha'
  })
  const newUrl = new URL('https://api.capgo.app/device')
  const options = {
    headers: {
      authorization: 'YOUR_API_KEY',
    },
    method: 'POST',
    body: newBody
  }

  if (request.method === 'DELETE') {
    // DELETE the channel link
    options.method = 'DELETE'
    return fetch(newUrl.toString(), options)
  }

  return fetch(newUrl.toString(), options)
}

然后只需将您的设备 ID 发送到请求正文中,到已部署的 URL 中使用 POST 方法添加和 DELETE 方法删除。

在此配置后,请尝试在您的应用程序中添加一个按钮以选择频道,并在 Web 应用程序中检查是否已设置。

您也可以发送 null 删除覆盖

如果您需要程序检查设备上的覆盖设置,

import axios from 'axios'

const res = await axios.get('https://api.capgo.app/device?app_id=YOUR_APP_ID&device_id=DEVICE_ID', {
  headers: {
    authorization: 'YOUR_API_KEY' // choose a key with 'write' or 'all' rights
  }
})

console.log('data', res.json())
Capacitor应用的实时更新

当web层bug处于活跃状态时,通过Capgo将修复推送到应用,而不是等待几天的应用商店审批。用户在后台接收更新,而原生更改保持在正常的审批路径中。

立即开始

最新博客

Capgo为您提供创建真正专业的移动应用所需的最佳见解。