response-native-fbsdk "войти в систему с приложением facebook" не запускает обратный вызов - PullRequest
0 голосов
/ 24 августа 2018

Я использую логин на Facebook в своем приложении на 100% *.Я полагаю, что выполнил все инструкции, но не могу понять, почему не работает «Войти через приложение Facebook».Когда пользователь щелкает это, а не вводит свои учетные данные в веб-представлении, обратный вызов LoginManager, похоже, никогда не срабатывает.

Вот видео о том, что происходит: https://i.imgur.com/1XeJC1o.mp4

ПроблемаПохоже, что это может быть этот в FAQ, но я считаю, что мои AppDelegate.m и Info.plist файлы настроены правильно.

#import "AppDelegate.h"
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
#import <SentryReactNative/RNSentry.h>
#import <GoogleMaps/GoogleMaps.h>
#import <react-native-branch/RNBranch.h>
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <RNGoogleSignin/RNGoogleSignin.h>
#import <CodePush/CodePush.h>
#import <AppCenterReactNativeCrashes/AppCenterReactNativeCrashes.h>
#import <AppCenterReactNativeAnalytics/AppCenterReactNativeAnalytics.h>
#import <AppCenterReactNative/AppCenterReactNative.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [RNBranch initSessionWithLaunchOptions:launchOptions isReferrable:YES];

  NSURL *jsCodeLocation;

  [AppCenterReactNativeCrashes registerWithAutomaticProcessing];  // Initialize AppCenter crashes

  [AppCenterReactNativeAnalytics registerWithInitiallyEnabled:true];  // Initialize AppCenter analytics

  [AppCenterReactNative register];  // Initialize AppCenter 

  [GMSServices provideAPIKey:@"myAPiKey"];

  [[FBSDKApplicationDelegate sharedInstance] application:application 
    didFinishLaunchingWithOptions:launchOptions];

  #ifdef DEBUG
    jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
  #else
    jsCodeLocation = [CodePush bundleURL];
  #endif

  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"downtown" initialProperties:nil launchOptions:launchOptions];

  [RNSentry installWithRootView:rootView];

  rootView.backgroundColor = [[UIColor alloc] initWithRed:0.02 green:0.02 blue:0.02 alpha:1];

  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  UIViewController *rootViewController = [UIViewController new];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];
  return YES;
}

- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url 
        options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
        sourceApplication:(NSString *)sourceApplication
        annotation:(id)annotation {

    BOOL handledBranch = [RNBranch.branch application:application openURL:url sourceApplication:sourceApplication annotation:annotation];

    BOOL handledFB = [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation];

    BOOL handledGoog = [RNGoogleSignin application:application openURL:url sourceApplication:sourceApplication annotation:annotation];

    return handledBranch || handledFB || handledGoog;
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler {
    return [RNBranch continueUserActivity:userActivity];
}

@end

Info.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleDisplayName</key>
    <string>BarCard</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0.1</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>barcard</string>
          <string>downtown</string>
        </array>
      </dict>
      <dict>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>fb$(myFbAppId)</string>
        </array>
      </dict>
      <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>com.googleusercontent.apps.myGoogleKey</string>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>com.googleusercontent.apps.myGoogleKey</string>
        </array>
      </dict>
      <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLIconFile</key>
        <string></string>
        <key>CFBundleURLName</key>
        <string>com.barcard.downtown</string>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>com.barcard.downtown</string>
        </array>
      </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>28</string>
    <key>CodePushDeploymentKey</key>
    <string>$(CODEPUSH_KEY)</string>
    <key>FacebookAppID</key>
    <string>myFbAppId</string>
    <key>FacebookDisplayName</key>
    <string>BarCard by BarCard, Inc</string>
    <key>ITSAppUsesNonExemptEncryption</key>
    <false/>
    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>fbapi</string>
      <string>fb-messenger-share-api</string>
      <string>fbauth2</string>
      <string>fbshareextension</string>
      <string>message</string>
      <string>readdle-spark</string>
      <string>airmail</string>
      <string>ms-outlook</string>
      <string>googlegmail</string>
      <string>inbox-gmail</string>
    </array>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
        <key>localhost</key>
        <dict>
          <key>NSExceptionAllowsInsecureHTTPLoads</key>
          <true/>
        </dict>
      </dict>
    </dict>
    <key>UIBackgroundModes</key>
    <array>
      <string>remote-notification</string>
    </array>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
      <string>armv7</string>
    </array>
  </dict>
</plist>

Любая помощь будет принята с благодарностью!Спасибо.

1 Ответ

0 голосов
/ 10 сентября 2018
 handleFacebookLogin = () => {   
  var that = this
  LoginManager.logInWithReadPermissions(['public_profile', 'email']).then(
    function (result) {
     // console.log(result)
      if (result.isCancelled) {
        alert('Login cancelled')

      }
      else {

        AccessToken.getCurrentAccessToken()
                        .then((user) => {
                         //  alert("Facebook accessToken:\n" + user.accessToken + "\n\naccessTokenSource: " + user.accessTokenSource + "\n\nuserID: " + user.userID)
                         //  console.log(user);
                           return user
                       })
                       .then((user) => {
                           const responseInfoCallback = (error, result) => {
                               if (error) {
                                   console.log(error)
                                  // alert('Error fetching data: ' + error.toString());
                               } else {
                                   console.log(result)
                                  // alert('id: ' + result.id + '\n\nname: ' + result.name + '\n\nfirst_name: ' + result.first_name + '\n\nlast_name: ' + result.last_name + '\n\nemail: ' + result.email);
                                 //  that.nextScreen()

                                  console.log('Name='+result.name+'&lastname='+result.last_name+'&email='+result.email+'&token='+user.accessToken+'&providerName=facebook')


                                    var data = JSON.stringify(result); // result => JSON

                                    fetch(socialmedia login API


                                    , {method: "POST"})
                                        .then((response) => response.json())
                                        .then((responseJson) => {
                                          console.log(responseJson);
                                          that.props.navigation.navigate('drawerStack', {param:responseJson[0]})

                                        })
                                        .catch((error) => {
                                          alert(error)
                                          console.error(error);
                                        });

                                }
                           }

                           const infoRequest = new GraphRequest('/me', {
                               accessToken: user.accessToken,
                               parameters: {
                                   fields: {
                                       string: 'email,name,first_name,last_name'
                                   }
                               }
                           }, responseInfoCallback);

                           // Start the graph request.
                           new GraphRequestManager()
                               .addRequest(infoRequest)
                               .start()

                       })
      }

    },
    function (error) {
      console.log(error)
      Alert.alert('Login fail with error: ' + error)
    }
  )

}
...