Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在React Native中从应用程序本身的Web视图重定向到移动应用程序_Javascript_Android_React Native_Webview_Oauth 2.0 - Fatal编程技术网

Javascript 在React Native中从应用程序本身的Web视图重定向到移动应用程序

Javascript 在React Native中从应用程序本身的Web视图重定向到移动应用程序,javascript,android,react-native,webview,oauth-2.0,Javascript,Android,React Native,Webview,Oauth 2.0,我正在构建一个android应用程序,它需要来自外部身份验证提供者的身份验证。所以我使用这个包来处理这个问题 定义的重定向uri是一个深度链接,理想情况下,它应该在成功身份验证后打开我的应用程序本身。但是WebView似乎无法处理此重定向,我得到的响应是404页面未找到 这是我为处理身份验证而编写的服务: const manager = new OAuthManager('<app_name>') manager.addProvider({ 'pr

我正在构建一个android应用程序,它需要来自外部身份验证提供者的身份验证。所以我使用这个包来处理这个问题

定义的重定向uri是一个深度链接,理想情况下,它应该在成功身份验证后打开我的应用程序本身。但是WebView似乎无法处理此重定向,我得到的响应是404页面未找到

这是我为处理身份验证而编写的服务:

    const manager = new OAuthManager('<app_name>')

    manager.addProvider({
         'provider': {
                  auth_version: '2.0', 
                  authorize_url:'<auth-url>',
                  access_token_url: '<auth-url>/token',
                  callback_url: 'http://localhost/provider',
         }
    });

    manager.configure({
       provider: {
           client_id: '<id>',
           client_secret: '<secret>',
           redirect_uri: '<redirect-uri>' //DEEP LINK HERE
      }
    });
   module.exports = {
      authManager: () => {
      manager.authorize('<provider>')
                        .then(resp => console.log(resp))
                        .catch(err => console.log(err));    
                    }
   }
const manager=new OAuthManager(')。使用应用程序组件中的Linking.openURL()打开深度链接时,深度链接可以正常工作


非常感谢您在这方面提供的任何帮助。

您不能直接将重定向uri设置为移动应用程序(因为大多数身份验证提供商不支持自定义OAuth方案)

但您可以创建一些网页,接受OAuth提供商的重定向,并打开您的应用程序(并发送所有重定向参数,如
token

例如,您创建页面
https://example.com/oauth/
,并将
回调\u url
设置为
https://example.com/oauth/XXXXX_provider
,所以当用户将被重定向到页面
https://example.com/oauth/XXXXX_provider&token=xxx
它将使用
appN打开您的应用程序ame://example/oauth/google?token=xxx

您可以处理
appName://example/oauth/google?token=xxx
使用(安装在设备上时,将打开您的移动应用程序)

处理重定向的页面示例:


请稍候,我们正在将你重定向到你的应用程序名称

var redirectToApp=函数(){ var scheme=“appnameapp”; var openURL=“appname”+window.location.pathname+window.location.search+window.location.hash; var iOS=/iPad | iPhone | iPod/.test(navigator.userAgent); var Android=/Android/.test(navigator.userAgent); var新定位; 如果(iOS){ newLocation=scheme+“:”+openURL; }else if(安卓){ newLocation=“intent://”+openURL+“#intent;scheme=“+scheme+”;package=com.appnameapp;end”; }否则{ newLocation=scheme+“:/”+openURL; } console.log(newLocation) window.location.replace(新位置); } window.onload=重定向到应用程序;
WebView默认不与Safari/Chrome共享cookie/session数据。因此,它不适合登录流,因为它不使用Chrome/Safari中现有的登录会话

Expo提供了一个将打开Safari/Chrome而不是webview的浏览器。请注意,它将在应用程序内部打开Safari/Chrome,而不是使用
链接
重定向浏览器。因此用户在浏览器中始终有一个按钮返回到您的应用程序

您可以使用
WebBrowser.openAuthSessionAsync(url)
打开安全会话,该会话与设备中的本机浏览器共享cookie/会话信息


Expo还提供了另一个api,它简化了许多样板文件并提供了一个简单的api。

您使用的重定向uri是什么?当您获得404时,webview中的链接是什么?@TarunLalwani重定向uri是app..com/auth,方案是https。web视图中的链接与此相同。请向我提供source编码并分配给我工作。@Codesingh我可以告诉你我期待的问题的细节。我创建了类似这样的东西。它避免了所有RN库的混乱,如
react native fbsdk
react native google signi
。这样,你就可以在服务器端实现一切,并将API令牌传递给你的mo胆汁应用程序与深度链接。