| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /*
- * Copyright 2019 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #import "FirebaseSegmentation/Sources/Private/FIRSegmentationComponent.h"
- #import "FirebaseCore/Sources/Private/FIRAppInternal.h"
- #import "FirebaseCore/Sources/Private/FIRComponentContainer.h"
- #import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
- #import "FirebaseSegmentation/Sources/Private/FIRSegmentationInternal.h"
- #import "FirebaseSegmentation/Sources/SEGSegmentationConstants.h"
- #ifndef FIRSegmentation_VERSION
- #error "FIRSegmentation_VERSION is not defined: \
- add -DFIRSegmentation_VERSION=... to the build invocation"
- #endif
- #define STR(x) STR_EXPAND(x)
- #define STR_EXPAND(x) #x
- @implementation FIRSegmentationComponent
- /// Default method for retrieving a Segmentation instance, or creating one if it doesn't exist.
- - (FIRSegmentation *)segmentation {
- // Validate the required information is available.
- FIROptions *options = self.app.options;
- NSString *errorPropertyName;
- if (options.googleAppID.length == 0) {
- errorPropertyName = @"googleAppID";
- } else if (options.GCMSenderID.length == 0) {
- errorPropertyName = @"GCMSenderID";
- }
- if (errorPropertyName) {
- [NSException
- raise:kFirebaseSegmentationErrorDomain
- format:@"%@",
- [NSString
- stringWithFormat:
- @"Firebase Segmentation is missing the required %@ property from the "
- @"configured FirebaseApp and will not be able to function properly. Please "
- @"fix this issue to ensure that Firebase is correctly configured.",
- errorPropertyName]];
- }
- FIRSegmentation *instance = self.segmentationInstance;
- if (!instance) {
- instance = [[FIRSegmentation alloc] initWithAppName:self.app.name FIROptions:self.app.options];
- self.segmentationInstance = instance;
- }
- return instance;
- }
- /// Default initializer.
- - (instancetype)initWithApp:(FIRApp *)app {
- self = [super init];
- if (self) {
- _app = app;
- if (!_segmentationInstance) {
- _segmentationInstance = [[FIRSegmentation alloc] initWithAppName:app.name
- FIROptions:app.options];
- }
- }
- return self;
- }
- #pragma mark - Lifecycle
- + (void)load {
- // Register as an internal library to be part of the initialization process. The name comes from
- // go/firebase-sdk-platform-info.
- [FIRApp registerInternalLibrary:self
- withName:@"fire-seg"
- withVersion:[NSString stringWithUTF8String:STR(FIRSegmentation_VERSION)]];
- }
- #pragma mark - Interoperability
- + (NSArray<FIRComponent *> *)componentsToRegister {
- FIRComponent *segProvider = [FIRComponent
- componentWithProtocol:@protocol(FIRSegmentationProvider)
- instantiationTiming:FIRInstantiationTimingAlwaysEager
- dependencies:@[]
- creationBlock:^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) {
- // Cache the component so instances of Segmentation are cached.
- *isCacheable = YES;
- return [[FIRSegmentationComponent alloc] initWithApp:container.app];
- }];
- return @[ segProvider ];
- }
- @synthesize instances;
- @end
|