Proyectos de Subversion Iphone Microlearning

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
/*
2
 * Copyright 2018 Google
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
 
17
#import <TargetConditionals.h>
18
#if TARGET_OS_IOS || TARGET_OS_TV
19
 
20
#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
21
 
22
#import "FirebaseInAppMessaging/Sources/FIRCore+InAppMessaging.h"
23
#import "FirebaseInAppMessaging/Sources/Private/Runtime/FIRIAMSDKModeManager.h"
24
 
25
NSString *FIRIAMDescriptonStringForSDKMode(FIRIAMSDKMode mode) {
26
  switch (mode) {
27
    case FIRIAMSDKModeTesting:
28
      return @"Testing Instance";
29
    case FIRIAMSDKModeRegular:
30
      return @"Regular";
31
    case FIRIAMSDKModeNewlyInstalled:
32
      return @"Newly Installed";
33
    default:
34
      FIRLogWarning(kFIRLoggerInAppMessaging, @"I-IAM290003", @"Unknown sdk mode value %d",
35
                    (int)mode);
36
      return @"Unknown";
37
  }
38
}
39
 
40
@interface FIRIAMSDKModeManager ()
41
@property(nonatomic, nonnull, readonly) NSUserDefaults *userDefaults;
42
// Make it weak so that we don't depend on its existence to avoid circular reference.
43
@property(nonatomic, readonly, weak) id<FIRIAMTestingModeListener> testingModeListener;
44
@end
45
 
46
NSString *const kFIRIAMUserDefaultKeyForSDKMode = @"firebase-iam-sdk-mode";
47
NSString *const kFIRIAMUserDefaultKeyForServerFetchCount = @"firebase-iam-server-fetch-count";
48
NSInteger const kFIRIAMMaxFetchInNewlyInstalledMode = 5;
49
 
50
@implementation FIRIAMSDKModeManager {
51
  FIRIAMSDKMode _sdkMode;
52
  NSInteger _fetchCount;
53
}
54
 
55
- (instancetype)initWithUserDefaults:(NSUserDefaults *)userDefaults
56
                 testingModeListener:(id<FIRIAMTestingModeListener>)testingModeListener {
57
  if (self = [super init]) {
58
    _userDefaults = userDefaults;
59
    _testingModeListener = testingModeListener;
60
 
61
    id modeEntry = [_userDefaults objectForKey:kFIRIAMUserDefaultKeyForSDKMode];
62
    if (modeEntry == nil) {
63
      // no entry yet, it's a newly installed sdk instance
64
      _sdkMode = FIRIAMSDKModeNewlyInstalled;
65
 
66
      // initialize the mode and fetch count in the persistent storage
67
      [_userDefaults setObject:[NSNumber numberWithInteger:_sdkMode]
68
                        forKey:kFIRIAMUserDefaultKeyForSDKMode];
69
      [_userDefaults setInteger:0 forKey:kFIRIAMUserDefaultKeyForServerFetchCount];
70
    } else {
71
      _sdkMode = [(NSNumber *)modeEntry integerValue];
72
      _fetchCount = [_userDefaults integerForKey:kFIRIAMUserDefaultKeyForServerFetchCount];
73
    }
74
 
75
    FIRLogDebug(kFIRLoggerInAppMessaging, @"I-IAM290001",
76
                @"SDK is in mode of %@ and has seen %d fetches.",
77
                FIRIAMDescriptonStringForSDKMode(_sdkMode), (int)_fetchCount);
78
  }
79
  return self;
80
}
81
 
82
// inform the manager that one more fetch is done. This is to allow
83
// the manager to potentially graduate from the newly installed mode.
84
- (void)registerOneMoreFetch {
85
  // we only care about the fetch count when sdk is in newly installed mode (so that it may
86
  // graduate from that after certain number of fetches).
87
  if (_sdkMode == FIRIAMSDKModeNewlyInstalled) {
88
    if (++_fetchCount >= kFIRIAMMaxFetchInNewlyInstalledMode) {
89
      FIRLogDebug(kFIRLoggerInAppMessaging, @"I-IAM290002",
90
                  @"Coming out of newly installed mode since there have been %d fetches",
91
                  (int)_fetchCount);
92
 
93
      _sdkMode = FIRIAMSDKModeRegular;
94
      [_userDefaults setObject:[NSNumber numberWithInteger:_sdkMode]
95
                        forKey:kFIRIAMUserDefaultKeyForSDKMode];
96
    } else {
97
      [_userDefaults setInteger:_fetchCount forKey:kFIRIAMUserDefaultKeyForServerFetchCount];
98
    }
99
  }
100
}
101
 
102
- (void)becomeTestingInstance {
103
  _sdkMode = FIRIAMSDKModeTesting;
104
  [_userDefaults setObject:[NSNumber numberWithInteger:_sdkMode]
105
                    forKey:kFIRIAMUserDefaultKeyForSDKMode];
106
 
107
  FIRLogDebug(kFIRLoggerInAppMessaging, @"I-IAM290004",
108
              @"Test mode enabled, notifying test mode listener.");
109
  [self.testingModeListener testingModeSwitchedOn];
110
}
111
 
112
// returns the current SDK mode
113
- (FIRIAMSDKMode)currentMode {
114
  return _sdkMode;
115
}
116
@end
117
 
118
#endif  // TARGET_OS_IOS || TARGET_OS_TV