有效登录后,React Native iOS“ Safari无法打开页面,因为地址无效”

时间:2018-11-27 03:47:34

标签: ios reactjs react-native auth0 info.plist

成功登录后获取以下信息。登录流程可以在Android上正常运行,并且可以正确返回令牌,刷新等...

“由于地址无效,Safari无法打开页面”

Screen Recording of Error

Auth0回调配置

Info.plist

...
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>None</string>
        <key>CFBundleURLName</key>
        <string>auth0</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        </array>
    </dict>
</array>
...

AppDeligate.m

...
#import <React/RCTLinkingManager.h>
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
  return [RCTLinkingManager application:application openURL:url
                      sourceApplication:sourceApplication annotation:annotation];
}
...

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题(使用Auth0时,答案取决于他们在此处提供的解决方案-https://auth0.com/docs/quickstart/native/react-native

此外,这里还有另一个答案的一些输入-"Safari cannot open the page because the address is invalid" appearing when accessing Branch link with app uninstalled

最终,归结为这一点

  1. 从iOS 9.2开始,Apple不再正式支持用于深层链接的URI方案,并且强烈建议开发人员实现通用链接以在iOS上获得等效功能
  2. 要克服这一点,您必须启用此应用程序链接才能正常工作。一种选择是(请检查链接堆栈的答案)希望发生这种情况的服务提供商将提供通用链接。

另一个选项(下面的代码段)是添加“ URLScheme”

#import <React/RCTLinkingManager.h>

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
  return [RCTLinkingManager application:app openURL:url options:options];
}

第二步

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>None</string>
        <key>CFBundleURLName</key>
        <string>auth0</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        </array>
    </dict>
</array>

对我来说,这就是解决此问题的原因(使用Auth0库时,但是无论使用哪种库,都应该使用类似的东西)。这从根本上克服了Apple / iOS对应用程序链接的限制,这就是您出现原始safari错误的原因。