uni-app IOS App 开发记录

MuYan2022-12-07VueVueuni-app

本地开发调试

开发本地开发调试的时候,需要打测试开发证书的自定义基座。

APP 开发测试

在开发一些需要沙箱环境的功能点时,需要申请 Developer Certification(开发证书)

IOS APP 证书申请流程

应用内测流程

基础需求:macBook 一台,一个 App Store Connect 开发者账户,在 macBook 上安装应用 TestFlight

  1. 登录App Store Connect 官网open in new window

  2. macBook 上安装 TestFlight,登录开发者账户,上传 uniApp 打包后的 IOS 应用包,而后同步至App Store Connect

  3. App Store Connect 上配置 APP 信息,并在对应 APP 内的 TestFlight 内邀请对应的测试人员,Apple ID 需要为邮箱账户才能邀请(因为需要通过邮箱发送邀请链接,内含邀请码,后面要用)

  4. 测试人员通过邮件接受邀请,而后在 iPhone 上安装 TestFlight 并于该应用内填写对应 邀请码(邀请码在内测邀请邮件内)

接入 IAP 支付

苹果规定应用内支付必须要接入接入 IAP 支付,苹果会抽取 30%的手续费(俗称苹果税)

  • 不接入就不能通过审核上架
  • 已上线的应用如果发现相关引导第三方支付、接入第三方支付等情况,会进行强制下架

游客登录

苹果规定内购如无必须要跟账户绑定的情况下,就必须要有游客登录模式,只要审核的驳回理由就有相关说明就必须要接入,无法绕开跟避规!!!老老实实实现游客登录吧!

实现方式

建议开放购买页,而后在用户进行购买的时候进行弹窗提示,让用户选择登录方式

  • 基础示例(基于 uview ui库)
<template>
  <view>
    <u-button @click="submit()">
        购买
    </u-button>
    <view class="loginModal_wrap">
      <u-modal
        :show="loginModalShow && !userInfo"
        title="登录方式选择"
        confirmText="暂不购买"
        @confirm="loginModalShow = false"
      >
        <view style="flex: 1">
          <u-button @click="loginJump()">
            <view>
              <view style="display: flex;">
                <view>
                  登录XXX账户开通
                </view>
                <u-tag text="推荐" shape="circle" color="#fff" />
              </view>
              <view> (可在 <text>不同设备</text> 享受会员权益) </view>
            </view>
          </u-button>
          <u-button @click="loginJump(true)">
            <view>
              游客账户开通
              <view> (可在 <text>当前设备</text> 享受会员权益) </view>
            </view>
          </u-button>
        </view>
      </u-modal>
    </view>
  </view>
</template>
<script>
/**
  * app 开发,苹果设备判断
  * @returns
*/
const isIOS = () => {
  // #ifdef APP-PLUS
  return uni.getSystemInfoSync().osName === 'ios';
  // #endif
  // #ifndef APP-PLUS
  return false;
  // #endif
}
export default {
    data() {
        return {
            loginModalShow: false
            userInfo: '' // 用户登录信息
        };
    },
    methods: {
        submit() {
            // 未登录
            if (!this.userInfo) {
                // 苹果端显示登陆方式选择
                if (isIOS()) {
                    this.loginModalShow = true;
                } else {
                    // 其他端跳转登录
                }
                // 登录后业务逻辑
            }
        },
        loginJump(type = false) {
            if (!type) {
                this.loginModalShow = false;
                // 跳转登录页
                return;
            }
            // #ifdef APP-PLUS
            if (this.$myUtils.isIOS()) {
                plus.device.getInfo({
                    success: (e) => {
                    if (e.uuid) {
                        // 苹果设备唯一标识 uuid,当前应用内唯一
                        // getLogin 为你自定义的登录方法
                        this.getLogin({
                            uuid: e.uuid
                        }).then(() => {
                            uni.showToast({
                                title: "登录成功",
                                duration: 2000,
                            });
                            this.loginModalShow = false;
                        });
                    }
                    },
                    fail: () => {
                        uni.showToast({
                            title: "登录失败",
                            duration: 2000,
                        });
                    },
                });
            } else {
                this.loginModalShow = false;
            }
            // #endif
            // #ifndef APP-PLUS
            this.loginModalShow = false;
            // #endif
        }
    }
}
</script>

苹果接入第三方登录

苹果规定接入第三方登录(如微信、微博等),必须要接入苹果登录,不然不能上架,苹果登录最低支持苹果系统13+

// 获取苹果登录相关信息
const getIosLoginInfo = () => {
  return new Promise((resolve, reject) => {
    // #ifdef APP-PLUS
    uni.login({
      provider: 'apple',
      success: () => {
        uni.getUserInfo({
          provider: 'apple',
          success: (info) => {
            // info.userInfo 包含以下信息
            // openId 苹果用户唯一标识符,该值在同一开发者账户下的所有APP下是一样的
            // authorizationCode 服务器验证需要使用的参数
            // identityToken 服务器验证需要使用的参数,校验用户数据是否真实
            // realUserStatus 用于判断当前登录的苹果账号是否是一个真实用户 0:当前平台不支持,忽略该值;1:无法确认;2:用户真实性非常高
            // 基本上可以根据 openId、identityToken 就可以进行苹果账户登录操作,如需更多用户信息,请查阅相关文档
            resolve(info.userInfo)
          },
        });
      },
      fail: (err) => {
        reject(err)
      },
    });
    // #endif
    // #ifndef APP-PLUS
    resolve('')
    // #endif
  })
}

// 判断是否支持苹果登录
const isIOS13 = () => {
  const info = uni.getSystemInfoSync();
  return info.osName === 'ios' && info.osVersion >= '13'
}

Identifiers 相关

苹果开发者后台open in new windowIdentifiers菜单栏内新增功能时,需要重新生成p12、描述文件,进行应用打包

无法创建证书的情况

创建的时候提示 You already have a current Distribution certificate or a pending certificaterequest. 大概率是创建的 Apple Distribution 证书到达上限了,再苹果开发官网可以查到 Maximum number of certificates generated 这个时候就要只新建 iOS Distribution 类型的证书。

  • Apple Distribution 类型的证书存在上限。
上次更新 2026/6/23 11:49:15
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8