iOS 未使用支付功能,集成 AlipaySDK 能否通过审核?
结论
可以提交审核,也有机会正常通过。iOS 审核通常会看 App 的实际功能、资金流向和 SDK 行为,不会只因为集成了 AlipaySDK 就直接作出判断。
如果支付宝仅用于验证提现账户是否由本人授权,App 内也没有商品购买、数字内容解锁、会员订阅等支付入口,一般不会被视为绕过 Apple In-App Purchase。不过,审核结果无法保证,最终仍取决于当时的审核规则、业务资质、页面文案和 App 的实际运行行为。
为什么可能通过
这个场景使用的是支付宝的账户授权能力,并非向商户付款:
- 用户不会通过支付宝购买 App 内的商品或数字服务。
- App 不会调用支付宝支付接口创建交易。
- 授权结果只用于确认支付宝账户身份或绑定状态。
- 提现是将用户已有余额转出,不是在引导用户到 App 外完成购买。
审核的重点不是 SDK 的名称,而是 App 是否包含支付功能、外部购买引导或隐藏的交易流程。即使 SDK 内含支付模块,只要 App 没有实际调用,通常也不等于 App 提供了支付宝支付。不过,如果可以只集成授权所需的组件,建议尽量缩小 SDK 和权限范围。
建议的实现步骤
1. 由服务端生成授权请求
不要把支付宝应用私钥写入 iOS 客户端。客户端先向业务服务端申请授权参数,由服务端完成签名,再将授权字符串返回给客户端。
iOS App
-> 业务服务端申请授权参数
-> 服务端生成并签名 authInfo
-> iOS App 调用支付宝授权接口
-> 支付宝返回授权结果
-> iOS App 将 authCode 提交给业务服务端
-> 服务端向支付宝核验并完成账户绑定
客户端返回的昵称、用户标识或成功状态,不能直接作为本人校验的最终依据。账户是否绑定成功,应以服务端调用支付宝开放平台接口后的核验结果为准。
2. 只调用账户授权接口
不同版本的 AlipaySDK 可能使用不同的 Swift 方法名和回调方式。下面用 Objective-C 展示典型的调用结构,具体签名请以项目所用版本的 SDK 文档和头文件为准。
#import <AlipaySDK/AlipaySDK.h>
- (void)startAlipayAuthorizationWithAuthInfo:(NSString *)authInfo {
NSString *appScheme = @"your-app-alipay";
[[AlipaySDK defaultService]
auth_V2WithInfo:authInfo
fromScheme:appScheme
callback:^(NSDictionary *result) {
NSString *resultStatus = result[@"resultStatus"];
NSString *resultString = result[@"result"];
// 不要仅凭客户端回调完成账户绑定。
// 应提取授权结果并提交给服务端,由服务端继续核验。
[self submitAuthorizationResult:resultString
resultStatus:resultStatus];
}];
}
不要调用支付接口,例如:
// 本场景不应调用支付下单接口
// [[AlipaySDK defaultService] payOrder:orderString
// fromScheme:appScheme
// callback:...];
3. 正确处理支付宝回跳
如果当前 SDK 版本要求通过 URL Scheme 接收授权结果,需要在应用生命周期回调中将 URL 交给 SDK 处理。下面仍是示意代码,准确的方法名请以所用 SDK 版本为准。
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService]
processAuth_V2Result:url
standbyCallback:^(NSDictionary *result) {
NSString *resultStatus = result[@"resultStatus"];
NSString *resultString = result[@"result"];
[self submitAuthorizationResult:resultString
resultStatus:resultStatus];
}];
}
return YES;
}
使用 UISceneDelegate 的项目还要按照当前 SDK 接入文档处理对应的 URL 回调。如果只配置 AppDelegate,授权完成后可能无法返回 App。
4. 在审核备注中解释用途
建议在 App Store Connect 的审核备注中直接说明用途,避免审核人员仅凭 SDK 名称判断。例如:
App 集成 AlipaySDK 仅用于提现账户的实名认证授权和账户绑定校验。App 不提供支付宝购买、充值、数字内容解锁或其他支付功能,也不会调用支付宝支付下单接口。测试账号中可通过“我的 > 提现 > 绑定支付宝”进入该功能。
如果体验提现功能需要账号具备特定余额、实名状态或测试环境,还应提供:
- 可正常登录的审核账号;
- 完整的操作路径;
- 体验授权流程所需的测试条件;
- 无法真实提现时的审核说明或演示方式;
- 授权失败或用户取消授权时的预期表现。
审核前检查
页面文案要准确
按钮可以写成“绑定支付宝”“验证支付宝账户”或“授权支付宝账户”,不要使用“支付宝支付”“立即购买”等容易引起误解的文案。
授权前应向用户说明:
- 为什么需要支付宝授权;
- 将获取或验证哪些账户信息;
- 这些信息用于绑定提现账户,还是校验实名信息是否一致;
- 用户拒绝授权后会受到什么影响;
- 如何解除绑定或更换提现账户。
清理无关支付入口
确认正式提交的安装包中没有以下内容:
- 隐藏的支付宝支付按钮;
- WebView 内的商品购买页面;
- 跳转到浏览器支付数字商品的入口;
- 可通过远程配置开启的支付功能;
- 测试菜单中的支付下单功能;
- 引导用户通过外部支付购买会员、虚拟币或数字内容的文案。
即使相关界面暂时处于隐藏状态,只要代码或远程配置能在审核期间将其启用,也可能引起额外审查。
做好隐私披露
支付宝账户标识、实名校验结果和提现记录可能涉及个人信息。应根据 App 的实际采集情况,更新隐私政策和 App Store Connect 中的 App Privacy 信息。
不要为了接入 SDK 而申请无关权限。如果 SDK 或其依赖包含跟踪、广告标识符采集或设备画像行为,还需要另行评估隐私清单、Required Reason API 和 ATT 等要求。是否涉及这些要求,应根据所用 SDK 版本及其实际运行行为判断,不能只看“支付宝授权”这一用途。
服务端不能只相信客户端
客户端的授权回调可能遭到篡改或伪造。服务端至少应完成以下工作:
- 校验授权码或访问令牌;
- 核对支付宝应用身份;
- 判断授权结果是否过期或已被使用;
- 将支付宝账户与当前登录用户绑定;
- 防止同一提现账户被异常重复绑定;
- 保存必要的风控和审计记录;
- 避免记录完整令牌、签名串等敏感数据。
常见被拒风险
集成 SDK 本身通常不是主要问题。以下情况更容易导致审核受阻:
- 审核人员找不到授权入口,或无法走完整个授权流程;
- 提现余额的来源、业务模式或资金关系没有解释清楚;
- App 实际包含数字内容的外部购买入口;
- 授权页面声称可以“验证本人”,实际却只获取了普通账户信息,无法支持这一结论;
- 隐私政策没有说明支付宝账户信息的用途;
- SDK 实际收集的数据与 App Store 隐私申报不一致;
- 金融、钱包、兑换或现金奖励业务缺少适用地区要求的资质;
- SDK 版本过旧,包含废弃 API、异常跳转或不必要的设备信息采集。
还需注意,“支付宝账户已授权”并不必然表示“支付宝实名身份与当前 App 用户一致”。能否完成本人一致性校验,取决于支付宝开放平台向该应用提供的产品能力、返回字段、签约权限和服务端核验方式。不要仅凭授权成功,就在产品中宣称已经完成实名认证。
最终建议
可以保留 AlipaySDK,但要将用途严格限定在提现账户授权,并确保不调用支付接口、不提供外部购买引导,同时在审核备注中清楚说明授权路径和资金场景。
如果条件允许,提交前再检查当前 SDK 版本的隐私清单、依赖组件和实际网络请求,并准备一段完整的授权操作录屏。进入人工复核后,这些材料可以帮助审核人员确认,该功能用于提现账户校验,并非规避 Apple 支付规则。
备注:内容仅供参考。
