uni-app iPad使用 Sign in with Apple 功能无反应

发布于 1周前 作者 eggper 来自 Uni-App

uni-app iPad使用 Sign in with Apple 功能无反应

项目信息 详细信息
产品分类 uniapp/App
PC开发环境 Mac
PC开发环境版本 14.6.1
HBuilderX类型 正式
HBuilderX版本 4.24
手机系统 iOS
手机系统版本 iOS 17
手机厂商 苹果
手机机型 iPad Air (第5代)
页面类型 nvue
Vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

操作步骤:

  • 只要在iPad上使用Sign in with Apple都会无法使用

预期结果:

  • iPad上使用 Sign in with Apple 功能正常

实际结果:

  • iPad上使用 Sign in with Apple 功能失败

bug描述:

苹果审核反馈:

  • 该应用程序存在一个或多个会对 App Store 用户产生负面影响的错误。
  • 错误描述:在我们点击 Continue with Apple 后没有产生任何操作。

这个按钮实现的就是 “Sign in with Apple” 的功能,iPhone真机上测试,Sign in with Apple都是成功的,iPad没有测试过,苹果审核就有问题;

  • 是否是因为在XCode上设置只适配iPhone(因为增加适配iPad,需要上传iPad的产品图,还要做界面适配),如果是因为这个原因,请帮忙在文档中描述一下,好让未来不再有更多的人遇到一样的问题。

3 回复

楼主解决了吗,我也遇到这个问题 Guideline 2.1 - Performance - App Completeness Issue Description
The app exhibited one or more bugs that would negatively impact App Store users.
Bug description: The app did not respond after we entered the credentials for Sign In with Apple.
Review device details:

Device type: iPad Air (5th generation)

OS version: iPadOS 18.0.1


你好,我也遇到了这个问题,你是怎么解决的呢?

在处理uni-app在iPad上使用“Sign in with Apple”功能无反应的问题时,我们需要确保几个关键点:Apple ID的登录授权配置正确、前端代码能够正确触发登录流程、以及后端服务能够正确处理Apple的登录认证。以下是一个简化的代码案例,用于展示如何在uni-app中实现“Sign in with Apple”功能,并处理可能的错误。

前端代码(uni-app)

首先,确保你的uni-app项目已经集成了Apple的登录SDK(虽然uni-app本身不直接支持Apple登录,但你可以通过原生插件或web方式间接实现)。这里我们假设你使用的是web方式,通过Apple的JavaScript API来实现。

// 在需要触发登录的页面或组件中
methods: {
    async signInWithApple() {
        if (!window.AppleID) {
            console.error('AppleID API is not available');
            return;
        }

        try {
            const authorizationResponse = await AppleID.auth.init({
                clientId: 'com.yourapp.id', // 替换为你的Apple开发者账号中的Client ID
                scope: 'name email',
                redirectURI: 'https://yourapp.com/auth/apple/callback' // 替换为你的回调URL
            });

            if (authorizationResponse.user) {
                // 用户已登录,获取用户信息
                const userInfo = authorizationResponse.user;
                console.log('Apple User Info:', userInfo);
                // 发送用户信息到后端进行进一步处理
            } else {
                // 用户未登录,重定向到Apple登录页面
                window.location = authorizationResponse.authorizationURL;
            }
        } catch (error) {
            console.error('AppleID login error:', error);
        }
    }
}

后端代码(示例,假设使用Node.js)

在后端,你需要接收来自Apple的登录回调,并验证JWT(JSON Web Token)。

const jwt = require('jsonwebtoken');
const fetch = require('node-fetch');

// Apple的公钥URL
const publicKeyUrl = 'https://appleid.apple.com/auth/keys';

async function verifyAppleToken(token) {
    const publicKeys = await fetch(publicKeyUrl).then(res => res.json());
    const kid = jwt.decode(token, { complete: true }).header.kid;
    const publicKey = publicKeys.keys.find(key => key.kid === kid).x5w;
    
    try {
        const decoded = jwt.verify(token, publicKey, { algorithms: ['ES256'] });
        console.log('Decoded Apple Token:', decoded);
        // 根据解码后的信息处理用户登录逻辑
    } catch (error) {
        console.error('Failed to verify Apple token:', error);
    }
}

// 在回调路由中调用verifyAppleToken函数
// app.post('/auth/apple/callback', (req, res) => { ... });

注意

  1. 替换示例代码中的clientIdredirectURI等参数为你的实际值。
  2. 确保你的应用已在Apple开发者网站正确配置了Sign in with Apple功能。
  3. 前后端代码需根据具体情况进行调整,特别是错误处理和用户信息存储部分。

以上代码提供了一个基本的实现框架,帮助你解决uni-app在iPad上使用“Sign in with Apple”功能无反应的问题。

回到顶部