前几天,技术总监用百度糯米时收到了内测邀请,然后,他在公司群里炫耀了一番,再然后,老板看上了,紧急开了个小会,要求以后也支持内测邀请。

先说一下百度糯米的内测形式吧

  1. 受邀用户会在应用内收到一个 Alert,如下图↓:
    内测邀请-Alert.png
  2. 当然是点击参加啦,要不然哪来的下面这个图↓:
    内测邀请-Controller.png
  3. 点击参加内测,直接打开了 TestFlight 应用(如果手机上没有 TestFlight,打开的是 App Store 下载页面),并跳转至内测版本下载页面,如下图↓:
    内测邀请-TestFlight.png
  4. 最后就是愉快的下载和体验过程了。

Perfect!看过官方文档之后,发现只能用邮件发邀请啊,而我们的产品中用户信息是没有邮件的,而且就算有,对于用户来说也很麻烦啊!那么问题来了,如何实现百度糯米的这种邀请方式呢?

我们知道,如果不是通过百度糯米那种方式,用户需要打开邮件、复制邀请码、打开 TestFlight、输入邀请码等繁琐的步骤,我们要做到邀请码对用户透明。

来了!终于来了!怎么才能做到呢?

  1. 第一步肯定是按照官方文档配置,这里就不再赘述了。
  2. 由于必须用邮件邀请的方式,因此,我们的架构师搭建了一个邮件服务,专门用于接收邀请邮件(收件地址是我们自己指定的假数据)。收到邮件后,自动点击邮件中的 “View in TestFlight” 按钮,这时候会有一个 URL,得到这个 URL 就得到了我们想要的东西,格式是这个样子的:https://beta.itunes.apple.com/v1/invite/f2405bda0b694cba9d13a1f4c0b1e984085caa193bdd4c3d8a3fa06a34acded83c2f42e1?ct=HC3Q6RZFNN&advp=10000&platform=ios
    URL.png
     
  3. 后台将得到的那个 URL 在应用内发给受邀用户即可(当然啦,对用户来说是透明的),然后就是弹 Alert -> 弹 Controller -> 接受邀请并愉快地下载内测版本 -> 愉快地体验内测版本

UI 就不用多说了,关键是点击接受按钮时的代码,如下:

- (void)openTestFlight {
    NSURL *testFlightURL = [NSURL URLWithString:@"itms-beta://"];
    // 需要判断能不能打开 TestFlight
    if ([[UIApplication sharedApplication] canOpenURL:testFlightURL]) {
        // 这个 urlString 就是后台发送给我们的,可以直接打开 TestFlight 并跳转到内测版本的详情页面。
        NSString *urlString = @"https://beta.itunes.apple.com/v1/invite/f2405bda0b694cba9d13a1f4c0b1e984085caa193bdd4c3d8a3fa06a34acded83c2f42e1?ct=HC3Q6RZFNN&advp=10000&platform=ios";
        if (@available(iOS 10.0, *)) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString] options:@{} completionHandler:^(BOOL success) {
                NSLog(@"%@", @(success));
            }];
        } else {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];
        }
    } else {
        // 手机上没有安装 TestFlight
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://itunes.apple.com/cn/app/testflight/id899247664"]];
    }
}