5.5 KiB
iOS Installation
1) Setup GoogleService-Info.plist
Setup the GoogleService-Info.plist
file by following the instructions and adding it to the root of your project at ios/[YOUR APP NAME]/GoogleService-Info.plist
here.
1.1) Initialisation
Make sure you've added the following to the top of your ios/[YOUR APP NAME]]/AppDelegate.m
file:
#import <Firebase.h>
and this to the didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
method before the return
statement:
[FIRApp configure];
2) Setup RNFirebase
Unfortunately, due to the fact that Firebase is much easier to setup using Cocoapods, we do not recommend react-native link
as it is not customisable enough for our needs and we have had numerous problems reported.
2.0) If you don't already have Cocoapods set up
Follow the instructions to install Cocoapods and create your Podfile here.
NOTE: The Podfile needs to be initialised in the ios
directory of your project.
Troubleshooting
- When running
pod install
you may encounter an error saying that atvOSTests
target is declared twice. This appears to be a bug withpod init
and the way that react native is set up.
Resolution:
- Open your Podfile
- Remove the duplicate
tvOSTests
target nested within the main project target - Re-run
pod install
.
- When running
pod install
you may encounter a number of warnings relating totarget overrides 'OTHER_LDFLAGS'
.
Resolution:
- Open Xcode
- Select your project
- For each target:
-- Select the target
-- Click Build settings
-- Search for
other linker flags
-- Add$(inherited)
as the top line if it doesn't already exist - Re-run
pod install
- When running
pod install
you may encounter a warning that a default iOS platform has been assigned. If you wish to specify a different minimum version:
Resolution
- Open your Podfile
- Uncomment the
# platform :ios, '9.0'
line by removing the#
character - Change the version as required
2.1) Add the required pods
Simply add the following to your Podfile
either at the top level, or within the main project target:
# Required by RNFirebase
pod 'Firebase/Auth'
pod 'Firebase/Analytics'
pod 'Firebase/Core'
pod 'Firebase/Crash'
pod 'Firebase/Database'
pod 'Firebase/DynamicLinks'
pod 'Firebase/Messaging'
pod 'Firebase/RemoteConfig'
pod 'Firebase/Storage'
pod 'RNFirebase', :path => '../node_modules/react-native-firebase'
If you are new to Cocoapods or do not already have React installed as a pod, then add Yoga and React to your Podfile
as follows:
pod "Yoga", :path => "../node_modules/react-native/ReactCommon/yoga"
pod 'React', :path => '../node_modules/react-native', :subspecs => [
'BatchedBridge', # Required For React Native 0.45.0+
'Core',
# Add any other subspecs you want to use in your project
]
Run pod install
.
NOTE: You need to use the ios/[YOUR APP NAME].xcworkspace
instead of the ios/[YOUR APP NAME].xcproj
file from now on.
Troubleshooting
- You receive an error
No podspec found for 'RNFirebase'
Resolution
- Run
npm install --save react-native-firebase
from the root of your project
3) Cloud Messaging (optional)
If you plan on using Firebase Cloud Messaging then, you need to:
NOTE: FCM does not work on the iOS simulator, you must test is using a real device. This is a restriction enforced by Apple for some unknown reason.
3.1) Set up certificates
Follow the instructions at https://firebase.google.com/docs/cloud-messaging/ios/certs
3.2) Enable capabilities
In Xcode, enable the following capabilities:
- Push Notifications
- Background modes > Remote notifications
3.3) Update AppDelegate.h
Add the following import:
@import UserNotifications;
Change the interface descriptor to:
@interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate>
3.4) Update AppDelegate.m
Add the following import:
#import "RNFirebaseMessaging.h"
Add the following to the didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
method after [FIRApp Configure]
:
[[UNUserNotificationCenter currentNotificationCenter] setDelegate:self];
Add the following methods:
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
{
[RNFirebaseMessaging willPresentNotification:notification withCompletionHandler:completionHandler];
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)())completionHandler
{
[RNFirebaseMessaging didReceiveNotificationResponse:response withCompletionHandler:completionHandler];
}
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
[RNFirebaseMessaging didReceiveLocalNotification:notification];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo
fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{
[RNFirebaseMessaging didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}