iOS React Native Firebase(Invertase)Google登录构建失败

时间:2018-08-08 22:10:06

标签: ios firebase react-native google-signin react-native-ios

我一直在尝试通过inverstase软件包使React Native Firebase Google登录工作。我已按照文档顺序进行阅读,并按其他顺序进行操作,例如从SDK入手

  1. https://rnfirebase.io/docs/v4.3.x/auth/social-auth#Google
  2. https://github.com/react-native-community/react-native-google-signin
  3. https://github.com/react-native-community/react-native-google-signin/blob/master/ios-guide.md

我的项目设置如下:

Podfile

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'giftdrop' do
  ### GOOGLE MAPS ###
  rn_path = '../node_modules/react-native'
  rn_maps_path = '../node_modules/react-native-maps'

  # See http://facebook.github.io/react-native/docs/integration-with-existing-apps.html#configuring-cocoapods-dependencies
  pod 'yoga', path: "#{rn_path}/ReactCommon/yoga/yoga.podspec"
  pod 'React', path: rn_path, subspecs: [
    'Core',
    'CxxBridge',
    'DevSupport',
    'RCTActionSheet',
    'RCTAnimation',
    'RCTGeolocation',
    'RCTImage',
    'RCTLinkingIOS',
    'RCTNetwork',
    'RCTSettings',
    'RCTText',
    'RCTVibration',
    'RCTWebSocket',
  ]

  # React Native third party dependencies podspecs
  pod 'DoubleConversion', :podspec => "#{rn_path}/third-party-podspecs/DoubleConversion.podspec"
  pod 'glog', :podspec => "#{rn_path}/third-party-podspecs/glog.podspec"
  # If you are using React Native <0.54, you will get the following error:
  # "The name of the given podspec `GLog` doesn't match the expected one `glog`"
  # Use the following line instead:
  #pod 'GLog', :podspec => "#{rn_path}/third-party-podspecs/GLog.podspec"
  pod 'Folly', :podspec => "#{rn_path}/third-party-podspecs/Folly.podspec"

  # react-native-maps dependencies
  pod 'react-native-maps', path: rn_maps_path
  pod 'react-native-google-maps', path: rn_maps_path  # Remove this line if you don't want to support GoogleMaps on iOS
  pod 'GoogleMaps'  # Remove this line if you don't want to support GoogleMaps on iOS
  pod 'Google-Maps-iOS-Utils' # Remove this line if you don't want to support GoogleMaps on iOS

  ### FIREBASE ###
  pod 'Firebase/Core'
  pod 'Firebase/Firestore'
  pod 'Firebase/Auth'
  pod 'RNShare', :path => '../node_modules/react-native-share'
  pod 'Firebase/Messaging'

  pod 'react-native-version-number', :path => '../node_modules/react-native-version-number'

  pod 'GoogleSignIn'

  pod 'RNGoogleSignin', :path => '../node_modules/react-native-google-signin'

end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == 'react-native-google-maps'
      target.build_configurations.each do |config|
        config.build_settings['CLANG_ENABLE_MODULES'] = 'No'
      end
    end
    if target.name == "React"
      target.remove_from_project
    end
  end
end

AppDelegate.m

#import "AppDelegate.h"
#import <Fabric/Fabric.h>
#import <Crashlytics/Crashlytics.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
#import <React/RCTLinkingManager.h>
#import <Firebase.h>
#import <React/RCTPushNotificationManager.h> // NPM module Notifications
#import "RNFirebaseNotifications.h" // Firebase Notifications
#import "RNFirebaseMessaging.h" // Firebase remote Notifications
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import "RNGoogleSignin.h"
@import GoogleMaps;

@implementation AppDelegate

- (void)applicationDidBecomeActive:(UIApplication *)application {
  [FBSDKAppEvents activateApp];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [FIRApp configure];
  [[FBSDKApplicationDelegate sharedInstance] application:application
    didFinishLaunchingWithOptions:launchOptions];

  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  if (![defaults boolForKey:@"notFirstRun"]) {
    [defaults setBool:YES forKey:@"notFirstRun"];
    [defaults synchronize];
    [[FIRAuth auth] signOut:NULL];
  }

  [RNFirebaseNotifications configure]; // Firebase Notifications
  NSURL *jsCodeLocation;
  [GMSServices provideAPIKey:@"AIzaSyDLSohfIWoBOSmzpAHUqDSL-puku7LDP6U"];

  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];

  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                      moduleName:@"giftdrop"
                                               initialProperties:nil
                                                   launchOptions:launchOptions];
  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];

  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  UIViewController *rootViewController = [UIViewController new];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];
  [Fabric with:@[[Crashlytics class]]];

  return YES;
}
// deeplinking for fb and normal
- (BOOL)application:(UIApplication *)application 
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
            sourceApplication:(NSString *)sourceApplication 
            annotation:(id)annotation {


  BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application
                                                        openURL:url
                                              sourceApplication:sourceApplication
                                                     annotation:annotation
         ]
         || [RNGoogleSignin application:application
                                openURL:url
                      sourceApplication:sourceApplication
                             annotation:annotation
            ];

  return handled || [RCTLinkingManager application:application openURL:url
                      sourceApplication:sourceApplication annotation:annotation];
}

 // Required for the register event.
 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
 {
  [RCTPushNotificationManager didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
 }

 // Required for the registrationError event.
 - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
 {
  [RCTPushNotificationManager didFailToRegisterForRemoteNotificationsWithError:error];
 }
 // Required for the localNotification event.
 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
 {
  [RCTPushNotificationManager didReceiveLocalNotification:notification];
 }

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo
                                                       fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{
  [[RNFirebaseNotifications instance] didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
  [[RNFirebaseMessaging instance] didRegisterUserNotificationSettings:notificationSettings];
}


@end

框架 enter image description here

URL类型 为了安全起见,我更改了字符串,但我是从GoogleInfo.plist获得的,字符串是REVERSED_CLIENT_ID enter image description here

链接库 enter image description here

框架搜索路径 根据文档添加的字符串已添加到发布和调试中

enter image description here

Firebase本身可以正常工作,就像Facebook SDK一样,但是无论我怎么做,我的项目都无法构建,并根据我的工作顺序而出现各种错误。

最常见的是CFBundler错误,重复的库,有时没有错误只是构建失败

更新 似乎Xcode正在报告#import“ RNGoogleSignin.h”未找到

1 个答案:

答案 0 :(得分:1)

我必须手动链接项目及其库来解决此问题,如此处https://github.com/react-native-community/react-native-google-signin中的文档所示

第二,我还必须将#import "RNGoogleSignin.h"设置为#import <GoogleSignIn/GoogleSignIn.h>,这与文档不同。