aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example/Shared/FIRSampleAppUtilities.m
diff options
context:
space:
mode:
authorGravatar Paul Beusterien <paulbeusterien@google.com>2017-05-15 12:27:07 -0700
committerGravatar Paul Beusterien <paulbeusterien@google.com>2017-05-15 12:27:07 -0700
commit98ba64449a632518bd2b86fe8d927f4a960d3ddc (patch)
tree131d9c4272fa6179fcda6c5a33fcb3b1bd57ad2e /Example/Shared/FIRSampleAppUtilities.m
parent32461366c9e204a527ca05e6e9b9404a2454ac51 (diff)
Initial
Diffstat (limited to 'Example/Shared/FIRSampleAppUtilities.m')
-rw-r--r--Example/Shared/FIRSampleAppUtilities.m113
1 files changed, 113 insertions, 0 deletions
diff --git a/Example/Shared/FIRSampleAppUtilities.m b/Example/Shared/FIRSampleAppUtilities.m
new file mode 100644
index 0000000..a0a4794
--- /dev/null
+++ b/Example/Shared/FIRSampleAppUtilities.m
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2017 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 "FIRSampleAppUtilities.h"
+
+#import <SafariServices/SafariServices.h>
+
+// Plist file name.
+NSString *const kServiceInfoFileName = @"GoogleService-Info";
+// Plist file type.
+NSString *const kServiceInfoFileType = @"plist";
+// GOOGLE_APP_ID key
+NSString *const kGoogleAppIDPlistKey = @"GOOGLE_APP_ID";
+// Dummy plist GOOGLE_APP_ID
+NSString *const kDummyGoogleAppID = @"1:123:ios:123abc";
+// Github Repo URL String
+NSString *const kGithubRepoURLString = @"https://github.com/firebase/firebase-ios-sdk/";
+// Alert contents
+NSString *const kInvalidPlistAlertTitle = @"GoogleService-Info.plist";
+NSString *const kInvalidPlistAlertMessage = @"This sample app needs to be updated with a valid "
+ @"GoogleService-Info.plist file in order to configure "
+ @"Firebase.\n\n"
+ @"Please update the app with a valid plist file, "
+ @"following the instructions in the Firebase Github "
+ @"repository at: %@";
+
+@implementation FIRSampleAppUtilities
+
++ (BOOL)appContainsRealServiceInfoPlist {
+ static BOOL containsRealServiceInfoPlist = NO;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ NSBundle *bundle = [NSBundle mainBundle];
+ containsRealServiceInfoPlist = [self containsRealServiceInfoPlistInBundle:bundle];
+ });
+ return containsRealServiceInfoPlist;
+}
+
++ (BOOL)containsRealServiceInfoPlistInBundle:(NSBundle *)bundle {
+ NSString *bundlePath = bundle.bundlePath;
+ if (!bundlePath.length) {
+ return NO;
+ }
+
+ NSString *plistFilePath = [bundle pathForResource:kServiceInfoFileName
+ ofType:kServiceInfoFileType];
+ if (!plistFilePath.length) {
+ return NO;
+ }
+
+ NSDictionary *plist = [NSDictionary dictionaryWithContentsOfFile:plistFilePath];
+ if (!plist) {
+ return NO;
+ }
+
+ // Perform a very naive validation by checking to see if the plist has the dummy google app id
+ NSString *googleAppID = plist[kGoogleAppIDPlistKey];
+ if (!googleAppID.length) {
+ return NO;
+ }
+ if ([googleAppID isEqualToString:kDummyGoogleAppID]) {
+ return NO;
+ }
+
+ return YES;
+}
+
++ (void)presentAlertForInvalidServiceInfoPlistFromViewController:(UIViewController *)
+ viewController {
+ NSString *message = [NSString stringWithFormat:kInvalidPlistAlertMessage, kGithubRepoURLString];
+ UIAlertController *alertController =
+ [UIAlertController alertControllerWithTitle:kInvalidPlistAlertTitle
+ message:message
+ preferredStyle:UIAlertControllerStyleAlert];
+ UIAlertAction *viewReadmeAction =
+ [UIAlertAction actionWithTitle:@"View Github"
+ style:UIAlertActionStyleDefault
+ handler:^(UIAlertAction * _Nonnull action) {
+ NSURL *githubURL = [NSURL URLWithString:kGithubRepoURLString];
+ [FIRSampleAppUtilities navigateToURL:githubURL fromViewController:viewController];
+
+ }];
+ [alertController addAction:viewReadmeAction];
+
+ UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Close" style:UIAlertActionStyleCancel handler:nil];
+ [alertController addAction:cancelAction];
+
+ [viewController presentViewController:alertController animated:YES completion:nil];
+}
+
++ (void)navigateToURL:(NSURL *)url fromViewController:(UIViewController *)viewController {
+ if ([SFSafariViewController class]) {
+ SFSafariViewController *safariController = [[SFSafariViewController alloc] initWithURL:url];
+ [viewController showDetailViewController:safariController sender:nil];
+ } else {
+ [[UIApplication sharedApplication] openURL:url];
+ }
+}
+
+@end