在React Native中实现Safari View Controller

时间:2019-10-22 12:04:09

标签: react-native sfsafariviewcontroller

我们目前将应用程序上传到苹果商店,并得到以下答案:

  

我们建议实现Safari View Controller API以显示   应用中的网络内容。 Safari View Controller允许   显示URL并从嵌入式检查证书   应用程序中的浏览器,以便客户可以验证网页URL和SSL   证书以确认他们正在输入登录凭据   进入合法页面。

当前,我正在使用此代码从我们的应用中打开网站

Linking.openURL('here-goes-the-url')

所以我有点迷失了苹果这个答案的确切含义。我应该在我的应用程序内使用WebView来显示网站内容吗?我试过了,但是在那儿看不到苹果评论中提到的任何URL或证书。

到目前为止,我发现的是这样的: https://www.npmjs.com/package/react-native-safari-view-controller

但是此回购协议自2年以来一直未维护。

有没有人能使我更清楚审阅者对该答案的含义? 我可以使用

WebBrowser.openBrowserAsync('url')

实现他们想要的?

最诚挚的问候

2 个答案:

答案 0 :(得分:2)

expo-web-browser 提供对系统Web浏览器的访问,并支持处理重定向。在iOS上,根据您调用的方法,它使用 SFSafariViewController SFAuthenticationSession ,在Android上,它使用 ChromeCustomTabs 。从iOS 11开始, SFSafariViewController 不再与Safari共享Cookie,因此,如果您使用WebBrowser进行身份验证,则需要使用 WebBrowser.openAuthSessionAsync ,如果您只是想打开网页(例如您的应用程序隐私政策),然后使用 WebBrowser.openBrowserAsync

https://docs.expo.io/versions/latest/sdk/webbrowser/

参考中的示例代码:-

export default function App() {
  const [result, setResult] = useState(null);

  const _handlePressButtonAsync = async () => {
    let result = await WebBrowser.openBrowserAsync('https://expo.io');
    setResult(result);
  };
  return (
    <View style={styles.container}>
      <Button title="Open WebBrowser" onPress={_handlePressButtonAsync} />
      <Text>{result && JSON.stringify(result)}</Text>
    </View>
  );
}

答案 1 :(得分:1)

现在,通过使用Linking.openURL...,您会将用户发送到外部浏览器(在iOS上为Safari)。

审稿人希望您通过将用户吸引到您的应用程序中,同时仍为他们提供Safari的所有功能,从而提供更好的用户体验。

要执行此操作,您必须使用Safari View Controller(在iOS上),基本上就像在应用中 内打开safari。

即使library you pointed to确实做到了这一点,它也不再维护,仅适用于iOS,因此我会使用更现代的东西也适用于Android:

https://github.com/proyecto26/react-native-inappbrowser