From c50e67e79cd7cea6d6e4aaec135f65195c79bcca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Wed, 30 Jun 2021 14:21:26 +0100 Subject: [PATCH 01/35] Add notice for move to help center --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 65a45318f..99c332785 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ +**This guide is being retired.** + +This README file will be retired shortly. The SDK documentation can now be found on our help center: + +* [English][en-helpcenter] +* [中文][zh-helpcenter] +* [日本語][ja-helpcenter] +* [한국어][ko-helpcenter] + ## Summary This is the iOS SDK of Adjust™. You can read more about Adjust™ at [adjust.com]. @@ -1281,6 +1290,11 @@ If you are seing any value in the dashboard other than what you expected to be t [zh-readme]: doc/chinese/README.md [ja-readme]: doc/japanese/README.md [ko-readme]: doc/korean/README.md + +[en-helpcenter]: https://help.adjust.com/en/developer/ios-sdk-documentation +[zh-helpcenter]: https://help.adjust.com/zh/developer/ios-sdk-documentation +[ja-helpcenter]: https://help.adjust.com/ja/developer/ios-sdk-documentation +[ko-helpcenter]: https://help.adjust.com/ko/developer/ios-sdk-documentation [sdk2sdk-mopub]: doc/english/sdk-to-sdk/mopub.md From c689f79ee7774a51d42a6cd4913501acf18fe554 Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Wed, 23 Jun 2021 10:45:06 +0200 Subject: [PATCH 02/35] Create admob.md --- doc/korean/sdk-to-sdk/admob.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 doc/korean/sdk-to-sdk/admob.md diff --git a/doc/korean/sdk-to-sdk/admob.md b/doc/korean/sdk-to-sdk/admob.md new file mode 100644 index 000000000..19626d909 --- /dev/null +++ b/doc/korean/sdk-to-sdk/admob.md @@ -0,0 +1,28 @@ +# Adjust SDK에서 AdMob 광고 매출 트래킹 + +[Adjust iOS SDK README][ios-readme] + +이 기능에 필요한 최소 SDK 버전: + +- **Adjust SDK v4.29.0** + +Admob SDK의 광고 매출을 트래킹하고 싶다면, Adjust의 SDK 연동을 사용하여 Adjust 백엔드로 광고 매출 정보를 전송할 수 있습니다. 이를 위해서는 기록하고자 하는 정보를 포함한 Adjust 광고 매출 객체를 구성한 뒤, `trackAdRevenue` 메서드를 사용하여 객체를 전송해야 합니다. + +> 참고: AdMob과의 광고 매출 트래킹에 관한 문의 사항은 담당 어카운트 매니저나 [support@adjust.com](mailto:support@adjust.com)으로 연락주시기 바랍니다. + +### 예시 + +```objc +- (void)requestRewardedAd { + self.rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:@"ad unit ID"]; + ViewController *strongSelf = weakSelf; + self.rewardedAd.paidEventHandler = ^void(GADAdValue *_Nonnull value) { + // ... + // send ad revenue info to Adjust + ADJAdRevenue *adRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceAdMob]; + [adRevenue setRevenue:value.value currency:value.currencyCode]; + [Adjust trackAdRevenue:adRevenue]; + } +}; +``` +[ios-readme]: https://github.com/adjust/ios_sdk/blob/master/doc/korean/README.md From dceb08aca57ff71e50ecf7edcfd681440a2ddc86 Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Wed, 23 Jun 2021 10:41:32 +0200 Subject: [PATCH 03/35] Create admob.md --- doc/japanese/sdk-to-sdk/admob.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 doc/japanese/sdk-to-sdk/admob.md diff --git a/doc/japanese/sdk-to-sdk/admob.md b/doc/japanese/sdk-to-sdk/admob.md new file mode 100644 index 000000000..6a7a72f60 --- /dev/null +++ b/doc/japanese/sdk-to-sdk/admob.md @@ -0,0 +1,29 @@ +# AdMobの広告収益をAdjust SDKで計測 + +[Adjust iOS SDK README][ios-readme] + +この機能に必須のSDKバージョン: + +- **Adjust SDK v4.29.0** + +Admob SDKで広告収益を計測する場合は、AdjustのSDK間連携の機能を使用することで、この情報をAdjustバックエンドに渡すことができます。これを行うには、記録する情報を含むAdjust広告収益オブジェクトを作成し、そのオブジェクトを`trackAdRevenue`メソッドに渡す必要があります。 + +> 注:Admobによる広告収益計測についてご質問がありましたら、担当のアカウントマネージャー、または[support@adjust.com](mailto:support@adjust.com)までお問い合わせください。 + +### サンプル + +```objc +- (void)requestRewardedAd { + self.rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:@"ad unit ID"]; + ViewController *strongSelf = weakSelf; + self.rewardedAd.paidEventHandler = ^void(GADAdValue *_Nonnull value) { + // ... + // send ad revenue info to Adjust + ADJAdRevenue *adRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceAdMob]; + [adRevenue setRevenue:value.value currency:value.currencyCode]; + [Adjust trackAdRevenue:adRevenue]; + } +}; +``` + +[ios-readme]: https://github.com/adjust/ios_sdk/blob/master/doc/japanese/README.md From c582b5ed12c862d71fd8045f670ef55f17c24586 Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Wed, 23 Jun 2021 10:36:36 +0200 Subject: [PATCH 04/35] Create admob.md --- doc/chinese/sdk-to-sdk/admob.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 doc/chinese/sdk-to-sdk/admob.md diff --git a/doc/chinese/sdk-to-sdk/admob.md b/doc/chinese/sdk-to-sdk/admob.md new file mode 100644 index 000000000..bf8371bae --- /dev/null +++ b/doc/chinese/sdk-to-sdk/admob.md @@ -0,0 +1,29 @@ +# 通过 Adjust SDK 跟踪 AdMob 广告收入 + +[Adjust iOS SDK 自述文件][ios-readme] + +此功能最低 SDK 版本要求: + +- **Adjust SDK v4.29.0** + +如果您想使用 AdMob SDK 跟踪广告收入,可以借助我们的 SDK 到 SDK 集成,将数据发送到 Adjust 后端。要做到这一点,您需要构建 Adjust 广告收入对象,其中包含想记录的信息,然后将对象发送到 `trackAdRevenue` 方法。 + +> 请注意:如果您对 AdMob 广告收入跟踪有任何疑问,请联系您的专属客户经理,或发送邮件至 [support@adjust.com](mailto:support@adjust.com)。 + +### 示例 + +```objc +- (void)requestRewardedAd { + self.rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:@"ad unit ID"]; + ViewController *strongSelf = weakSelf; + self.rewardedAd.paidEventHandler = ^void(GADAdValue *_Nonnull value) { + // ... + // send ad revenue info to Adjust + ADJAdRevenue *adRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceAdMob]; + [adRevenue setRevenue:value.value currency:value.currencyCode]; + [Adjust trackAdRevenue:adRevenue]; + } +}; +``` + +[ios-readme]: https://github.com/adjust/ios_sdk/blob/master/doc/chinese/README.md From 511c37b14676a495b86b2f0e002116e6f3744285 Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Thu, 8 Jul 2021 12:16:51 +0200 Subject: [PATCH 05/35] Update README.md Add link resolution --- doc/korean/README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/doc/korean/README.md b/doc/korean/README.md index 60f1c942c..5b6f22be9 100644 --- a/doc/korean/README.md +++ b/doc/korean/README.md @@ -61,6 +61,7 @@ Adjust™의 iOS SDK에 관한 문서입니다. [adjust.com]에서 Adjust™에 * [iOS 9 이후 버전에서의 딥링크](#deeplinking-setup-new) * [지연 딥링크(deferred deeplink) 시나리오](#deeplinking-deferred) * [딥링크를 통한 리어트리뷰션( reattribution)](#deeplinking-reattribution) + * [Link resolution](#link-resolution) * [베타 Data residency](#data-residency) * [문제 해결](#troubleshooting) * [지연 SDK 초기화 관련 문제](#ts-delayed-init) @@ -1067,6 +1068,32 @@ Adjust를 사용하면 립링크를 사용하여 리인게이지먼트(재유입 } ``` +### Link resolution + +이메일 서비스 제공자(ESP)로부터 딥링크를 제공하고 커스텀 트래킹 링크를 통해 클릭을 트래킹해야 하는 경우, `ADJLinkResolution` 클래스의 `resolveLinkWithUrl` 메서드를 사용하여 링크를 해석할 수 있습니다. 이를 통해 딥링크가 앱에서 열렸을 때 이메일 트래킹 캠페인과의 교류를 기록할 수 있습니다. + +`resolveLinkWithUrl` 메서드는 다음의 파라미터를 사용합니다: + +- `url` - 앱을 연 딥링크 +- `resolveUrlSuffixArray` - 해석되어야 하는 구성된 캠페인의 커스텀 도메인 +- `callback`- 최총 URL을 포함하게 될 콜백 + +수신한 링크가 `resolveUrlSuffixArray`에 명시된 도메인에 속하지 않는 경우, 해당 콜백은 딥링크 URL을 그대로 전달합니다. 링크가 명시된 도메인을 포함하는 경우, SDK는 링크 해석을 시도하고, `callback` 파라미터로 결과 딥링크를 반환합니다. 반환된 딥링크는 또한 `[Adjust appWillOpenUrl:]` 메서드를 사용하여 Adjust SDK에서 리어트리뷰션 될 수 있습니다. + +> **참고**: SDK는 URL 해석을 시도할 때 자동으로 최대 3개의 리다이렉트를 따릅니다. SDK는 `callback` URL의 가장 마지막 URL을 반환하는데, 이는 따라야 할 리다이렉트가 3개 이상인 경우 **3번째 리다이렉트 URL이** 반환됨을 의미합니다. + +**예시** + +```objc +[ADJLinkResolution + resolveLinkWithUrl:url + resolveUrlSuffixArray:@[@"example.com"] + callback:^(NSURL * _Nullable resolvedLink) + { + [Adjust appWillOpenUrl:resolvedLink]; + }]; +``` + ### [베타] 데이터 레지던시 데이터 레지던시 기능을 활성화하려면, 다음의 상수 중 1개와 함께 `ADJConfig` 인스턴스의 `setUrlStrategy:` 메서드를 호출하시기 바랍니다. From 3d60854c82bfe51d7e4006bc0a41b911df13a282 Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Thu, 8 Jul 2021 12:12:34 +0200 Subject: [PATCH 06/35] Update README.md Add link resolution --- doc/japanese/README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/doc/japanese/README.md b/doc/japanese/README.md index c1d6bb58d..91d628448 100644 --- a/doc/japanese/README.md +++ b/doc/japanese/README.md @@ -61,6 +61,7 @@ Read this in other languages: [English][en-readme], [中文][zh-readme], [日本 * [iOS 9およびそれ以降のバージョンでのディープリンク](#deeplinking-setup-old) * [ディファードディープリンク](#deeplinking-deferred) * [ディープリンクを介したリアトリビューション](#deeplinking-reattribution) + * [リンクのresolution](#link-resolution) * [[ベータ版]データレジデンシー](#data-residency) * [トラブルシューティング](#troubleshooting) * [SDK初期化時の問題](#ts-delayed-init) @@ -1067,6 +1068,32 @@ Adjustはディープリンクを使ったリエンゲージメントキャン } ``` +### リンクのresolution (解析と変換) + +Emailサービスプロバイダー(ESP)独自のカスタムトラッキングリンク経由でディープリンクを使用したり、クリックを計測する必要がある場合は、`ADJLinkResolution`クラスの`resolveLinkWithUrl`メソッドを使用してリンクをresolve(解析し、変換すること)します。これにより、アプリでディープリンクが開かれた時に、メール計測キャンペーンとのインタラクションを記録できます。 + +`resolveLinkWithUrl`メソッドでは、以下のパラメーターが使用できます。 + +- `url` - アプリを起動したディープリンク +- `resolveUrlSuffixArray` - リンクの解析が必要な、設定済みキャンペーンのカスタムドメイン +- `callback` - 最終的なURLを含むコールバック + +受信したリンクが`resolveUrlSuffixArray`で指定されたドメインのいずれにも属さない場合、コールバックはディープリンクURLをそのまま転送します。リンクが指定されたドメインのいずれかを含む場合、SDKはリンクの解析を試み、`callback`パラメーターにディープリンクを返します。返されたディープリンクは、`[Adjust appWillOpenUrl:]`メソッドを使ってAdjust SDKでリアトリビュートすることも可能です。 + +> **注**: URLの解析と変換が行われると、SDKは自動的に最大3つのリダイレクトをフォローします。さらに、SDKはフォローした最新のURLを`callback` URLとして返します。つまり、フォローするリダイレクトが3つを超える場合は**3つ目のリダイレクトURL**が返されます。 + +**例** + +```objc +[ADJLinkResolution + resolveLinkWithUrl:url + resolveUrlSuffixArray:@[@"example.com"] + callback:^(NSURL * _Nullable resolvedLink) + { + [Adjust appWillOpenUrl:resolvedLink]; + }]; +``` + ### [ベータ版]データレジデンシー データ所在地機能を有効にするには、`ADJConfig`インスタンスの`setUrlStrategy:`メソッドに、以下のいずれかの定数を指定して呼び出します: From 9ec7dc7362ca6d05052625f5ad34d236753c20bf Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Thu, 8 Jul 2021 12:05:44 +0200 Subject: [PATCH 07/35] Update README.md Add Link resolution --- doc/chinese/README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/doc/chinese/README.md b/doc/chinese/README.md index f80573dd0..d83976eff 100644 --- a/doc/chinese/README.md +++ b/doc/chinese/README.md @@ -61,6 +61,7 @@ * [iOS 9 及以上版本的深度链接设置](#deeplinking-setup-new) * [延迟深度链接场景](#deeplinking-deferred) * [通过深度链接的再归因](#deeplinking-reattribution) + * [链接解析](#link-resolution) * [[beta] 数据驻留](#data-residency) * [问题排查](#troubleshooting) * [SDK 延迟初始化问题](#ts-delayed-init) @@ -1067,6 +1068,32 @@ Adjust 支持您使用深度链接进行交互推广活动。请查看我们的[ } ``` +### 链接解析 + +通过电子邮件服务提供商 (ESP) 投放深度链接且需要使用自定义跟踪链接来跟踪点击时,可以使用 `ADJLinkResolution` 类的 `resolveLinkWithUrl` 方法进行链接解析。这样,当用户在应用中打开深度链接时,您就能记录用户与电子邮件推广活动的互动了。 + +`resolveLinkWithUrl` 方法携带下列参数: + +- `url` - 打开应用的深度链接 +- `resolveUrlSuffixArray` - 需要解析的、已设置推广活动的自定义域名 +- `callback` - 将包含最终 URL 的回传 + +如果接收到的链接不属于 `resolveUrlSuffixArray` 中指定的任何域名,那么回传就会原样转发深度链接 URL;如果链接包含所指定的域名,那么 SDK 就会尝试解析链接,并将解析得出的深度链接返回至 `callback` 参数。您也可以使用 [`Adjust appWillOpenUrl:]` 方法,在 Adjust SDK 中针对返回的深度链接进行再归因。 + +> **请注意**:在尝试解析 URL 时,SDK 会自动追溯最多 3 个重定向 (redirect),并将其中最新的 URL 返回为 `回传` URL,也就是说,如果要追溯的重定向超过 3 个,那么 SDK 就会返回 **第 3 个重定向 URL**。 + +**示例** + +```objc +[ADJLinkResolution + resolveLinkWithUrl:url + resolveUrlSuffixArray:@[@"example.com"] + callback:^(NSURL * _Nullable resolvedLink) + { + [Adjust appWillOpenUrl:resolvedLink]; + }]; +``` + ### [beta] 数据驻留 要启用数据驻留功能,请务必通过以下常量之一调用`ADJConfig` 实例中的 `setUrlStrategy:` 方法 : From 98002ad02a668b5e8dd853f8c994fd4ea06c30a2 Mon Sep 17 00:00:00 2001 From: uerceg Date: Thu, 8 Jul 2021 12:18:35 +0200 Subject: [PATCH 08/35] skip sending IDFA if zeroed --- Adjust/ADJActivityState.m | 1 - Adjust/ADJPackageBuilder.m | 57 ++++++++++++++------------------------ 2 files changed, 21 insertions(+), 37 deletions(-) diff --git a/Adjust/ADJActivityState.m b/Adjust/ADJActivityState.m index 8e2eda4f1..150650bc2 100644 --- a/Adjust/ADJActivityState.m +++ b/Adjust/ADJActivityState.m @@ -83,7 +83,6 @@ - (BOOL)findTransactionId:(NSString *)transactionId { #pragma mark - Private & helper methods - (void)assignRandomToken:(NSString *)randomToken { - // self.secondaryDedupeToken = [[NSUUID UUID] UUIDString]; NSString *persistedDedupeToken = [ADJUtil getPersistedRandomToken]; if (persistedDedupeToken != nil) { if ((bool)[[NSUUID alloc] initWithUUIDString:persistedDedupeToken]) { diff --git a/Adjust/ADJPackageBuilder.m b/Adjust/ADJPackageBuilder.m index 4e2e67fdb..19b82458c 100644 --- a/Adjust/ADJPackageBuilder.m +++ b/Adjust/ADJPackageBuilder.m @@ -364,9 +364,7 @@ - (NSMutableDictionary *)getSessionParameters:(BOOL)isInDelay { [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -431,9 +429,7 @@ - (NSMutableDictionary *)getEventParameters:(BOOL)isInDelay forEventPackage:(ADJ [ADJPackageBuilder parameters:parameters setString:event.eventToken forKey:@"event_token"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -518,9 +514,7 @@ - (NSMutableDictionary *)getInfoParameters:(NSString *)source { [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -589,9 +583,7 @@ - (NSMutableDictionary *)getAdRevenueParameters:(NSString *)source payload:(NSDa [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -651,9 +643,7 @@ - (NSMutableDictionary *)getAdRevenueParameters:(ADJAdRevenue *)adRevenue isInDe [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -735,9 +725,7 @@ - (NSMutableDictionary *)getClickParameters:(NSString *)source { [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -804,9 +792,7 @@ - (NSMutableDictionary *)getAttributionParameters:(NSString *)initiatedBy { [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.environment forKey:@"environment"]; [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setString:initiatedBy forKey:@"initiated_by"]; @@ -857,9 +843,7 @@ - (NSMutableDictionary *)getGdprParameters { [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.environment forKey:@"environment"]; [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -915,9 +899,7 @@ - (NSMutableDictionary *)getDisableThirdPartySharingParameters { [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -982,9 +964,7 @@ - (NSMutableDictionary *)getThirdPartySharingParameters:(nonnull ADJThirdPartySh [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -1055,9 +1035,7 @@ - (NSMutableDictionary *)getMeasurementConsentParameters:(BOOL)enabled { [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -1119,9 +1097,7 @@ - (NSMutableDictionary *)getSubscriptionParameters:(BOOL)isInDelay forSubscripti [ADJPackageBuilder parameters:parameters setBool:self.adjustConfig.eventBufferingEnabled forKey:@"event_buffering_enabled"]; [ADJPackageBuilder parameters:parameters setString:self.adjustConfig.externalDeviceId forKey:@"external_device_id"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.fbAnonymousId forKey:@"fb_anon_id"]; - if (self.adjustConfig.allowIdfaReading == YES) { - [ADJPackageBuilder parameters:parameters setString:[ADJUtil idfa] forKey:@"idfa"]; - } + [self addIdfaIfPossibleToParameters:parameters]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.idfv forKey:@"idfv"]; [ADJPackageBuilder parameters:parameters setString:self.packageParams.installedAt forKey:@"installed_at"]; [ADJPackageBuilder parameters:parameters setBool:YES forKey:@"needs_response_details"]; @@ -1181,6 +1157,15 @@ - (NSMutableDictionary *)getSubscriptionParameters:(BOOL)isInDelay forSubscripti return parameters; } +- (void)addIdfaIfPossibleToParameters:(NSMutableDictionary *)parameters { + if (self.adjustConfig.allowIdfaReading == YES) { + NSString *idfa = [ADJUtil idfa]; + if (idfa.length > 0 && [idfa compare:@"00000000-0000-0000-0000-000000000000"] != NSOrderedSame) { + [ADJPackageBuilder parameters:parameters setString:idfa forKey:@"idfa"]; + } + } +} + - (ADJActivityPackage *)defaultActivityPackage { ADJActivityPackage *activityPackage = [[ADJActivityPackage alloc] init]; activityPackage.clientSdk = self.packageParams.clientSdk; From 92bcd600848d98277ba2c3f60d64f6649a60bbc2 Mon Sep 17 00:00:00 2001 From: nonelse Date: Thu, 8 Jul 2021 13:04:38 +0200 Subject: [PATCH 09/35] Small add idfa refac --- Adjust/ADJPackageBuilder.m | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Adjust/ADJPackageBuilder.m b/Adjust/ADJPackageBuilder.m index 19b82458c..edc6223d4 100644 --- a/Adjust/ADJPackageBuilder.m +++ b/Adjust/ADJPackageBuilder.m @@ -1158,12 +1158,20 @@ - (NSMutableDictionary *)getSubscriptionParameters:(BOOL)isInDelay forSubscripti } - (void)addIdfaIfPossibleToParameters:(NSMutableDictionary *)parameters { - if (self.adjustConfig.allowIdfaReading == YES) { - NSString *idfa = [ADJUtil idfa]; - if (idfa.length > 0 && [idfa compare:@"00000000-0000-0000-0000-000000000000"] != NSOrderedSame) { - [ADJPackageBuilder parameters:parameters setString:idfa forKey:@"idfa"]; - } + if (! self.adjustConfig.allowIdfaReading) { + return; } + + NSString *idfa = [ADJUtil idfa]; + + if (idfa == nil + || idfa.length == 0 + || [idfa isEqualToString:@"00000000-0000-0000-0000-000000000000"]) + { + return; + } + + [ADJPackageBuilder parameters:parameters setString:idfa forKey:@"idfa"]; } - (ADJActivityPackage *)defaultActivityPackage { From ac6104efe2d1628898f34def3853adfccc2e011b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Buscht=C3=B6ns?= Date: Tue, 30 Mar 2021 06:30:42 +0200 Subject: [PATCH 10/35] fix(ADJUtil): iad-adgroup-name: AdGroupName, both capitalizations --- Adjust/ADJUtil.m | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index 9a8a19d7e..550e73218 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -975,8 +975,10 @@ + (BOOL)checkAttributionDetails:(NSDictionary *)attributionDetails { } // Apple Search Ads fields if ([ADJUtil contains:details key:@"iad-adgroup-id" value:@"1234567890"] && - [ADJUtil contains:details key:@"iad-adgroup-name" value:@"AdgroupName"] && - [ADJUtil contains:details key:@"iad-keyword" value:@"Keyword"]) { + [ADJUtil contains:details key:@"iad-keyword" value:@"Keyword"] && ( + [ADJUtil contains:details key:@"iad-adgroup-name" value:@"AdgroupName"] || + [ADJUtil contains:details key:@"iad-adgroup-name" value:@"AdGroupName"] + )) { [ADJAdjustFactory.logger debug:@"iAd attribution details has dummy Apple Search Ads fields"]; return NO; } From 69a05e6bad776a554b727d584db681c9aa567af4 Mon Sep 17 00:00:00 2001 From: Lukas Sestic Date: Thu, 15 Jul 2021 14:54:26 +0200 Subject: [PATCH 11/35] [fix] #550 Added ADJLinkResolution.h import in adjust.h --- Adjust/Adjust.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Adjust/Adjust.h b/Adjust/Adjust.h index 8b8f25407..41b088092 100644 --- a/Adjust/Adjust.h +++ b/Adjust/Adjust.h @@ -13,6 +13,7 @@ #import "ADJSubscription.h" #import "ADJThirdPartySharing.h" #import "ADJAdRevenue.h" +#import "ADJLinkResolution.h" @interface AdjustTestOptions : NSObject From 7251f1e4c1bac76c3909fee9a49b1cf85fe465b4 Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Mon, 19 Jul 2021 11:40:13 +0200 Subject: [PATCH 12/35] Create applovin-max.md --- doc/chinese/sdk-to-sdk/applovin-max.md | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 doc/chinese/sdk-to-sdk/applovin-max.md diff --git a/doc/chinese/sdk-to-sdk/applovin-max.md b/doc/chinese/sdk-to-sdk/applovin-max.md new file mode 100644 index 000000000..c7abb14de --- /dev/null +++ b/doc/chinese/sdk-to-sdk/applovin-max.md @@ -0,0 +1,29 @@ +# 通过 Adjust SDK 跟踪 AppLovin MAX 广告收入 + +[Adjust iOS SDK 自述文件][ios-readme] + +此功能最低 SDK 版本要求: + +- **Adjust SDK v4.29.0** + +如果您想使用 AppLovin MAX SDK 跟踪广告收入,可以借助我们的 SDK-to-SDK 集成,将数据发送到 Adjust 后端。要做到这一点,您需要构建 Adjust 广告收入对象,其中包含想记录的信息,然后将对象发送到 `trackAdRevenue` 方法。 + +> 请注意:如果您对 AppLovin MAX 广告收入跟踪有任何疑问,请联系您的专属客户经理,或发送邮件至 [support@adjust.com](mailto:support@adjust.com)。 + +### 示例 + +```objc +- (void)didPayRevenueForAd:(MAAd *)ad { + ADJAdRevenue *adjustAdRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceAppLovinMAX]; + + adjustAdRevenue.setRevenue(ad.revenue,"USD"); + adjustAdRevenue.setAdRevenueNetwork(ad.networkName); + adjustAdRevenue.setAdRevenueUnit(ad.adUnitIdentifier); + adjustAdRevenue.setAdRevenuePlacement(ad.placement); + + Adjust.trackAdRevenue(adjustAdRevenue); +} +``` + +[ios-readme]: https://github.com/adjust/ios_sdk/blob/master/doc/chinese/README.md + From d3b68e5f202d932ade51e08636c82a0bf842c51a Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Mon, 19 Jul 2021 11:38:30 +0200 Subject: [PATCH 13/35] Create applovin-max.md --- doc/japanese/sdk-to-sdk/applovin-max.md | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 doc/japanese/sdk-to-sdk/applovin-max.md diff --git a/doc/japanese/sdk-to-sdk/applovin-max.md b/doc/japanese/sdk-to-sdk/applovin-max.md new file mode 100644 index 000000000..34b4a685f --- /dev/null +++ b/doc/japanese/sdk-to-sdk/applovin-max.md @@ -0,0 +1,28 @@ +# AppLovin MAXの広告収益をAdjust SDKで計測 + +[Adjust iOS SDK README][ios-readme] + +この機能に必須のSDKバージョン: + +- **Adjust SDK v4.29.0** + +AppLovin MAX SDKで広告収益を計測する場合は、AdjustのSDK間連携の機能を使用することで、この情報をAdjustバックエンドに渡すことができます。これを行うには、記録する情報を含むAdjust広告収益オブジェクトを作成し、そのオブジェクトを`trackAdRevenue`メソッドに渡す必要があります。 + +> 注:AppLovin MAXによる広告収益計測についてご質問がありましたら、担当のアカウントマネージャー、または[support@adjust.com](mailto:support@adjust.com)までお問い合わせください。 + +### サンプル + +```objc +- (void)didPayRevenueForAd:(MAAd *)ad { + ADJAdRevenue *adjustAdRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceAppLovinMAX]; + + adjustAdRevenue.setRevenue(ad.revenue,"USD"); + adjustAdRevenue.setAdRevenueNetwork(ad.networkName); + adjustAdRevenue.setAdRevenueUnit(ad.adUnitIdentifier); + adjustAdRevenue.setAdRevenuePlacement(ad.placement); + + Adjust.trackAdRevenue(adjustAdRevenue); +} +``` + +[ios-readme]: https://github.com/adjust/ios_sdk/blob/master/doc/japanese/README.md From 20a1bfe9c0b958fa221b1f9aacef0b4540bba9f0 Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Mon, 19 Jul 2021 11:36:33 +0200 Subject: [PATCH 14/35] Create applovin-max.md --- doc/korean/sdk-to-sdk/applovin-max.md | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 doc/korean/sdk-to-sdk/applovin-max.md diff --git a/doc/korean/sdk-to-sdk/applovin-max.md b/doc/korean/sdk-to-sdk/applovin-max.md new file mode 100644 index 000000000..d38575218 --- /dev/null +++ b/doc/korean/sdk-to-sdk/applovin-max.md @@ -0,0 +1,28 @@ +# Adjust SDK에서 AppLovin MAX 광고 매출 트래킹 + +[Adjust iOS SDK README][ios-readme] + +이 기능에 필요한 최소 SDK 버전: + +- **Adjust SDK v4.29.0** + +AppLovin MAX SDK와 광고 매출을 트래킹하고 싶다면, Adjust의 SDK간 연동을 사용하여 Adjust 백엔드로 해당 정보를 전송할 수 있습니다. 이를 위해서는 기록하고자 하는 정보를 포함한 Adjust 광고 매출 객체를 구성한 뒤, `trackAdRevenue` 메서드를 사용하여 객체를 전송해야 합니다. + +> 참고: AppLovin MAX와의 광고 매출 트래킹에 관한 문의 사항은 담당 어카운트 매니저나 [support@adjust.com](mailto:support@adjust.com)으로 연락주시기 바랍니다. + +### 예시 + +```objc +- (void)didPayRevenueForAd:(MAAd *)ad { + ADJAdRevenue *adjustAdRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceAppLovinMAX]; + + adjustAdRevenue.setRevenue(ad.revenue, "USD"); + adjustAdRevenue.setAdRevenueNetwork(ad.networkName); + adjustAdRevenue.setAdRevenueUnit(ad.adUnitIdentifier); + adjustAdRevenue.setAdRevenuePlacement(ad.placement); + + Adjust.trackAdRevenue(adjustAdRevenue); +} +``` + +[ios-readme]: https://github.com/adjust/ios_sdk/blob/master/doc/korean/README.md From bc489371ad066da8b0bcbf49ec7bf3f8b6f95105 Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Mon, 19 Jul 2021 11:33:57 +0200 Subject: [PATCH 15/35] Create ironsource.md --- doc/korean/sdk-to-sdk/ironsource.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 doc/korean/sdk-to-sdk/ironsource.md diff --git a/doc/korean/sdk-to-sdk/ironsource.md b/doc/korean/sdk-to-sdk/ironsource.md new file mode 100644 index 000000000..07ca76eaf --- /dev/null +++ b/doc/korean/sdk-to-sdk/ironsource.md @@ -0,0 +1,28 @@ +# Adjust SDK에서 ironSource 광고 매출 트래킹 + +[Adjust iOS SDK README][ios-readme] + +이 기능에 필요한 최소 SDK 버전: + +- **Adjust SDK v4.29.0** + +ironSource SDK의 광고 매출을 트래킹하고 싶다면, Adjust의 SDK 연동을 사용하여 Adjust 백엔드로 광고 매출 정보를 전송할 수 있습니다. 이를 위해서는 기록하고자 하는 정보를 포함한 Adjust 광고 매출 객체를 구성한 뒤, `trackAdRevenue` 메서드를 사용하여 객체를 전송해야 합니다. + +> 참고: ironSource와의 광고 매출 트래킹에 관한 문의 사항은 담당 어카운트 매니저나 [support@adjust.com](mailto:support@adjust.com)으로 연락주시기 바랍니다. + +### 예시 + +```objc +- (void)impressionDataDidSucceed:(ISImpressionData *)impressionData { + ADJAdRevenue *adjustAdRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceIronSource]; + [adjustAdRevenue setRevenue:impressionData.revenue currency:@"USD"]; + // optional fields + [adjustAdRevenue setAdRevenueNetwork:impressionData.ad_network]; + [adjustAdRevenue setAdRevenueUnit:impressionData.ad_unit]; + [adjustAdRevenue setAdRevenuePlacement:impressionData.placement]; + // track Adjust ad revenue + [Adjust trackAdRevenue:adjustAdRevenue]; +} +``` + +[ios-readme]: https://github.com/adjust/ios_sdk/blob/master/doc/korean/README.md From 151700f2c853fae56f99c5c7ce951f533a5b7f6f Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Mon, 19 Jul 2021 11:32:07 +0200 Subject: [PATCH 16/35] Create ironsource.md --- doc/japanese/sdk-to-sdk/ironsource.md | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 doc/japanese/sdk-to-sdk/ironsource.md diff --git a/doc/japanese/sdk-to-sdk/ironsource.md b/doc/japanese/sdk-to-sdk/ironsource.md new file mode 100644 index 000000000..db03c9559 --- /dev/null +++ b/doc/japanese/sdk-to-sdk/ironsource.md @@ -0,0 +1,28 @@ +# ironSourceの広告収益をAdjust SDKで計測 + +[Adjust iOS SDK README][ios-readme] + +この機能に必須のSDKバージョン: + +- **Adjust SDK v4.29.0** + +ironSource SDKで広告収益を計測する場合は、AdjustのSDK間連携の機能を使用することで、この情報をAdjustバックエンドに渡すことができます。 これを行うには、記録する情報を含むAdjust広告収益オブジェクトを作成し、そのオブジェクトを`trackAdRevenue`メソッドに渡す必要があります。 + +> 注:ironSourceによる広告収益計測についてご質問がありましたら、担当のアカウントマネージャー、または[support@adjust.com](mailto:support@adjust.com)までお問い合わせください。 + +### サンプル + +```objc +- (void)impressionDataDidSucceed:(ISImpressionData *)impressionData { + ADJAdRevenue *adjustAdRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceIronSource]; + [adjustAdRevenue setRevenue:impressionData.revenue currency:@"USD"]; + // optional fields + [adjustAdRevenue setAdRevenueNetwork:impressionData.ad_network]; + [adjustAdRevenue setAdRevenueUnit:impressionData.ad_unit]; + [adjustAdRevenue setAdRevenuePlacement:impressionData.placement]; + // track Adjust ad revenue + [Adjust trackAdRevenue:adjustAdRevenue]; +} +``` + +[ios-readme]: https://github.com/adjust/ios_sdk/blob/master/doc/japanese/README.md From 06a05c66076b316ac4e52d157bfb96be6bb75e87 Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Mon, 19 Jul 2021 11:29:39 +0200 Subject: [PATCH 17/35] Create ironsource.md --- doc/chinese/sdk-to-sdk/ironsource.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 doc/chinese/sdk-to-sdk/ironsource.md diff --git a/doc/chinese/sdk-to-sdk/ironsource.md b/doc/chinese/sdk-to-sdk/ironsource.md new file mode 100644 index 000000000..3a9e8701f --- /dev/null +++ b/doc/chinese/sdk-to-sdk/ironsource.md @@ -0,0 +1,28 @@ +# 通过 Adjust SDK 跟踪 ironSource 广告收入 + +[Adjust iOS SDK 自述文件][ios-readme] + +此功能最低 SDK 版本要求: + +- **Adjust SDK v4.29.0** + +如果您想使用 ironSource SDK 跟踪广告收入,可以借助我们的 SDK-to-SDK 集成,将数据发送到 Adjust 后端。要做到这一点,您需要构建 Adjust 广告收入对象,其中包含想记录的信息,然后将对象发送到 `trackAdRevenue` 方法。 + +> 请注意:如果您对 ironSource 广告收入跟踪有任何疑问,请联系您的专属客户经理,或发送邮件至 [support@adjust.com](mailto:support@adjust.com)。 + +### 示例 + +```objc +- (void)impressionDataDidSucceed:(ISImpressionData *)impressionData { + ADJAdRevenue *adjustAdRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceIronSource]; + [adjustAdRevenue setRevenue:impressionData.revenue currency:@"USD"]; + // optional fields + [adjustAdRevenue setAdRevenueNetwork:impressionData.ad_network]; + [adjustAdRevenue setAdRevenueUnit:impressionData.ad_unit]; + [adjustAdRevenue setAdRevenuePlacement:impressionData.placement]; + // track Adjust ad revenue + [Adjust trackAdRevenue:adjustAdRevenue]; +} +``` + +[ios-readme]: https://github.com/adjust/ios_sdk/blob/master/doc/chinese/README.md From 94c4cd624350a5b0b4a03c9646e3d80bf8446aa1 Mon Sep 17 00:00:00 2001 From: Steven Behnke Date: Thu, 15 Jul 2021 09:44:18 -0500 Subject: [PATCH 18/35] Remove C style casts and use boolValue and intValue methods to avoid static code analysis issues. --- Adjust/ADJUtil.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index 550e73218..a19dcb0f3 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -852,7 +852,7 @@ + (BOOL)deleteFileInPath:(NSString *)filePath { } #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" - BOOL exists = (BOOL)[man performSelector:selExi withObject:filePath]; + BOOL exists = [[man performSelector:selExi withObject:filePath] boolValue]; #pragma clang diagnostic pop if (!exists) { // [[ADJAdjustFactory logger] verbose:@"File does not exist at path %@", filePath]; @@ -1090,7 +1090,7 @@ + (BOOL)trackingEnabled { if (![manager respondsToSelector:selEnabled]) { return NO; } - BOOL enabled = (BOOL)[manager performSelector:selEnabled]; + BOOL enabled = [[manager performSelector:selEnabled] boolValue]; return enabled; #pragma clang diagnostic pop #endif @@ -1255,7 +1255,7 @@ + (int)attStatus { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunguarded-availability" #pragma clang diagnostic ignored "-Warc-performSelector-leaks" - return (int)[appTrackingClass performSelector:selAuthorization]; + return [[appTrackingClass performSelector:selAuthorization] intValue]; #pragma clang diagnostic pop } } From a758faa75dd0d4e6997bc5d888f27738d6724bad Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 16 Jul 2021 14:07:39 +0200 Subject: [PATCH 19/35] improve timestamp date formatting --- Adjust/ADJUtil.m | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index a19dcb0f3..fe6182254 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -133,25 +133,35 @@ + (NSString *)clientSdk { + (NSDateFormatter *)getDateFormatter { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - if ([NSCalendar instancesRespondToSelector:@selector(calendarWithIdentifier:)]) { - // http://stackoverflow.com/a/3339787 - NSString *calendarIdentifier; + NSString *calendarIdentifier; #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wtautological-pointer-compare" - if (&NSCalendarIdentifierGregorian != NULL) { + if (&NSCalendarIdentifierGregorian != NULL) { #pragma clang diagnostic pop - calendarIdentifier = NSCalendarIdentifierGregorian; - } else { + calendarIdentifier = NSCalendarIdentifierGregorian; + } else { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunreachable-code" #pragma clang diagnostic ignored "-Wdeprecated-declarations" - calendarIdentifier = NSGregorianCalendar; + calendarIdentifier = NSGregorianCalendar; #pragma clang diagnostic pop - } - dateFormatter.calendar = [NSCalendar calendarWithIdentifier:calendarIdentifier]; } + [dateFormatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:calendarIdentifier]]; [dateFormatter setDateFormat:kDateFormat]; + Class class = NSClassFromString([NSString adjJoin:@"N", @"S", @"locale", nil]); + if (class != nil) { + NSString *keyLwli = [NSString adjJoin:@"locale", @"with", @"locale", @"identifier:", nil]; + SEL selLwli = NSSelectorFromString(keyLwli); + if ([class respondsToSelector:selLwli]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + id loc = [class performSelector:selLwli withObject:@"en_US"]; + [dateFormatter setLocale:loc]; +#pragma clang diagnostic pop + } + } + return dateFormatter; } @@ -1471,7 +1481,6 @@ + (NSString *)installedAt { pathToCheck = [[NSBundle mainBundle] bundlePath]; } - installTime = [[NSFileManager defaultManager] attributesOfItemAtPath:pathToCheck error:nil][NSFileCreationDate]; __autoreleasing NSError *error; __autoreleasing NSError **errorPointer = &error; Class class = NSClassFromString([NSString adjJoin:@"N", @"S", @"file", @"manager", nil]); From ed11ec30284d0ccbeace197269880f65ff67bcbd Mon Sep 17 00:00:00 2001 From: uerceg Date: Tue, 20 Jul 2021 00:45:12 +0200 Subject: [PATCH 20/35] use NSCalendarIdentifierGregorian by default --- Adjust/ADJUtil.m | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index fe6182254..a80c0028d 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -133,20 +133,7 @@ + (NSString *)clientSdk { + (NSDateFormatter *)getDateFormatter { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - NSString *calendarIdentifier; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wtautological-pointer-compare" - if (&NSCalendarIdentifierGregorian != NULL) { -#pragma clang diagnostic pop - calendarIdentifier = NSCalendarIdentifierGregorian; - } else { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunreachable-code" -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - calendarIdentifier = NSGregorianCalendar; -#pragma clang diagnostic pop - } - [dateFormatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:calendarIdentifier]]; + [dateFormatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]]; [dateFormatter setDateFormat:kDateFormat]; Class class = NSClassFromString([NSString adjJoin:@"N", @"S", @"locale", nil]); From 062fdc26172638948c3bd0e9a8dfd29118abaf27 Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 16 Jul 2021 12:24:22 +0200 Subject: [PATCH 21/35] fix random strings deallocation before being processed by the plugin --- Adjust/ADJPackageBuilder.m | 40 ++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/Adjust/ADJPackageBuilder.m b/Adjust/ADJPackageBuilder.m index edc6223d4..7f5d465b6 100644 --- a/Adjust/ADJPackageBuilder.m +++ b/Adjust/ADJPackageBuilder.m @@ -6,6 +6,8 @@ // Copyright (c) 2013-2018 Adjust GmbH. All rights reserved. // +#include + #import "ADJUtil.h" #import "ADJAttribution.h" #import "ADJAdjustFactory.h" @@ -295,28 +297,40 @@ - (void)signWithSigV2Plugin:(ADJActivityPackage *)activityPackage { if (signerClass == nil) { return; } - SEL signSEL = NSSelectorFromString(@"sign:withActivityKind:withSdkVersion:"); if (![signerClass respondsToSelector:signSEL]) { return; } - NSMutableDictionary * parameters = activityPackage.parameters; - const char * activityKindChar = [[ADJActivityKindUtil activityKindToString:activityPackage.activityKind] UTF8String]; - const char * sdkVersionChar = [activityPackage.clientSdk UTF8String]; + NSMutableDictionary *parameters = activityPackage.parameters; + const char *activityKindChar = [[ADJActivityKindUtil activityKindToString:activityPackage.activityKind] UTF8String]; + const char *sdkVersionChar = [activityPackage.clientSdk UTF8String]; + + // Stack allocated strings to ensure their lifetime stays until the next iteration + static char activityKind[51], sdkVersion[21]; + strncpy(activityKind, activityKindChar, strlen(activityKindChar) + 1); + strncpy(sdkVersion, sdkVersionChar, strlen(sdkVersionChar) + 1); + + // NSInvocation setArgument requires lvalue references with exact matching types to the executed function signature. + // With this usage we ensure that the lifetime of the object remains until the next iteration, as it points to the + // stack allocated string where we copied the buffer. + const char *lvalActivityKind = activityKind; + const char *lvalSdkVersion = sdkVersion; + /* [ADJSigner sign:parameters - withActivityKind:activityKindChar - withSdkVersion:sdkVersionChar]; + withActivityKind:activityKindChar + withSdkVersion:sdkVersionChar]; */ + NSMethodSignature *signMethodSignature = [signerClass methodSignatureForSelector:signSEL]; NSInvocation *signInvocation = [NSInvocation invocationWithMethodSignature:signMethodSignature]; - [signInvocation setSelector: signSEL]; + [signInvocation setSelector:signSEL]; [signInvocation setTarget:signerClass]; - [signInvocation setArgument:¶meters atIndex: 2]; - [signInvocation setArgument:&activityKindChar atIndex: 3]; - [signInvocation setArgument:&sdkVersionChar atIndex: 4]; + [signInvocation setArgument:¶meters atIndex:2]; + [signInvocation setArgument:&lvalActivityKind atIndex:3]; + [signInvocation setArgument:&lvalSdkVersion atIndex:4]; [signInvocation invoke]; @@ -325,17 +339,14 @@ - (void)signWithSigV2Plugin:(ADJActivityPackage *)activityPackage { return; } /* - NSString *signerVersion = [ADJSigner getVersion]; + NSString *signerVersion = [ADJSigner getVersion]; */ IMP getVersionIMP = [signerClass methodForSelector:getVersionSEL]; if (!getVersionIMP) { return; } - id (*getVersionFunc)(id, SEL) = (void *)getVersionIMP; - id signerVersion = getVersionFunc(signerClass, getVersionSEL); - if (![signerVersion isKindOfClass:[NSString class]]) { return; } @@ -344,7 +355,6 @@ - (void)signWithSigV2Plugin:(ADJActivityPackage *)activityPackage { [ADJPackageBuilder parameters:parameters setString:signerVersionString forKey:@"native_version"]; - } - (NSMutableDictionary *)getSessionParameters:(BOOL)isInDelay { From 0cbf45ec81375506988ab5372c9175363858616f Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Mon, 26 Jul 2021 09:56:37 +0200 Subject: [PATCH 22/35] Update README.md Add sentence about README retirement --- doc/korean/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/korean/README.md b/doc/korean/README.md index 5b6f22be9..a003d2703 100644 --- a/doc/korean/README.md +++ b/doc/korean/README.md @@ -1,3 +1,12 @@ +**본 가이드는 만료되었습니다.** + +본 README 파일은 얼마 후 만료될 예정입니다. 당사 헬프 센터에서 SDK 문서를 열람하실 수 있습니다. + +* [English][en-helpcenter] +* [中文][zh-helpcenter] +* [日本語][ja-helpcenter] +* [한국어][ko-helpcenter] + ## 요약 Adjust™의 iOS SDK에 관한 문서입니다. [adjust.com]에서 Adjust™에 대한 정보를 더 자세히 알아보세요. @@ -1328,6 +1337,11 @@ Adjust SDK는 사용자의 설정에 따라 트래킹합니다. 이벤트에 매 [associated-domains-applinks]: https://raw.github.com/adjust/sdks/master/Resources/ios/associated-domains-applinks.png [universal-links-dashboard-values]: https://raw.github.com/adjust/sdks/master/Resources/ios/universal-links-dashboard-values5.png + +[en-helpcenter]: https://help.adjust.com/en/developer/ios-sdk-documentation +[zh-helpcenter]: https://help.adjust.com/zh/developer/ios-sdk-documentation +[ja-helpcenter]: https://help.adjust.com/ja/developer/ios-sdk-documentation +[ko-helpcenter]: https://help.adjust.com/ko/developer/ios-sdk-documentation ## 라이선스 From a97ca707fb469f179d251d128c79351c53d5015f Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Mon, 26 Jul 2021 09:54:00 +0200 Subject: [PATCH 23/35] Update README.md Add sentence about README retirement --- doc/japanese/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/japanese/README.md b/doc/japanese/README.md index 91d628448..9db9b1d56 100644 --- a/doc/japanese/README.md +++ b/doc/japanese/README.md @@ -1,3 +1,12 @@ +**このガイドはまもなく廃止されます。** + +このREADMEファイルはまもなく廃止されます。SDKのドキュメントはAdjustヘルプセンターに掲載されています。以下のリンクよりご覧ください。 + +* [English][en-helpcenter] +* [中文][zh-helpcenter] +* [日本語][ja-helpcenter] +* [한국어][ko-helpcenter] + ## 概要 これはネイティブAdjust™iOS SDKガイドです。Adjust™については[adjust.com]をご覧ください。 @@ -1328,6 +1337,11 @@ Adjust SDKは、実装された通りにイベントを計測します。収益 [associated-domains-applinks]: https://raw.github.com/adjust/sdks/master/Resources/ios/associated-domains-applinks.png [universal-links-dashboard-values]: https://raw.github.com/adjust/sdks/master/Resources/ios/universal-links-dashboard-values5.png [tracking-purchases-and-revenues]: https://help.adjust.com/ja/article/app-events#tracking-purchases-and-revenues + +[en-helpcenter]: https://help.adjust.com/en/developer/ios-sdk-documentation +[zh-helpcenter]: https://help.adjust.com/zh/developer/ios-sdk-documentation +[ja-helpcenter]: https://help.adjust.com/ja/developer/ios-sdk-documentation +[ko-helpcenter]: https://help.adjust.com/ko/developer/ios-sdk-documentation ## ライセンス From 14addc2facf463b95551822bcf1b16cf60b4433b Mon Sep 17 00:00:00 2001 From: Alzbeta-Knerova <74616042+Alzbeta-Knerova@users.noreply.github.com> Date: Mon, 26 Jul 2021 09:51:24 +0200 Subject: [PATCH 24/35] Update README.md Add sentence about README retirement --- doc/chinese/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/chinese/README.md b/doc/chinese/README.md index d83976eff..ce2269c61 100644 --- a/doc/chinese/README.md +++ b/doc/chinese/README.md @@ -1,3 +1,12 @@ +**该指南即将过期。** + +该自述文件即将过期。现在,您可以前往我们的帮助中心查看此 SDK 文档。 + +* [English][en-helpcenter] +* [中文][zh-helpcenter] +* [日本語][ja-helpcenter] +* [한국어][ko-helpcenter] + ## 摘要 这是 Adjust™ 的 iOS SDK 包。您可以在 [adjust.com] 了解更多有关 Adjust™ 的信息。 @@ -1326,6 +1335,11 @@ Adjust SDK 仅跟踪您要求它跟踪的内容。如果您添加收入至事件 [associated-domains-applinks]: https://raw.github.com/adjust/sdks/master/Resources/ios/associated-domains-applinks.png [universal-links-dashboard-values]: https://raw.github.com/adjust/sdks/master/Resources/ios/universal-links-dashboard-values5.png + +[en-helpcenter]: https://help.adjust.com/en/developer/ios-sdk-documentation +[zh-helpcenter]: https://help.adjust.com/zh/developer/ios-sdk-documentation +[ja-helpcenter]: https://help.adjust.com/ja/developer/ios-sdk-documentation +[ko-helpcenter]: https://help.adjust.com/ko/developer/ios-sdk-documentation ## License From 9b5b5bebb88698d783a8742615d1b160310ec497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uglje=C5=A1a=20Erceg?= Date: Fri, 6 Aug 2021 01:08:12 +0200 Subject: [PATCH 25/35] update admob.md --- doc/english/sdk-to-sdk/admob.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/doc/english/sdk-to-sdk/admob.md b/doc/english/sdk-to-sdk/admob.md index b721ba677..efd722a21 100644 --- a/doc/english/sdk-to-sdk/admob.md +++ b/doc/english/sdk-to-sdk/admob.md @@ -11,20 +11,19 @@ Minimum SDK version required for this feature: If you want to track your ad revenue with the Admob SDK, you can use our SDK-to-SDK integration to pass this information to the Adjust backend. To do this, you will need to construct an Adjust ad revenue object containing the information you wish to record, then pass the object to the `trackAdRevenue` method. > Note: If you have any questions about ad revenue tracking with Admob, please contact your dedicated account manager or send an email to [support@adjust.com](mailto:support@adjust.com). + ### Example ```objc -- (void)requestRewardedAd { - self.rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:@"ad unit ID"]; - ViewController *strongSelf = weakSelf; - self.rewardedAd.paidEventHandler = ^void(GADAdValue *_Nonnull value) { - // ... - // send ad revenue info to Adjust - ADJAdRevenue *adRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceAdMob]; - [adRevenue setRevenue:value.value currency:value.currencyCode]; - [Adjust trackAdRevenue:adRevenue]; - } -}; +self.rewardedAd.paidEventHandler = ^void(GADAdValue *_Nonnull value) { + // ... + // send ad revenue info to Adjust + ADJAdRevenue *adRevenue = [[ADJAdRevenue alloc] initWithSource:ADJAdRevenueSourceAdMob]; + [adRevenue setRevenue:value.value currency:value.currencyCode]; + [Adjust trackAdRevenue:adRevenue]; +} ``` +For more information on how to properly integrate and set up AdMob SDK, please check out the [official documentation](https://developers.google.com/admob/ios/early-access/paid-events). + [ios-readme]: ../../../README.md From df416dcebee4332dd89fc7ed3384b74dc017928a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Cabec=CC=A7a?= Date: Thu, 15 Jul 2021 17:09:43 +0200 Subject: [PATCH 26/35] Annotate code referencing APIs annotated as unavailable for iOS extensions. Xcode 13 beta 3 introduces a breaking change related to API unavailable for iOS extensions: https://developer.apple.com/documentation/xcode-release-notes/xcode-13-beta-release-notes This adds the required annotations to all code dependent on APIs unavailable for iOS extensions. --- Adjust/ADJActivityHandler.h | 2 +- Adjust/ADJActivityHandler.m | 2 ++ Adjust/ADJAttributionHandler.h | 2 +- Adjust/ADJAttributionHandler.m | 2 ++ Adjust/ADJUtil.h | 4 ++-- 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Adjust/ADJActivityHandler.h b/Adjust/ADJActivityHandler.h index a3ea75f0f..da0356d4b 100644 --- a/Adjust/ADJActivityHandler.h +++ b/Adjust/ADJActivityHandler.h @@ -72,7 +72,7 @@ - (void)launchEventResponseTasks:(ADJEventResponseData * _Nullable)eventResponseData; - (void)launchSessionResponseTasks:(ADJSessionResponseData * _Nullable)sessionResponseData; - (void)launchSdkClickResponseTasks:(ADJSdkClickResponseData * _Nullable)sdkClickResponseData; -- (void)launchAttributionResponseTasks:(ADJAttributionResponseData * _Nullable)attributionResponseData; +- (void)launchAttributionResponseTasks:(ADJAttributionResponseData * _Nullable)attributionResponseData NS_EXTENSION_UNAVAILABLE_IOS(""); - (void)setEnabled:(BOOL)enabled; - (BOOL)isEnabled; - (BOOL)isGdprForgotten; diff --git a/Adjust/ADJActivityHandler.m b/Adjust/ADJActivityHandler.m index 9b50fcc6a..2cf2eed51 100644 --- a/Adjust/ADJActivityHandler.m +++ b/Adjust/ADJActivityHandler.m @@ -102,6 +102,8 @@ @interface ADJActivityHandler() @property (nonatomic, copy) NSString* gdprPath; @property (nonatomic, copy) NSString* subscriptionPath; +- (void)prepareDeeplinkI:(ADJActivityHandler *_Nullable)selfI responseData:(ADJAttributionResponseData *_Nullable)attributionResponseData NS_EXTENSION_UNAVAILABLE_IOS(""); + @end // copy from ADClientError diff --git a/Adjust/ADJAttributionHandler.h b/Adjust/ADJAttributionHandler.h index 4a27a26b1..dca660f6c 100644 --- a/Adjust/ADJAttributionHandler.h +++ b/Adjust/ADJAttributionHandler.h @@ -23,7 +23,7 @@ - (void)checkSdkClickResponse:(ADJSdkClickResponseData *)sdkClickResponseData; -- (void)checkAttributionResponse:(ADJAttributionResponseData *)attributionResponseData; +- (void)checkAttributionResponse:(ADJAttributionResponseData *)attributionResponseData NS_EXTENSION_UNAVAILABLE_IOS(""); - (void)getAttribution; diff --git a/Adjust/ADJAttributionHandler.m b/Adjust/ADJAttributionHandler.m index a99f84ada..65960ea15 100644 --- a/Adjust/ADJAttributionHandler.m +++ b/Adjust/ADJAttributionHandler.m @@ -28,6 +28,8 @@ @interface ADJAttributionHandler() @property (atomic, assign) BOOL paused; @property (nonatomic, copy) NSString *lastInitiatedBy; +- (void)checkAttributionResponseI:(ADJAttributionHandler*)selfI attributionResponseData:(ADJAttributionResponseData *)attributionResponseData NS_EXTENSION_UNAVAILABLE_IOS(""); + @end @implementation ADJAttributionHandler diff --git a/Adjust/ADJUtil.h b/Adjust/ADJUtil.h index 0f76567eb..bbba25543 100644 --- a/Adjust/ADJUtil.h +++ b/Adjust/ADJUtil.h @@ -31,13 +31,13 @@ typedef void (^isInactiveInjected)(BOOL); + (void)excludeFromBackup:(NSString *)filename; -+ (void)launchDeepLinkMain:(NSURL *)deepLinkUrl; ++ (void)launchDeepLinkMain:(NSURL *)deepLinkUrl NS_EXTENSION_UNAVAILABLE_IOS(""); + (void)launchInMainThread:(dispatch_block_t)block; + (BOOL)isMainThread; -+ (BOOL)isInactive; ++ (BOOL)isInactive NS_EXTENSION_UNAVAILABLE_IOS(""); + (void)launchInMainThreadWithInactive:(isInactiveInjected)isInactiveblock; From b8e25138bafee6cfd2095489fb20db52d63811ce Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 6 Aug 2021 10:47:01 +0200 Subject: [PATCH 27/35] cleanup --- Adjust/ADJActivityHandler.h | 2 +- Adjust/ADJActivityHandler.m | 3 ++- Adjust/ADJAttributionHandler.h | 2 +- Adjust/ADJAttributionHandler.m | 2 -- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Adjust/ADJActivityHandler.h b/Adjust/ADJActivityHandler.h index da0356d4b..a3ea75f0f 100644 --- a/Adjust/ADJActivityHandler.h +++ b/Adjust/ADJActivityHandler.h @@ -72,7 +72,7 @@ - (void)launchEventResponseTasks:(ADJEventResponseData * _Nullable)eventResponseData; - (void)launchSessionResponseTasks:(ADJSessionResponseData * _Nullable)sessionResponseData; - (void)launchSdkClickResponseTasks:(ADJSdkClickResponseData * _Nullable)sdkClickResponseData; -- (void)launchAttributionResponseTasks:(ADJAttributionResponseData * _Nullable)attributionResponseData NS_EXTENSION_UNAVAILABLE_IOS(""); +- (void)launchAttributionResponseTasks:(ADJAttributionResponseData * _Nullable)attributionResponseData; - (void)setEnabled:(BOOL)enabled; - (BOOL)isEnabled; - (BOOL)isGdprForgotten; diff --git a/Adjust/ADJActivityHandler.m b/Adjust/ADJActivityHandler.m index 2cf2eed51..6a9bfc9ee 100644 --- a/Adjust/ADJActivityHandler.m +++ b/Adjust/ADJActivityHandler.m @@ -102,7 +102,8 @@ @interface ADJActivityHandler() @property (nonatomic, copy) NSString* gdprPath; @property (nonatomic, copy) NSString* subscriptionPath; -- (void)prepareDeeplinkI:(ADJActivityHandler *_Nullable)selfI responseData:(ADJAttributionResponseData *_Nullable)attributionResponseData NS_EXTENSION_UNAVAILABLE_IOS(""); +- (void)prepareDeeplinkI:(ADJActivityHandler *_Nullable)selfI + responseData:(ADJAttributionResponseData *_Nullable)attributionResponseData NS_EXTENSION_UNAVAILABLE_IOS(""); @end diff --git a/Adjust/ADJAttributionHandler.h b/Adjust/ADJAttributionHandler.h index dca660f6c..4a27a26b1 100644 --- a/Adjust/ADJAttributionHandler.h +++ b/Adjust/ADJAttributionHandler.h @@ -23,7 +23,7 @@ - (void)checkSdkClickResponse:(ADJSdkClickResponseData *)sdkClickResponseData; -- (void)checkAttributionResponse:(ADJAttributionResponseData *)attributionResponseData NS_EXTENSION_UNAVAILABLE_IOS(""); +- (void)checkAttributionResponse:(ADJAttributionResponseData *)attributionResponseData; - (void)getAttribution; diff --git a/Adjust/ADJAttributionHandler.m b/Adjust/ADJAttributionHandler.m index 65960ea15..a99f84ada 100644 --- a/Adjust/ADJAttributionHandler.m +++ b/Adjust/ADJAttributionHandler.m @@ -28,8 +28,6 @@ @interface ADJAttributionHandler() @property (atomic, assign) BOOL paused; @property (nonatomic, copy) NSString *lastInitiatedBy; -- (void)checkAttributionResponseI:(ADJAttributionHandler*)selfI attributionResponseData:(ADJAttributionResponseData *)attributionResponseData NS_EXTENSION_UNAVAILABLE_IOS(""); - @end @implementation ADJAttributionHandler From 83f5f75107f19879996822ba8f99ca40809ca5ce Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 6 Aug 2021 10:56:18 +0200 Subject: [PATCH 28/35] update version number to 4.29.4 --- Adjust.podspec | 4 ++-- Adjust/ADJUtil.m | 2 +- Adjust/Adjust.h | 2 +- AdjustBridge/AdjustBridgeRegister.m | 2 +- AdjustTests/AdjustUnitTests/ADJPackageFields.m | 2 +- README.md | 4 ++-- VERSION | 2 +- doc/chinese/README.md | 4 ++-- doc/english/migrate.md | 2 +- doc/english/web_views.md | 2 +- doc/japanese/README.md | 4 ++-- doc/korean/README.md | 4 ++-- doc/korean/web_views.md | 2 +- doc/migrate.md | 2 +- 14 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Adjust.podspec b/Adjust.podspec index 263fdb96e..cb3ac6a0d 100644 --- a/Adjust.podspec +++ b/Adjust.podspec @@ -1,11 +1,11 @@ Pod::Spec.new do |s| s.name = "Adjust" - s.version = "4.29.3" + s.version = "4.29.4" s.summary = "This is the iOS SDK of adjust. You can read more about it at http://adjust.com." s.homepage = "https://github.com/adjust/ios_sdk" s.license = { :type => 'MIT', :file => 'MIT-LICENSE' } s.author = { "Christian Wellenbrock" => "welle@adjust.com" } - s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.29.3" } + s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.29.4" } s.ios.deployment_target = '6.0' s.tvos.deployment_target = '9.0' s.framework = 'SystemConfiguration' diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index a80c0028d..39e4551ba 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -39,7 +39,7 @@ static NSRegularExpression *shortUniversalLinkRegex = nil; static NSRegularExpression *excludedDeeplinkRegex = nil; -static NSString * const kClientSdk = @"ios4.29.3"; +static NSString * const kClientSdk = @"ios4.29.4"; static NSString * const kDeeplinkParam = @"deep_link="; static NSString * const kSchemeDelimiter = @"://"; static NSString * const kDefaultScheme = @"AdjustUniversalScheme"; diff --git a/Adjust/Adjust.h b/Adjust/Adjust.h index 41b088092..2d4093063 100644 --- a/Adjust/Adjust.h +++ b/Adjust/Adjust.h @@ -2,7 +2,7 @@ // Adjust.h // Adjust SDK // -// V4.29.3 +// V4.29.4 // Created by Christian Wellenbrock (@wellle) on 23rd July 2013. // Copyright (c) 2012-2021 Adjust GmbH. All rights reserved. // diff --git a/AdjustBridge/AdjustBridgeRegister.m b/AdjustBridge/AdjustBridgeRegister.m index f87de21d8..e3d5d315f 100644 --- a/AdjustBridge/AdjustBridgeRegister.m +++ b/AdjustBridge/AdjustBridgeRegister.m @@ -246,7 +246,7 @@ + (NSString *)adjust_js { if (this.sdkPrefix) { return this.sdkPrefix; } else { - return 'web-bridge4.29.3'; + return 'web-bridge4.29.4'; } }, setTestOptions: function(testOptions) { diff --git a/AdjustTests/AdjustUnitTests/ADJPackageFields.m b/AdjustTests/AdjustUnitTests/ADJPackageFields.m index 5c02afbe5..2181328f0 100644 --- a/AdjustTests/AdjustUnitTests/ADJPackageFields.m +++ b/AdjustTests/AdjustUnitTests/ADJPackageFields.m @@ -16,7 +16,7 @@ - (id) init { // default values self.appToken = @"qwerty123456"; - self.clientSdk = @"ios4.29.3"; + self.clientSdk = @"ios4.29.4"; self.suffix = @""; self.environment = @"sandbox"; diff --git a/README.md b/README.md index 99c332785..85e50a452 100644 --- a/README.md +++ b/README.md @@ -95,13 +95,13 @@ We will describe the steps to integrate the Adjust SDK into your iOS project. We If you're using [CocoaPods][cocoapods], you can add the following line to your `Podfile` and continue from [this step](#sdk-integrate): ```ruby -pod 'Adjust', '~> 4.29.3' +pod 'Adjust', '~> 4.29.4' ``` or: ```ruby -pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.29.3' +pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.29.4' ``` --- diff --git a/VERSION b/VERSION index 763892f5c..28a021bf4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.29.3 +4.29.4 diff --git a/doc/chinese/README.md b/doc/chinese/README.md index ce2269c61..1270f5ac8 100644 --- a/doc/chinese/README.md +++ b/doc/chinese/README.md @@ -95,13 +95,13 @@ 如果您正在使用 [CocoaPods][cocoapods],可以将以下代码行添加至 `Podfile`,然后继续进行[此步骤](#sdk-integrate): ```ruby -pod 'Adjust', '~> 4.29.3' +pod 'Adjust', '~> 4.29.4' ``` 或: ```ruby -pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.29.3' +pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.29.4' ``` --- diff --git a/doc/english/migrate.md b/doc/english/migrate.md index a42d4b7ac..aeef7d7ed 100644 --- a/doc/english/migrate.md +++ b/doc/english/migrate.md @@ -1,4 +1,4 @@ -## Migrate your Adjust SDK for iOS to v4.29.3 from v3.4.0 +## Migrate your Adjust SDK for iOS to v4.29.4 from v3.4.0 ### Initial setup diff --git a/doc/english/web_views.md b/doc/english/web_views.md index 92f2e28b7..cded3780b 100644 --- a/doc/english/web_views.md +++ b/doc/english/web_views.md @@ -64,7 +64,7 @@ We will describe the steps to integrate the Adjust SDK into your iOS project. We If you're using [CocoaPods][cocoapods], you can add the following line to your `Podfile` and continue from [this step](#sdk-integrate): ```ruby -pod 'Adjust/WebBridge', '~> 4.29.3' +pod 'Adjust/WebBridge', '~> 4.29.4' ``` --- diff --git a/doc/japanese/README.md b/doc/japanese/README.md index 9db9b1d56..cfee2ae19 100644 --- a/doc/japanese/README.md +++ b/doc/japanese/README.md @@ -95,13 +95,13 @@ Adjust SDKをiOSプロジェクトに導入する手順を説明します。Xcod [CocoaPods][cocoapods]を使用している場合は、Podfile`に下記のコードを追加し、[こちらの手順](#sdk-integrate)に進んでください。 ```ruby -pod 'Adjust', '~> 4.29.3' +pod 'Adjust', '~> 4.29.4' ``` または ```ruby -pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.29.3' +pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.29.4' ``` --- diff --git a/doc/korean/README.md b/doc/korean/README.md index a003d2703..f663baae5 100644 --- a/doc/korean/README.md +++ b/doc/korean/README.md @@ -95,13 +95,13 @@ iOS 개발용 Xcode를 사용한다는 가정하에 iOS 프로젝트에 Adjust S [CocoaPods][cocoapods]를 사용하는 경우, 다음 내용을 `Podfile`에 추가한 후 [해당 단계](#sdk-integrate)를 완료하세요. ```ruby -pod `Adjust`, `~> 4.29.3` +pod `Adjust`, `~> 4.29.4` ``` 또는: ```ruby -pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.29.3' +pod 'Adjust', :git => 'https://github.com/adjust/ios_sdk.git', :tag => 'v4.29.4' ``` --- diff --git a/doc/korean/web_views.md b/doc/korean/web_views.md index ef4796054..bf35a0ac1 100644 --- a/doc/korean/web_views.md +++ b/doc/korean/web_views.md @@ -64,7 +64,7 @@ iOS 개발용 Xcode를 사용한다는 가정하에 iOS 프로젝트에 Adjust S [CocoaPods][cocoapods]를 사용하는 경우, 다음 내용을 'Podfile'에 추가한 후 [해당 단계](#sdk-integrate)를 완료하세요. ```ruby -pod 'Adjust/WebBridge', '~> 4.29.3' +pod 'Adjust/WebBridge', '~> 4.29.4' ``` --- diff --git a/doc/migrate.md b/doc/migrate.md index a42d4b7ac..aeef7d7ed 100644 --- a/doc/migrate.md +++ b/doc/migrate.md @@ -1,4 +1,4 @@ -## Migrate your Adjust SDK for iOS to v4.29.3 from v3.4.0 +## Migrate your Adjust SDK for iOS to v4.29.4 from v3.4.0 ### Initial setup From 8542f778fbc158299edd2c87638aef9c27c1d85f Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 6 Aug 2021 11:01:11 +0200 Subject: [PATCH 29/35] upate CHANGELOG --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a0ede15a..0044f8487 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +### Version 4.29.4 (6th August 2021) +#### Fixed +- Fixed new Xcode 13 beta compile time errors for extensions targets (https://github.com/adjust/ios_sdk/pull/559). +- Improved dummy iAd attribution responses filtering (https://github.com/adjust/ios_sdk/pull/524). +- Fixed SPM warnnings about `ADJLinkResolution.h` not being part of umbrella header (https://github.com/adjust/ios_sdk/pull/557). +- Fixed some static code analysis warnings (https://github.com/adjust/ios_sdk/pull/558). + +--- + ### Version 4.29.3 (16th June 2021) #### Fixed - Fixed compile time errors with Xcode 13 beta (thanks to @yhkaplan). From 485e7397a907b5f28ffb54de090313e6cd7d1fee Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 6 Aug 2021 22:33:39 +0200 Subject: [PATCH 30/35] guard against performSelector: nil return values --- Adjust/ADJUtil.m | 53 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index 39e4551ba..239497e6e 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -847,13 +847,25 @@ + (BOOL)deleteFileInPath:(NSString *)filePath { if (![man respondsToSelector:selExi]) { return NO; } -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - BOOL exists = [[man performSelector:selExi withObject:filePath] boolValue]; -#pragma clang diagnostic pop +//#pragma clang diagnostic push +//#pragma clang diagnostic ignored "-Warc-performSelector-leaks" +// BOOL exists = [[man performSelector:selExi withObject:filePath] boolValue]; +//#pragma clang diagnostic pop +// if (!exists) { +// // [[ADJAdjustFactory logger] verbose:@"File does not exist at path %@", filePath]; +// return YES; +// } + + NSMethodSignature *msExi = [man methodSignatureForSelector:selExi]; + NSInvocation *invExi = [NSInvocation invocationWithMethodSignature:msExi]; + [invExi setSelector:selExi]; + [invExi setTarget:man]; + [invExi setArgument:&filePath atIndex:2]; + [invExi invoke]; + BOOL exists; + [invExi getReturnValue:&exists]; if (!exists) { - // [[ADJAdjustFactory logger] verbose:@"File does not exist at path %@", filePath]; - return YES; + return NO; } __autoreleasing NSError *error; @@ -1087,7 +1099,16 @@ + (BOOL)trackingEnabled { if (![manager respondsToSelector:selEnabled]) { return NO; } - BOOL enabled = [[manager performSelector:selEnabled] boolValue]; + // BOOL enabled = [[manager performSelector:selEnabled] boolValue]; + // return enabled; + + NSMethodSignature *msEnabled = [manager methodSignatureForSelector:selEnabled]; + NSInvocation *invEnabled = [NSInvocation invocationWithMethodSignature:msEnabled]; + [invEnabled setSelector:selEnabled]; + [invEnabled setTarget:manager]; + [invEnabled invoke]; + BOOL enabled; + [invEnabled getReturnValue:&enabled]; return enabled; #pragma clang diagnostic pop #endif @@ -1249,11 +1270,19 @@ + (int)attStatus { NSString *keyAuthorization = [NSString adjJoin:@"tracking", @"authorization", @"status", nil]; SEL selAuthorization = NSSelectorFromString(keyAuthorization); if ([appTrackingClass respondsToSelector:selAuthorization]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - return [[appTrackingClass performSelector:selAuthorization] intValue]; -#pragma clang diagnostic pop +//#pragma clang diagnostic push +//#pragma clang diagnostic ignored "-Wunguarded-availability" +//#pragma clang diagnostic ignored "-Warc-performSelector-leaks" +// return [[appTrackingClass performSelector:selAuthorization] intValue]; +//#pragma clang diagnostic pop + NSMethodSignature *msAuthorization = [appTrackingClass methodSignatureForSelector:selAuthorization]; + NSInvocation *invAuthorization = [NSInvocation invocationWithMethodSignature:msAuthorization]; + [invAuthorization setSelector:selAuthorization]; + [invAuthorization invokeWithTarget:appTrackingClass]; + [invAuthorization invoke]; + NSUInteger status; + [invAuthorization getReturnValue:&status]; + return (int)status; } } return -1; From 96ded0e22f994237858c1065d9b2d70fcd7a62e9 Mon Sep 17 00:00:00 2001 From: uerceg Date: Fri, 6 Aug 2021 22:44:14 +0200 Subject: [PATCH 31/35] fix return value in deleteFileInPath: --- Adjust/ADJUtil.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index 239497e6e..d77857de7 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -865,7 +865,7 @@ + (BOOL)deleteFileInPath:(NSString *)filePath { BOOL exists; [invExi getReturnValue:&exists]; if (!exists) { - return NO; + return YES; } __autoreleasing NSError *error; From b05d75dc4d7bc29570b34b30814c13eb3b8ddac4 Mon Sep 17 00:00:00 2001 From: uerceg Date: Mon, 9 Aug 2021 22:12:39 +0200 Subject: [PATCH 32/35] make Obj-C example app iOS 14.5+ friendly --- .../AdjustExample-ObjC.xcodeproj/project.pbxproj | 4 ++-- .../AdjustExample-ObjC/AdjustExample-ObjC/AppDelegate.m | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/examples/AdjustExample-ObjC/AdjustExample-ObjC.xcodeproj/project.pbxproj b/examples/AdjustExample-ObjC/AdjustExample-ObjC.xcodeproj/project.pbxproj index 150084ae4..871c4f586 100644 --- a/examples/AdjustExample-ObjC/AdjustExample-ObjC.xcodeproj/project.pbxproj +++ b/examples/AdjustExample-ObjC/AdjustExample-ObjC.xcodeproj/project.pbxproj @@ -46,13 +46,13 @@ 9D449E2E1E6ED88F00E7E80B /* ADJBackoffStrategy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449E091E6ED88F00E7E80B /* ADJBackoffStrategy.m */; }; 9D449E2F1E6ED88F00E7E80B /* ADJSdkClickHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449E0B1E6ED88F00E7E80B /* ADJSdkClickHandler.m */; }; 9D449E311E6ED88F00E7E80B /* ADJSessionParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D449E0F1E6ED88F00E7E80B /* ADJSessionParameters.m */; }; - 9DAA5C6725AFA4B600C718DD /* AdServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DAA5C6625AFA4B600C718DD /* AdServices.framework */; }; + 9DAA5C6725AFA4B600C718DD /* AdServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DAA5C6625AFA4B600C718DD /* AdServices.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 9DC95F261C104CEF00138E4B /* ViewControllerObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DC95F251C104CEF00138E4B /* ViewControllerObjC.m */; }; 9DC95F2A1C10515300138E4B /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DC95F291C10515300138E4B /* Constants.m */; }; 9DD0E9BE1F457EF800B2A759 /* ADJUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DD0E9BD1F457EF800B2A759 /* ADJUserDefaults.m */; }; 9DF38231260E9DAD0033F5A1 /* NSNumber+ADJAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF38230260E9DAD0033F5A1 /* NSNumber+ADJAdditions.m */; }; 9DF92D992630EDCD000FC3FC /* ADJPackageParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DF92D982630EDCD000FC3FC /* ADJPackageParams.m */; }; - D799022C24C093AA00C7D11C /* AppTrackingTransparency.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D799022B24C093AA00C7D11C /* AppTrackingTransparency.framework */; }; + D799022C24C093AA00C7D11C /* AppTrackingTransparency.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D799022B24C093AA00C7D11C /* AppTrackingTransparency.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ diff --git a/examples/AdjustExample-ObjC/AdjustExample-ObjC/AppDelegate.m b/examples/AdjustExample-ObjC/AdjustExample-ObjC/AppDelegate.m index 947d3ae6e..1c54c7d6b 100644 --- a/examples/AdjustExample-ObjC/AdjustExample-ObjC/AppDelegate.m +++ b/examples/AdjustExample-ObjC/AdjustExample-ObjC/AppDelegate.m @@ -71,6 +71,13 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( // Interrupt delayed start set with setDelayStart: method. // [Adjust sendFirstPackages]; + // Show ATT dialog. + if (@available(iOS 14, *)) { + [Adjust requestTrackingAuthorizationWithCompletionHandler:^(NSUInteger status) { + // Process users' response. + }]; + } + return YES; } From 3e8cfd3f4bfe5d09d822c24c6f27b6ed1856465e Mon Sep 17 00:00:00 2001 From: uerceg Date: Mon, 9 Aug 2021 22:14:52 +0200 Subject: [PATCH 33/35] remove commented out code --- Adjust/ADJUtil.m | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index d77857de7..0e1015d5f 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -847,14 +847,6 @@ + (BOOL)deleteFileInPath:(NSString *)filePath { if (![man respondsToSelector:selExi]) { return NO; } -//#pragma clang diagnostic push -//#pragma clang diagnostic ignored "-Warc-performSelector-leaks" -// BOOL exists = [[man performSelector:selExi withObject:filePath] boolValue]; -//#pragma clang diagnostic pop -// if (!exists) { -// // [[ADJAdjustFactory logger] verbose:@"File does not exist at path %@", filePath]; -// return YES; -// } NSMethodSignature *msExi = [man methodSignatureForSelector:selExi]; NSInvocation *invExi = [NSInvocation invocationWithMethodSignature:msExi]; @@ -1099,8 +1091,6 @@ + (BOOL)trackingEnabled { if (![manager respondsToSelector:selEnabled]) { return NO; } - // BOOL enabled = [[manager performSelector:selEnabled] boolValue]; - // return enabled; NSMethodSignature *msEnabled = [manager methodSignatureForSelector:selEnabled]; NSInvocation *invEnabled = [NSInvocation invocationWithMethodSignature:msEnabled]; @@ -1270,11 +1260,6 @@ + (int)attStatus { NSString *keyAuthorization = [NSString adjJoin:@"tracking", @"authorization", @"status", nil]; SEL selAuthorization = NSSelectorFromString(keyAuthorization); if ([appTrackingClass respondsToSelector:selAuthorization]) { -//#pragma clang diagnostic push -//#pragma clang diagnostic ignored "-Wunguarded-availability" -//#pragma clang diagnostic ignored "-Warc-performSelector-leaks" -// return [[appTrackingClass performSelector:selAuthorization] intValue]; -//#pragma clang diagnostic pop NSMethodSignature *msAuthorization = [appTrackingClass methodSignatureForSelector:selAuthorization]; NSInvocation *invAuthorization = [NSInvocation invocationWithMethodSignature:msAuthorization]; [invAuthorization setSelector:selAuthorization]; From 13e67c56150cadc0c4933be8788bb52169e3fc24 Mon Sep 17 00:00:00 2001 From: uerceg Date: Mon, 9 Aug 2021 22:27:38 +0200 Subject: [PATCH 34/35] improve AdServices.framework integration logging a bit --- Adjust/ADJActivityHandler.m | 5 ++++- Adjust/ADJUtil.m | 14 ++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Adjust/ADJActivityHandler.m b/Adjust/ADJActivityHandler.m index 6a9bfc9ee..bb00898aa 100644 --- a/Adjust/ADJActivityHandler.m +++ b/Adjust/ADJActivityHandler.m @@ -1767,6 +1767,9 @@ - (BOOL)shouldFetchAdServicesI:(ADJActivityHandler *)selfI { } // Fetch if no attribution OR not sent to backend yet + if ([ADJUserDefaults getAdServicesTracked]) { + [selfI.logger debug:@"AdServices attribution info already read"]; + } return (selfI.attribution == nil || ![ADJUserDefaults getAdServicesTracked]); } @@ -2739,7 +2742,7 @@ - (void)registerForSKAdNetworkAttribution { Class skAdNetwork = NSClassFromString(@"SKAdNetwork"); if (skAdNetwork == nil) { - [logger warn:@"StoreKit framework not found in user's app (SKAdNetwork not found)"]; + [logger warn:@"StoreKit framework not found in the app (SKAdNetwork not found)"]; return; } diff --git a/Adjust/ADJUtil.m b/Adjust/ADJUtil.m index 0e1015d5f..c951317fd 100644 --- a/Adjust/ADJUtil.m +++ b/Adjust/ADJUtil.m @@ -1036,7 +1036,7 @@ + (void)updateSkAdNetworkConversionValue:(NSNumber *)conversionValue { Class skAdNetwork = NSClassFromString(@"SKAdNetwork"); if (skAdNetwork == nil) { - [logger warn:@"StoreKit framework not found in user's app (SKAdNetwork not found)"]; + [logger warn:@"StoreKit framework not found in the app (SKAdNetwork not found)"]; return; } @@ -1279,7 +1279,7 @@ + (NSString *)fetchAdServicesAttribution:(NSError **)errorPtr { // [AAAttribution attributionTokenWithError:...] Class attributionClass = NSClassFromString(@"AAAttribution"); if (attributionClass == nil) { - [logger warn:@"AdServices framework not found in user's app (AAAttribution not found)"]; + [logger warn:@"AdServices framework not found in the app (AAAttribution class not found)"]; if (errorPtr) { *errorPtr = [NSError errorWithDomain:@"com.adjust.sdk.adServices" code:100 @@ -1290,6 +1290,7 @@ + (NSString *)fetchAdServicesAttribution:(NSError **)errorPtr { SEL attributionTokenSelector = NSSelectorFromString(@"attributionTokenWithError:"); if (![attributionClass respondsToSelector:attributionTokenSelector]) { + [logger warn:@"AdServices framework not found in the app (attributionTokenWithError: method not found)"]; if (errorPtr) { *errorPtr = [NSError errorWithDomain:@"com.adjust.sdk.adServices" code:100 @@ -1315,6 +1316,7 @@ + (NSString *)fetchAdServicesAttribution:(NSError **)errorPtr { return nil; } + [logger debug:@"AdServices framework successfully found in the app"]; NSString * __unsafe_unretained tmpToken = nil; [tokenInvocation getReturnValue:&tmpToken]; NSString *token = tmpToken; @@ -1334,22 +1336,22 @@ + (void)checkForiAd:(ADJActivityHandler *)activityHandler queue:(dispatch_queue_ // [[ADClient sharedClient] ...] Class ADClientClass = NSClassFromString(@"ADClient"); if (ADClientClass == nil) { - [logger warn:@"iAd framework not found in user's app (ADClientClass not found)"]; + [logger warn:@"iAd framework not found in the app (ADClientClass not found)"]; return; } #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" SEL sharedClientSelector = NSSelectorFromString(@"sharedClient"); if (![ADClientClass respondsToSelector:sharedClientSelector]) { - [logger warn:@"iAd framework not found in user's app (sharedClient method not found)"]; + [logger warn:@"iAd framework not found in the app (sharedClient method not found)"]; return; } id ADClientSharedClientInstance = [ADClientClass performSelector:sharedClientSelector]; if (ADClientSharedClientInstance == nil) { - [logger warn:@"iAd framework not found in user's app (ADClientSharedClientInstance is nil)"]; + [logger warn:@"iAd framework not found in the app (ADClientSharedClientInstance is nil)"]; return; } - [logger debug:@"iAd framework successfully found in user's app"]; + [logger debug:@"iAd framework successfully found in the app"]; BOOL iAdInformationAvailable = [ADJUtil setiAdWithDetails:activityHandler adClientSharedInstance:ADClientSharedClientInstance queue:queue]; From f7a9fb6bfe485a7f86bf02716f11213623559acc Mon Sep 17 00:00:00 2001 From: uerceg Date: Mon, 9 Aug 2021 22:29:12 +0200 Subject: [PATCH 35/35] update CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0044f8487..488d7dd0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### Version 4.29.4 (6th August 2021) +### Version 4.29.4 (9th August 2021) #### Fixed - Fixed new Xcode 13 beta compile time errors for extensions targets (https://github.com/adjust/ios_sdk/pull/559). - Improved dummy iAd attribution responses filtering (https://github.com/adjust/ios_sdk/pull/524).