{"id":23080823,"url":"https://github.com/appodeal/stack-holisticsolutionsdk-ios","last_synced_at":"2025-04-03T13:48:05.030Z","repository":{"id":45495111,"uuid":"262283587","full_name":"appodeal/Stack-HolisticSolutionSDK-iOS","owner":"appodeal","description":"Sample of integration Appodeal with Firebase Remote Config and AppsFlyer","archived":false,"fork":false,"pushed_at":"2022-01-19T10:39:44.000Z","size":432,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-09T18:35:00.731Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/appodeal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-05-08T09:38:06.000Z","updated_at":"2021-12-10T11:41:00.000Z","dependencies_parsed_at":"2022-07-19T02:04:30.659Z","dependency_job_id":null,"html_url":"https://github.com/appodeal/Stack-HolisticSolutionSDK-iOS","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appodeal%2FStack-HolisticSolutionSDK-iOS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appodeal%2FStack-HolisticSolutionSDK-iOS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appodeal%2FStack-HolisticSolutionSDK-iOS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appodeal%2FStack-HolisticSolutionSDK-iOS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/appodeal","download_url":"https://codeload.github.com/appodeal/Stack-HolisticSolutionSDK-iOS/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247014515,"owners_count":20869376,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-16T13:16:42.898Z","updated_at":"2025-04-03T13:48:05.009Z","avatar_url":"https://github.com/appodeal.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# iOS Holistic Solution SDK\n\nDescribes how AppsFlyer and Firebase Remote Config A/B testing can be used with\nAppodeal iOS SDK of version 2.6 and above to send attribution data to Stack Data Core.\n\n## Table of Contents\n\n* [Integration](#integration)\n* [Usage](#usage)\n  + [Purchases](#purchases)\n  + [Events](#events)\n\n## Integration\n\n1. Add folowing lines into your `Podfile`\n\n``` ruby\n\nsource 'https://cdn.cocoapods.org/'\nsource 'https://github.com/appodeal/CocoaPods.git'\n\ninstall! 'cocoapods', :deterministic_uuids =\u003e false, :warn_for_multiple_pod_sources =\u003e false\nuse_frameworks!\n\ndef holistic_solution\n    pod 'HolisticSolutionSDK'\n\n    # If you doesn't use some of connectors you can \n    # integrate only explicit sub pods\n    #\n    # pod 'HolisticSolutionSDK/Core'\n    # pod 'HolisticSolutionSDK/AppsFlyer'\n    # pod 'HolisticSolutionSDK/Adjust'\n    # pod 'HolisticSolutionSDK/Firebase'\n    # pod 'HolisticSolutionSDK/Facebook'\nend\n\ntarget 'App' do\n  project 'App.xcodeproj'\n  holistic_solution\nend\n\n``` \n\n2. Run `pod install` \n\n3. If you project doesn't contains swift code, please create new empty swift file in project root.\n\n## Usage\n\nHolistic Solution SDK will synchronize consent status (GDRP, CCPA, ATT), initialise Adjsut, AppsFlyer, fetch Firebase Remote Config and sync all required data to Appodeal. After this HS SDK will initialize Appodeal. There is `HSApp` class to provide described functional. Call configure method with instance of `HSAppConfiguration` will trigger initialisation.\n\nRequired parameters for `HSAppConfiguration` is array of **service connecors** and **advertising** service connectors. By default they are AppsFlyer, FirebaseRemoteConfig and Appodeal. **Timeout** in this case is timeout for **one** operation: starting attribution service or fetching remote config. By default the value is **30 sec**.\n\n\u003e **We highly recommend to use all service connectors**\n\n1. Import SDK umbrella header or module into your `AppDelegate` file. \n\n*Objective-C*\n\n```obj-c\n#import \u003cHolisticSolutionSDK/HolisticSolutionSDK.h\u003e\n#import \u003cAppodeal/Appodeal.h\u003e\n```\n\n*Swift*\n```swift\nimport HolisticSolutionSDK\nimport Appodeal\n```\n\n2. Add folowing code at application did finish launching event.\n\n*Objective-C*\n\n``` obj-c\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n     [Appodeal.hs registerWithConnectors:@[\n        HSFirebaseConnector.class,\n        HSFacebookConnector.class,\n        HSAppsFlyerConnector.class,\n        HSAdjustConnector.class\n    ]];\n    \n    HSAppConfiguration *configuration = [[HSAppConfiguration alloc] initWithAppKey:\u003c#(NSString * _Nonnull)#\u003e\n                                                                           timeout:\u003c#(NSTimeInterval)#\u003e\n                                                                             debug:\u003c#(enum HSAppConfigurationDebug)#\u003e \n                                                                           adTypes:\u003c#(AppodealAdType)#\u003e];\n    \n    [Appodeal.hs initializeWithApplication:application\n                             launchOptions:launchOptions\n                             configuration:configuration\n                                completion:^(NSError *error) {\n        // Holistic solution initialization completed \n    }];\n    return YES;\n}\n```\n\n*Swift*\n``` swift\nfunc application(\n    _ application: UIApplication,\n    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?\n) -\u003e Bool {\n    let connectors: [Service.Type] = [\n        AppsFlyerConnector.self,\n        AdjustConnector.self,\n        FirebaseConnector.self,\n        FacebookConnector.self\n    ]\n        \n    let configuration: AppConfiguration = .init(\n        appKey: \u003c#T##String#\u003e,\n        timeout: \u003c#T##TimeInterval#\u003e,\n        debug: \u003c#T##AppConfiguration.Debug#\u003e,\n        adTypes: \u003c#T##AppodealAdType#\u003e\n    )\n        \n    Appodeal.hs.register(connectors: connectors)\n    Appodeal.hs.initialize(\n        application: application,\n        launchOptions: launchOptions,\n        configuration: configuration\n    ) { _ in\n        // Holistic solution initialization completed \n    }\n\n    return true\n}\n```\n\n### Purchases\n\nHolistic solution SDK allows to validate and track in-app purchases by AppsFlyer or Adjust connector. Bloks `success` of `failure` indicates result of validation.\n\n*Objective-C*\n``` obj-c\n[Appodeal.hs validateAndTrackInAppPurchaseWithProductId:\u003c#(NSString * _Nonnull)#\u003e\n                                                       type:\u003c#(enum HSPurchaseType)#\u003e\n                                                      price:\u003c#(NSString * _Nonnull)#\u003e\n                                                   currency:\u003c#(NSString * _Nonnull)#\u003e\n                                              transactionId:\u003c#(NSString * _Nonnull)#\u003e\n                                       additionalParameters:\u003c#(NSDictionary\u003cNSString *,id\u003e * _Nonnull)#\u003e\n                                                    success:\u003c#^(NSDictionary * _Nonnull)success#\u003e\n                                                    failure:\u003c#^(NSError * _Nullable, id _Nullable)failure#\u003e];\n```\n\n*Swift*\n```swift\nAppodeal.hs.validateAndTrackInAppPurchase(\n    productId: \u003c#T##String#\u003e,\n    type: \u003c#T##PurchaseType#\u003e,\n    price: \u003c#T##String#\u003e,\n    currency: \u003c#T##String#\u003e,\n    transactionId: \u003c#T##String#\u003e,\n    additionalParameters: \u003c#T##[String : Any]#\u003e,\n    success: \u003c#T##(([AnyHashable : Any]) -\u003e Void)?##(([AnyHashable : Any]) -\u003e Void)?##([AnyHashable : Any]) -\u003e Void#\u003e,\n    failure: \u003c#T##((Error?, Any?) -\u003e Void)?##((Error?, Any?) -\u003e Void)?##(Error?, Any?) -\u003e Void#\u003e\n)\n```\n\n### Events\n\nHolistic solution SDK allows to send events to Firebase, AppsFlyer, Adjust and Facebook analytics systems.\n\n*Objective-C*\n``` obj-c\n[Appodeal.hs trackEvent:\u003c#(NSString * _Nonnull)#\u003e customParameters:\u003c#(NSDictionary\u003cNSString *,id\u003e * _Nullable)#\u003e];\n```\n\n*Swift*\n```swift\nAppodeal.hs.trackEvent(\u003c#T##eventName: String##String#\u003e, customParameters: \u003c#T##[String : Any]?#\u003e)\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappodeal%2Fstack-holisticsolutionsdk-ios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fappodeal%2Fstack-holisticsolutionsdk-ios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappodeal%2Fstack-holisticsolutionsdk-ios/lists"}