反应原生Apple登录卡在IOS的输入密码屏幕中?

Posted

技术标签:

【中文标题】反应原生Apple登录卡在IOS的输入密码屏幕中?【英文标题】:React native Apple login stuck in enter password screen in IOS? 【发布时间】:2021-03-31 20:22:56 【问题描述】:

ios 中输入密码后显示加载,之后没有任何反应。没有控制台日志?在 android 中运行良好。

我已经实现了 React Native Apple 身份验证的 V2 https://github.com/invertase/react-native-apple-authentication

在同一问题下尝试了 2 个代码。

代码 1

  const IOSAppleLogin = async () => 
        try 
            // performs login request
            const appleAuthRequestResponse = await appleAuth.performRequest(
                requestedOperation: appleAuth.Operation.LOGIN,
                requestedScopes: [appleAuth.Scope.EMAIL, appleAuth.Scope.FULL_NAME]
            );
    
            const credentialState = await appleAuth.getCredentialStateForUser(
                appleAuthRequestResponse.user
            );
    

            if (credentialState === appleAuth.State.AUTHORIZED) 

            console.log('appleAuthRequestResponse', appleAuthRequestResponse);
           
            const response = appleAuthRequestResponse;
            console.log('apple-response', response);
            // you may also want to send the device's ID to your server to link a device with the account
            // identityToken generated


            if (response) 
                if (response.identityToken) 
                    let device_identifier = DeviceInfo.getUniqueId();
                    let details = 
                        'identity_token': response.identityToken,
                        'first_name': response.fullName ? response.fullName.givenName : '-',
                        'last_name': response.fullName ? response.fullName.familyName : '-',
                        'device_identifier': device_identifier,
                        device: Platform.OS
                    ;
                    props.appleLogin( values: details );
                
            
            // user is authenticated
            

         catch (error) 
            if (appleAuth.Error.CANCELED === error.code) 
                console.log('apple-error-CANCELED', JSON.stringify(error));
             else if (appleAuth.Error.FAILED === error.code) 
                console.log('apple-error-FAILED', error);
             else if (appleAuth.Error.NOT_HANDLED === error.code) 
                console.log('apple-error-NOT_HANDLED', error);
             else 
                console.log('apple-error', error);
            
        
    

代码 2

  const IOSAppleLogin = async () => 
        try 
            // performs login request
            const appleAuthRequestResponse = await appleAuth.performRequest(
                requestedOperation: appleAuth.Operation.LOGIN,
                requestedScopes: [appleAuth.Scope.EMAIL, appleAuth.Scope.FULL_NAME]
            );
    

            console.log('appleAuthRequestResponse', appleAuthRequestResponse);
           
            const response = appleAuthRequestResponse;
            console.log('apple-response', response);
            // you may also want to send the device's ID to your server to link a device with the account
            // identityToken generated


            if (response) 
                if (response.identityToken) 
                    let device_identifier = DeviceInfo.getUniqueId();
                    let details = 
                        'identity_token': response.identityToken,
                        'first_name': response.fullName ? response.fullName.givenName : '-',
                        'last_name': response.fullName ? response.fullName.familyName : '-',
                        'device_identifier': device_identifier,
                        device: Platform.OS
                    ;
                    props.appleLogin( values: details );
                
            
            // user is authenticated

         catch (error) 
            if (appleAuth.Error.CANCELED === error.code) 
                console.log('apple-error-CANCELED', JSON.stringify(error));
             else if (appleAuth.Error.FAILED === error.code) 
                console.log('apple-error-FAILED', error);
             else if (appleAuth.Error.NOT_HANDLED === error.code) 
                console.log('apple-error-NOT_HANDLED', error);
             else 
                console.log('apple-error', error);
            
        
    

【问题讨论】:

【参考方案1】:

当我尝试在模拟器上运行代码时,这也发生在我身上,在真实设备上尝试它会起作用。 不要忘记在 Signing & Capabilities 中为发布和调试应用添加 Sign In with Apple。为此,您应该有一个 ADP 帐户。

谢谢。

【讨论】:

【参考方案2】:

我也遇到过这种情况。在这里找到解决方案https://github.com/invertase/react-native-apple-authentication/issues/162#issuecomment-723502035。

基本上,如果您在模拟器上使用 iOS 13,或者在真实设备上使用 iOS 14。

【讨论】:

以上是关于反应原生Apple登录卡在IOS的输入密码屏幕中?的主要内容,如果未能解决你的问题,请参考以下文章

将 iOS 中的 AsyncStorage 与 Apple Watch 反应原生应用

在 Ios 中反应原生 Google 登录问题

OneNote无法登陆一直在登录界面

世博会苹果登录反应原生返回空值

我如何访问 iOS 项目的 NSUserDefault 以做出原生反应?

反应原生 Firebase 不保留用户信息