Files
firebase-ios-sdk/FirebaseInAppMessaging/Sources/Private/Data/FIRIAMMessageDefinition.h
T
christibbs 4c776d1f74 Support AB testing of Firebase In-App Messages (#5005)
* Parse out experiment payload for experimental FIAMs and store it on FIRIAMMessageDefinition

* Fix bugs in parsing experimental payload

* Add nullable experiment payload to FIAM message definition. Add method in FIRExperimenmtController to validate running experiments and call this when new messages are fetched from FIAM backend

* Add and document new ABT methods, update FirebaseInAppMessaging.podspec to depend on ABT

* Clean up deprecated public message initializers, add experiment payload to private initializers

* Activate experiment for experimental messages upon impression

* Clean up activateExperiment API

* Add experimental payload to all message definition initializers

* Add unit test coverage for new ABT methods

* Add test coverage for parsing experimental messages

* Verify experiment payload gets passed to message superclass

* Scripts/style.sh

* Update Podfile for UI test app to include AB Testing SDK

* Add back deprecated initializers for now, these are needed for the test app

* Test for non-nil experiment payload

* Use mutable array directly, better memory usage

* Bump ABTesting podspec version, depend on new ABT in FIAM

* Remove mentions of FIREventOrigins.h

* Remove experiment payload from public API, hide it in private

* Scripts/style.sh

* Fix comment indentation, allow for FIAM to depend on minor version updates of ABTesting

* Move ABTExperimentPayload import to private header
2020-03-03 19:46:37 -05:00

80 lines
3.2 KiB
Objective-C

/*
* 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 <Foundation/Foundation.h>
#import "FIRIAMDisplayTriggerDefinition.h"
#import "FIRIAMMessageRenderData.h"
@class FIRIAMDisplayTriggerDefinition;
#import <FirebaseABTesting/ExperimentPayload.pbobjc.h>
NS_ASSUME_NONNULL_BEGIN
@interface FIRIAMMessageDefinition : NSObject
@property(nonatomic, nonnull, readonly) FIRIAMMessageRenderData *renderData;
// metadata data that does not affect the rendering content/effect directly
@property(nonatomic, readonly) NSTimeInterval startTime;
@property(nonatomic, readonly) NSTimeInterval endTime;
// a fiam message can have multiple triggers and any of them on its own can cause
// the message to be rendered
@property(nonatomic, readonly) NSArray<FIRIAMDisplayTriggerDefinition *> *renderTriggers;
/// A flag for client-side testing messages
@property(nonatomic, readonly) BOOL isTestMessage;
/// Additional key-value pairs that can be optionally sent along with the FIAM
@property(nonatomic, nullable, readonly) NSDictionary *appData;
@property(nonatomic, nullable, readonly) ABTExperimentPayload *experimentPayload;
- (instancetype)init NS_UNAVAILABLE;
/**
* Create a regular message definition.
*/
- (instancetype)initWithRenderData:(FIRIAMMessageRenderData *)renderData
startTime:(NSTimeInterval)startTime
endTime:(NSTimeInterval)endTime
triggerDefinition:(NSArray<FIRIAMDisplayTriggerDefinition *> *)renderTriggers
appData:(nullable NSDictionary *)appData
experimentPayload:(nullable ABTExperimentPayload *)experimentPayload
isTestMessage:(BOOL)isTestMessage NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithRenderData:(FIRIAMMessageRenderData *)renderData
startTime:(NSTimeInterval)startTime
endTime:(NSTimeInterval)endTime
triggerDefinition:(NSArray<FIRIAMDisplayTriggerDefinition *> *)renderTriggers;
/**
* Create a test message definition.
*/
- (instancetype)initTestMessageWithRenderData:(FIRIAMMessageRenderData *)renderData
experimentPayload:(nullable ABTExperimentPayload *)experimentPayload;
- (BOOL)messageHasExpired;
- (BOOL)messageHasStarted;
// should this message be rendered given the FIAM trigger type? only use this method for app launch
// and foreground trigger, use messageRenderedOnAnalyticsEvent: for analytics triggers
- (BOOL)messageRenderedOnTrigger:(FIRIAMRenderTrigger)trigger;
// should this message be rendered when a given analytics event is fired?
- (BOOL)messageRenderedOnAnalyticsEvent:(NSString *)eventName;
@end
NS_ASSUME_NONNULL_END