Skip to content

Commit

Permalink
[NT-1836, NT-1841] Add Braze SDK and Feature Flag (#1431)
Browse files Browse the repository at this point in the history
* Add Braze SDK and feature flag

* Test

* Revert

* Run brew doctor

* brew config

* Remove brew config

* Specify GitHub package registry for brew upgrade

* Move environment variable to comment

* Add back mirror specficiation

* Add related CI issue URL

* Register push tokens with Braze (#1434)

Co-authored-by: Yatrik Solanki <yatrik@kickstarter.com>
  • Loading branch information
justinswart and Yatrik Solanki committed Apr 19, 2021
1 parent cc3834b commit 9608e09
Show file tree
Hide file tree
Showing 16 changed files with 138 additions and 6 deletions.
5 changes: 4 additions & 1 deletion Cartfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ github "ReactiveCocoa/ReactiveSwift" == 6.5.0
github "stripe/stripe-ios" == 18.0.0
github "uber/ios-snapshot-test-case" == 6.2.0
github "segmentio/analytics-ios" == 4.1.2
github "appboy/appboy-ios-sdk" == 4.0.2
github "appboy/appboy-segment-ios" == 4.0.0


### Binaries

Expand All @@ -21,4 +24,4 @@ binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseCrashlyticsBinary
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebasePerformanceBinary.json" == 7.4.0
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseProtobufBinary.json" == 7.4.0
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseInAppMessagingBinary.json" == 7.4.0
binary "https://raw.githubusercontent.com/PerimeterX/px-iOS-Framework/master/PerimeterX.json" == 1.13.9
binary "https://raw.githubusercontent.com/PerimeterX/px-iOS-Framework/master/PerimeterX.json" == 1.13.9
4 changes: 3 additions & 1 deletion Cartfile.resolved
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseInAppMessagingBin
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebasePerformanceBinary.json" "7.4.0"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseProtobufBinary.json" "7.4.0"
binary "https://raw.githubusercontent.com/PerimeterX/px-iOS-Framework/master/PerimeterX.json" "1.13.9"
github "Alamofire/Alamofire" "5.4.1"
github "Alamofire/Alamofire" "5.4.2"
github "Alamofire/AlamofireImage" "4.1.0"
github "ReactiveCocoa/ReactiveSwift" "6.5.0"
github "appboy/appboy-ios-sdk" "4.0.2"
github "appboy/appboy-segment-ios" "4.0.0"
github "facebook/facebook-objc-sdk" "v6.5.2"
github "kickstarter/Kickstarter-Prelude" "9118beee2b37fa5fc5a4f56502c1fa99030b9f9e"
github "kickstarter/Kickstarter-ReactiveExtensions" "2fceab5217b819986c7adf7334e27ad6e008b4b6"
Expand Down
3 changes: 3 additions & 0 deletions Carthage-xcfilelist/app-input-files.xcfilelist
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@

$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework
$(SRCROOT)/Carthage/Build/iOS/AlamofireImage.framework
$(SRCROOT)/Carthage/Build/iOS/Appboy_iOS_SDK.framework
$(SRCROOT)/Carthage/Build/iOS/FBSDKCoreKit.framework
$(SRCROOT)/Carthage/Build/iOS/FBSDKLoginKit.framework
$(SRCROOT)/Carthage/Build/iOS/Optimizely.framework
$(SRCROOT)/Carthage/Build/iOS/Prelude.framework
$(SRCROOT)/Carthage/Build/iOS/Prelude_UIKit.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveExtensions.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework
$(SRCROOT)/Carthage/Build/iOS/SDWebImage.framework
$(SRCROOT)/Carthage/Build/iOS/Segment.framework
$(SRCROOT)/Carthage/Build/iOS/Segment_Appboy.framework
$(SRCROOT)/Carthage/Build/iOS/Stripe.framework
3 changes: 3 additions & 0 deletions Carthage-xcfilelist/app-output-files.xcfilelist
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@

$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Alamofire.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/AlamofireImage.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Appboy_iOS_SDK.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/FBSDKCoreKit.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/FBSDKLoginKit.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Optimizely.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Prelude.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Prelude_UIKit.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveExtensions.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SDWebImage.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Segment.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Segment_Appboy.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Stripe.framework
3 changes: 3 additions & 0 deletions Carthage-xcfilelist/library-input-files.xcfilelist
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
# Carthage input files

$(SRCROOT)/Carthage/Build/iOS/Appboy_iOS_SDK.framework
$(SRCROOT)/Carthage/Build/iOS/FBSDKCoreKit.framework
$(SRCROOT)/Carthage/Build/iOS/FBSDKLoginKit.framework
$(SRCROOT)/Carthage/Build/iOS/Prelude.framework
$(SRCROOT)/Carthage/Build/iOS/Prelude_UIKit.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveExtensions.framework
$(SRCROOT)/Carthage/Build/iOS/ReactiveSwift.framework
$(SRCROOT)/Carthage/Build/iOS/SDWebImage.framework
$(SRCROOT)/Carthage/Build/iOS/Segment.framework
$(SRCROOT)/Carthage/Build/iOS/Segment_Appboy.framework
3 changes: 3 additions & 0 deletions Carthage-xcfilelist/library-output-files.xcfilelist
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
# Carthage output files

$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Appboy_iOS_SDK.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/FBSDKCoreKit.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/FBSDKLoginKit.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Prelude.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Prelude_UIKit.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveExtensions.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ReactiveSwift.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SDWebImage.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Segment.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Segment_Appboy.framework
6 changes: 6 additions & 0 deletions Kickstarter-iOS/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,12 @@ internal final class AppDelegate: UIResponder, UIApplicationDelegate {
print("📲 [Push Registration] Push token successfully registered (\(token)) ✨")
}

self.viewModel.outputs.registerPushTokenInSegment
.observeForUI()
.observeValues { token in
Analytics.shared().registeredForRemoteNotifications(withDeviceToken: token)
}

self.viewModel.outputs.showAlert
.observeForUI()
.observeValues { [weak self] in
Expand Down
6 changes: 6 additions & 0 deletions Kickstarter-iOS/ViewModels/AppDelegateViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,9 @@ public protocol AppDelegateViewModelOutputs {
/// Emits the push token that has been successfully registered on the server.
var pushTokenSuccessfullyRegistered: Signal<String, Never> { get }

/// Emits when we should register the device push token in Segment Analytics.
var registerPushTokenInSegment: Signal<Data, Never> { get }

/// Emits an array of short cut items to put into the shared application.
var setApplicationShortcutItems: Signal<[ShortcutItem], Never> { get }

Expand Down Expand Up @@ -298,6 +301,8 @@ public final class AppDelegateViewModel: AppDelegateViewModelType, AppDelegateVi
.map { _ in token }
}

self.registerPushTokenInSegment = self.deviceTokenDataProperty.signal

// Onboarding

self.goToCategoryPersonalizationOnboarding = Signal.combineLatest(
Expand Down Expand Up @@ -809,6 +814,7 @@ public final class AppDelegateViewModel: AppDelegateViewModelType, AppDelegateVi
public let presentViewController: Signal<UIViewController, Never>
public let pushTokenRegistrationStarted: Signal<(), Never>
public let pushTokenSuccessfullyRegistered: Signal<String, Never>
public let registerPushTokenInSegment: Signal<Data, Never>
public let setApplicationShortcutItems: Signal<[ShortcutItem], Never>
public let showAlert: Signal<Notification, Never>
public let synchronizeUbiquitousStore: Signal<(), Never>
Expand Down
18 changes: 18 additions & 0 deletions Kickstarter-iOS/ViewModels/AppDelegateViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ final class AppDelegateViewModelTests: TestCase {
private let presentViewController = TestObserver<Int, Never>()
private let pushRegistrationStarted = TestObserver<(), Never>()
private let pushTokenSuccessfullyRegistered = TestObserver<String, Never>()
private let registerPushTokenInSegment = TestObserver<Data, Never>()
private let setApplicationShortcutItems = TestObserver<[ShortcutItem], Never>()
private let showAlert = TestObserver<Notification, Never>()
private let unregisterForRemoteNotifications = TestObserver<(), Never>()
Expand Down Expand Up @@ -82,6 +83,7 @@ final class AppDelegateViewModelTests: TestCase {
.observe(self.presentViewController.observer)
self.vm.outputs.pushTokenRegistrationStarted.observe(self.pushRegistrationStarted.observer)
self.vm.outputs.pushTokenSuccessfullyRegistered.observe(self.pushTokenSuccessfullyRegistered.observer)
self.vm.outputs.registerPushTokenInSegment.observe(self.registerPushTokenInSegment.observer)
self.vm.outputs.setApplicationShortcutItems.observe(self.setApplicationShortcutItems.observer)
self.vm.outputs.showAlert.observe(self.showAlert.observer)
self.vm.outputs.unregisterForRemoteNotifications.observe(self.unregisterForRemoteNotifications.observer)
Expand Down Expand Up @@ -990,6 +992,22 @@ final class AppDelegateViewModelTests: TestCase {
}
}

func testRegisterPushTokenInSegment() {
let data = Data("deadbeef".utf8)

self.registerPushTokenInSegment.assertDidNotEmitValue()

withEnvironment(currentUser: .template) {
self.vm.inputs.applicationDidFinishLaunching(
application: UIApplication.shared,
launchOptions: [:]
)
self.vm.inputs.didRegisterForRemoteNotifications(withDeviceTokenData: data)

self.registerPushTokenInSegment.assertValueCount(1)
}
}

func testOpenPushNotification_WhileInBackground() {
self.vm.inputs.applicationDidFinishLaunching(
application: UIApplication.shared,
Expand Down

0 comments on commit 9608e09

Please sign in to comment.