* URL strings in in-app messages are sanitized and, when possible, recovered before they’re used in the `NSURL` initializer
* Added validation for image URLs, which must use the HTTPS scheme, according to the Firebase Console
* Updated `FIRIAMFetchResponseParserTests` to test URL validation and recovery
* Fixed a bug where an invalid image URL string in an in-app message crashed the client app
* A URL string is considered invalid if the `[NSURL URLWithString:]` method produces `nil`
* Expose most of the initializers for message metadata classes for use in unit testing or SwiftUI previews
* Fix import in FIRIAMFetchFlowTests
* Simplify UI test app to use now public initializers (doesn't build)
* Update public header to use stripped down message initializers that only include parameters that effect layout
* Fix nullability for body text in in-app message initializers, add helper methods for generating mock messages
* Remove default image for image-only convenience initializer
* Make initializers non optional, document force unwraps
* Finalize helper methods, update test project to use the preview helpers
* Update UI tests to use new initializers
* Revert Cocoapods related project changes
* Add copyright notices to new files
* Change target version of DefaultUI test app back to 10.0
* Add unit tests for
* Fix color that wasn't available on tvOS
* Udpdate CHANGELOG
* Update UI test app to 13.2 to avoid [DVTiPhoneSimulator -primaryInstrumentsServer was called from the main thread
* Update to target 13.2
* Revert "Update to target 13.2"
This reverts commit 8189b64b68.
* Revert "Update UI test app to 13.2 to avoid [DVTiPhoneSimulator -primaryInstrumentsServer was called from the main thread"
This reverts commit 2371ff2a84.
* Remove unnecessary ABTExperimentPayload import. Fix nullability of ABTExperimentPayload param in initializers
* Revert iOS target in project.pbxproj file
* Revert removals of references to GoogleService-Info.plist
* Let Xcode handle spacing in project file
* Removed `FIRIAMRenderingWindowHelper`’s `UIWindowForImageOnlyView` method whose body was identical to `UIWindowForModalView`’s
* Renamed `UIWindowForModalView` to `windowForBlockingView` and `UIWindowForBannerView` to `windowForNonBlockingView`, respectively, to clarify their purpose
* Revert to previous nil check on experiment JSON
* Add Swift extensions podspec
* Add viewmodifier for displaying custom in-app messages w/ SwiftUI
* Add Multiplatform project to integration test SwiftUI pod
* We don't support macOS yet, comment that out from the Podfile
* Fix variable renaming bug
* View modifier implementation that works, but design is questionable
* Super basic integration
* Split view modifiers based on in-app message subtype
* Fix versioning in podspec
* Configure Firebase in test app
* Remove trailing whitespace
* Clean up SDK fetching code, sample app
* Updates to sample code, fully functional modal message now
* Update implementing app example
* Better code readability for view modifiers
* Add unit tests for DelegateBridge
* Add test target to pod spec
* Add copyright notices
* Remove whitespace from pod spec
* Add auto-complete documentation for in-app message extensions
* Lowered min target
* Update Package.swift
* First pass at CI updates
* @available(13) for SwiftUI structs
* Use singleton DelegateBridge
* Update inappmessaging.yml
* Run scripts/style.sh
* Update build.sh
* Modify build.sh
* Update CHANGELOG, try something new with GHA configuration
* Let's try this for GHA
* Fully qualify FIAM message enums
* Remove redundant type declaration
* Let's try direct instantiation of messages in unit tests
* Test CI build works without actual test cases
* Let's try this, making init available.
* Try exposing initializer
* Expose simpler initializer for in-app message superclass
* Fix up UI test app initializers
* Update CHANGELOG, GHA workflows
* Cleaner GHA test flow
* Clean up custom in-app message view modifier implementation
* Configuration cleanup
* Add some tests to ensure FIAM SwiftUI API compiles
* Add SpecsDev to Podfile of integration testing app. Make @State var private
* Better accessibility labels for FIAM images and close buttons
* At FIAM display time, announce that the message has appeared in VoiceOver mode
* In VoiceOver mode, announce the close button last. This is a better accessibility experience for finding the close button.
* For modal messages, include the action button in accessibility elements. Exclude the image view if there's no image.
* Update CHANGELOG
* Include campaign name in accessibility label for images
* Fix failing modal message UI tests
* Start tracking conversions on in-app message campaigns that don't have an action URL. Do this at impression time. (Initial implementation commit)
* Add test coverage, use FIRIAMMessageDefinition in implementation for cleaner code all-around
* Add CHANGELOG
* Update CHANGELOG
* Added suppressMessageDisplay Check Before Message Display
* Updated FIRIAMDisplayExecutorTests
* Updated Format with style.sh
* Added Logging for Early Return in FIRIAMDisplayExecutor
* Revert to previous nil check on experiment JSON
* Remove assert in FIRIAMDisplayExecutor
* Update CHANGELOG
* Change nullability of imageData in displayMessageWithDefinition:
* Keep nullability with card initializers, put nil message return back if imageData is nil
* Revert back to explicit non-null
* Actually shouldn't be nonnull due to other message types w/ optional imageData 😅
* If the app doesn't have a scene delegate, use initWithFrame: to create the in-app message window
* Refactor window creation method for iOS 13 and above
* Add CHANGELOG entry
* Fix CHANGELOG entry
* Remove deprecated FIAM API
* Remove call to deprecated method
* Fix imports
* Modify view controllers to use dummy test subclasses for message objects
* Add bridging header, include it in test app
* Add CHANGELOG entry
* Revert "Add CHANGELOG entry"
This reverts commit 55c0bbcff5.
* Add CHANGELOG entry
* Swift formatting
* Add LLC to copyright notice
* Revert "Fix imports"
This reverts commit 55fdbbd3e0.
* Remove Protobuf dependency, add struct-ish class that mimics ABTExperimentPayload
* Remove a lot of the compiler errors, but not all of them. We need to figure out how RC serializes the NSData objects passed to FIRExperimentController in updateExperimentsWithServiceOrigin:
* Add ABTExperimentPayload class that replaces generated proto, refactor classes that depend on it
* Add unit testing class for ABTExperimentPayload
* Updates to ABTExperimentPayload API, tests for ABTConditionalUserPropertyTest, add tests for ABTExperimentPayload
* Update podspec to pull in testing resources
* Add utility class for parsing test files. Use it in ABTExperimentPayloadTests
* Fix FIRExperimentController tests
* Better documentation
* Run scripts/styles.sh
* Fix whitespace
* Remove protobuf imports
* Bump pod spec version for ABT SDK, depend on new ABT SDK in RC. Fix up RemoteConfigExperiment to use new ABTExperimentPayload object
* scripts/style.sh
* Update In-app messaging to use new ABTExperimentPayload class, which involves extending the ABTExperimentPayload initializer to accept different values for overflowPolicy and experimentStartTime
* Delete test payload
* Revert scripts/check_imports.swift
* Better initialization tags for ABTExperimentLite
* Update CHANGELOGs
* Remove private headers in podspec, use integerValue to parse integers
* Refactor ABTExperimentPayload header into Private headers. Fix integer types for millisecond metadata
* scripts/styles.sh
* Fix integer parsing
* Fix copyrights
* Fix CHANGELOG typo:
* Add private_header_files to public_header_files
* Try just using NSInteger for experimentStartTimeMillis
* Bump FIAM dependency on ABTesting
* Use long long for milli parameters (32-bit apps)
* Use longlong in test timestamps
* Don't cast to nsnumber in tests
* Use in64_t
* Fix Test Overflow
* Bump major version on ABT SDK
* Bump ABTesting version in Firebase.podspec
Co-authored-by: Paul Beusterien <paulbeusterien@google.com>
* Add constraint to pin title label below status bar in banner FIAM
* Remove title label top pin from storyboard at build time
* Use conditional compilation for iOS 13 check
* Depend on FIRInstallations instead of IID, load an installations object into FIRInAppMessagingPrivate.h
* Bootstrap FIRInAppMessaging.h with an instance of FIRInstallations
* Update FIRIAMClientInfoFetcher to use FIRInstallations method to grab FID and FIS Token
* Call new client info fetcher method
* Fix up tests
* Change nullability for FIRInstallations object, handle null case
* More verbose comments in FIRIAMClientInfoFetcher, call completion in case that FIS token is fetched, but FID fails
* Throw error and call completion if Firebase Installations object is not created
* Send FIS token with method fetch requests
* Add test class for FIRIAMClientInfoFetcher
* Refactor FIRIAMClientInfoFetcher to get a FIRInstallations object injected
* Add unit testing for fetchFirebaseInstallationDataWithProjectNumber: in FIRIAMClientInfoFetcher
* Streamline unit tests, add case for nil FirebaseInstallations, clean up comments that were left in
* 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