在React Native

时间:2017-05-11 19:05:59

标签: javascript android facebook react-native react-native-android

我试图通过Facebook和Twitter登录我的用户,验证过程在API中,所以我显示了facebook(或twitter)登录页面,当用户登录whit凭据时,API返回令牌。

问题是当我尝试在Android中测试时,不要重定向到主视图。我正在阅读并说可能是我如何注入javascript代码,但似乎没有任何效果。

然后认为可能是AndroidManifest中的uri方案,问题是回调网址是这样的:

http://ciudad-facil.perceptum.cl/callback/facebook?code=AQDtuj5zh0dCUDLG2akn5tomvwUK53GQEmpS9pOkl49JKRLyu92UHAP21XsKPhBUkii--pD5yW66K5mfPx_cxz3-bYRxEQOveiHvHMdtYD2RLCHJVEdig04dj3QtVVRQvXDHV0ym18Iyua-IWJEdwNA_cy1liQnDxAcFxPw7mtGiVGcmZVkEf0Wv4VzujocPjiLLJR6bdvV5neQYjJD9mcOeM6V4NUoegIGymt735Oag8CFWret-7rQ6xas2J4ZKztd_POl6u93aPUusHbonFxGvPMfKuUXiwbB64gIi_eI_AWIKowBWH6a0hUp3AxjvDuU&state=OVzqhRIJaemJYaVRvgqNTZ7i2A4f6zc6UGbdXpbl#=

但是在计划中我有这样的事情:

<data  android:host="www.ciudad-facil.perceptum.cl"
   android:pathPrefix="/callback/facebook"
   android:scheme="http" />

但是不起作用,这是我用来向用户显示页面的代码:

  _onMessage = ( event ) => {
console.log('entro');
  var response = event.nativeEvent.data;
  if (response != '') {
    response = JSON.parse(response);
    console.log(response);
    try {
      AsyncStorage.setItem('auth_token', response.token);
      AsyncStorage.setItem('created_user', (response.created).toString());
      global.auth_token = response.token;
    } catch (error) {
      console.log('AsyncStorage error: ' + error.message);
    }

    Actions.Main();
  }

}

  render() {
var jsCode = "window.postMessage(document.getElementsByTagName('PRE')[0].innerHTML)";
return (
      <WebView
        source={{ uri: this.state.authUrl }}
        onMessage={this._onMessage}
        injectedJavaScript={jsCode}
        startInLoadingState={true}
      />
);

}

PD:在iOS中,这非常有效。问题只是Android

1 个答案:

答案 0 :(得分:1)

这适用于每个人,通过相同的。解决方案是:

首先,在AndroidManifest上设置方案,例如:

<data android:host="www.xxxxx.com"/>

然后,当您使用Android时,注入JS代码的形式是:

window.__REACT_WEB_VIEW_BRIDGE.postMessage(....)

所以是的,这就是解决方案。