Skip to content

Commit

Permalink
Merge pull request #457 from AppsFlyerSDK/releases/6.x.x/6.10.x/6.10.…
Browse files Browse the repository at this point in the history
…2-rc2

Releases/6.x.x/6.10.x/6.10.2 rc2
  • Loading branch information
amit-kremer93 authored Apr 3, 2023
2 parents 9ec7763 + 8dd6c1b commit 16bc2be
Show file tree
Hide file tree
Showing 20 changed files with 136 additions and 54 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/deploy-to-QA.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
BRANCH_NAME: ${{github.ref_name}}
run: |
fixed_version_found=false
plugin_version=$(echo "$BRANCH_NAME" | grep -Eo '[0-9].[0-9].[0-9]+')
plugin_version=$(echo "$BRANCH_NAME" | grep -Eo '[0-9].[0-9]+.[0-9]+')
jira_fixed_version="React Native SDK v$plugin_version"
# echo "PLUGIN_VERSION=$plugin_version" >> $GITHUB_ENV
echo "JIRA_FIXED_VERSION=$jira_fixed_version" >> $GITHUB_ENV
Expand All @@ -32,7 +32,7 @@ jobs:
- name: Update package.json file
run: |
plugin_rc_version=$(echo "${{github.ref_name}}" | grep -Eo '[0-9].[0-9].[0-9]+-rc[0-9]+')
plugin_rc_version=$(echo "${{github.ref_name}}" | grep -Eo '[0-9].[0-9]+.[0-9]+-rc[0-9]+')
echo "Updating plugin to version $plugin_rc_version"
npm version $plugin_rc_version
git push
Expand All @@ -48,7 +48,7 @@ jobs:
env:
SLACK_TOKEN: ${{ secrets.CI_SLACK_TOKEN }}
run: |
ios_sdk_version=$(cat README.md | grep 'iOS AppsFlyer SDK \*\*v[0-9].[0-9].[0-9]\*\*')
android_sdk_version=$(cat README.md | grep 'Android AppsFlyer SDK \*\*v[0-9].[0-9].[0-9]\*\*')
ios_sdk_version=$(cat README.md | grep 'iOS AppsFlyer SDK' | grep -Eo '[0-9].[0-9]+.[0-9]')
android_sdk_version=$(cat README.md | grep 'Android AppsFlyer SDK' | grep -Eo '[0-9].[0-9]+.[0-9]')
CHANGES=$(cat "${{env.JIRA_FIXED_VERSION}}-releasenotes".txt)
curl -X POST -H 'Content-type: application/json' --data '{"jira_fixed_version": "'"${{env.JIRA_FIXED_VERSION}}"'", "deploy_type": "QA", "install_tag": "QA", "git_branch": "'"${{github.ref_name}}"'", "changes_and_fixes": "'"$CHANGES"'", "android_dependencie": "'"$android_sdk_version"'", "ios_dependencie": "'"$ios_sdk_version"'"}' "$SLACK_TOKEN"
2 changes: 1 addition & 1 deletion .github/workflows/pre-release-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Update package.json file
run: |
plugin_version=$(echo "${{ steps.vars.outputs.branch }}" | grep -Eo '[0-9].[0-9].[0-9]+')
plugin_version=$(echo "${{ steps.vars.outputs.branch }}" | grep -Eo '[0-9].[0-9]+.[0-9]+')
# we export plugin_version and release branch name as env so we can use them in the next step
echo "PLUGIN_VERSION=$plugin_version" >> $GITHUB_ENV
echo "GIT_BRANCH_RELEASE=${{ steps.vars.outputs.branch }}" >> $GITHUB_ENV
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release-Production-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Determine release tag and release branch
run: |
TAG=$(echo "${{ steps.vars.outputs.branch }}" | grep -Eo '[0-9].[0-9].[0-9]+')
TAG=$(echo "${{ steps.vars.outputs.branch }}" | grep -Eo '[0-9].[0-9]+.[0-9]+')
echo "PLUGIN_VERSION=$TAG" >> $GITHUB_ENV
echo "RELEASE_BRANCH_NAME=${{ steps.vars.outputs.branch }}" >> $GITHUB_ENV
echo "push new release >> $TAG"
Expand Down Expand Up @@ -74,7 +74,7 @@ jobs:
run: |
chmod +x .github/workflows/scripts/releaseNotesGenerator.sh
.github/workflows/scripts/releaseNotesGenerator.sh $JIRA_TOKEN "$JIRA_FIXED_VERSION"
ios_sdk_version=$(cat README.md | grep 'iOS AppsFlyer SDK \*\*v[0-9].[0-9].[0-9]\*\*')
android_sdk_version=$(cat README.md | grep 'Android AppsFlyer SDK \*\*v[0-9].[0-9].[0-9]\*\*')
ios_sdk_version=$(cat README.md | grep 'iOS AppsFlyer SDK' | grep -Eo '[0-9].[0-9]+.[0-9]')
android_sdk_version=$(cat README.md | grep 'Android AppsFlyer SDK' | grep -Eo '[0-9].[0-9]+.[0-9]')
CHANGES=$(cat "$JIRA_FIXED_VERSION-releasenotes".txt)
curl -X POST -H 'Content-type: application/json' --data '{"jira_fixed_version": "'"${{env.JIRA_FIXED_VERSION}}"'", "deploy_type": "Production", "install_tag": "latest", "git_branch": "'"$RELEASE_BRACH_NAME"'", "changes_and_fixes": "'"$CHANGES"'", "android_dependencie": "'"$android_sdk_version"'", "ios_dependencie": "'"$ios_sdk_version"'"}' "$SLACK_TOKEN"
2 changes: 1 addition & 1 deletion .github/workflows/release-QA-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Release plugin to QA
on:
push:
branches:
- releases/[0-9].x.x/[0-9].[0-9].x/[0-9].[0-9].[0-9]+-rc[0-9]+
- releases/[0-9].x.x/[0-9].[0-9]+.x/[0-9].[0-9]+.[0-9]+-rc[0-9]+

jobs:
Run-Unit-Tests:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/scripts/releaseNotesGenerator.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ JIRA_TOKEN=$1
JIRA_FIXED_VERSION=$2

fixed_version_found=false
curl -X GET -H "Authorization: Basic $JIRA_TOKEN=" https://appsflyer.atlassian.net/rest/api/3/project/11723/versions | jq -r '.[] | .name+""+.id' | while read version ; do
curl -X GET https://appsflyer.atlassian.net/rest/api/3/project/11723/versions --user $JIRA_TOKEN | jq -r '.[] | .name+""+.id' | while read version ; do
if [[ "$version" == *"$JIRA_FIXED_VERSION"* ]] ;then
echo "$JIRA_FIXED_VERSION Found!"
fixed_version_found=true
version_id=${version#"$JIRA_FIXED_VERSION"}
echo $(curl -X GET -H "Authorization: Basic $JIRA_TOKEN=" https://appsflyer.atlassian.net/rest/api/3/search?jql=fixVersion=$version_id | jq -r '.issues[] | "- " + .fields["summary"]+"@"') > "$JIRA_FIXED_VERSION-releasenotes".txt
echo $(curl -X GET https://appsflyer.atlassian.net/rest/api/3/search?jql=fixVersion=$version_id --user $JIRA_TOKEN | jq -r '.issues[] | "- " + .fields["summary"]+"@"') > "$JIRA_FIXED_VERSION-releasenotes".txt
sed -i -r -e "s/@ /\n/gi" "$JIRA_FIXED_VERSION-releasenotes".txt
sed -i -r -e "s/@/\n/gi" "$JIRA_FIXED_VERSION-releasenotes".txt
cat "$JIRA_FIXED_VERSION-releasenotes".txt
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 6.10.2
Release date: *2023-04-03*

- Update Android SDK to v6.10.2
- Update iOS SDK to v6.10.1

## 6.9.4
Release date: *2022-12-27*

Expand Down
28 changes: 22 additions & 6 deletions Docs/DeepLink.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,9 @@ Since users may or may not have the mobile app installed, there are 3 types of d
2. Direct Deep Linking - Directly serving personalized content to existing users, which already have the mobile app installed.
3. Starting from v6.1.3, the new Unified Deep Linking API is available to handle deeplinking logic.

For more info please check out the [OneLink™ Deep Linking Guide](https://support.appsflyer.com/hc/en-us/articles/208874366-OneLink-Deep-Linking-Guide#Intro).

### <a id="deferred-deep-linking"> 1. Deferred Deep Linking (Get Conversion Data)

Check out the deferred deeplinkg guide from the AppFlyer knowledge base [here](https://support.appsflyer.com/hc/en-us/articles/207032096-Accessing-AppsFlyer-Attribution-Conversion-Data-from-the-SDK-Deferred-Deeplinking-#Introduction).
Check out the deferred deeplinkg guide from the AppFlyer knowledge base [here](https://dev.appsflyer.com/hc/docs/dl_work_flow).

Code Sample to handle the conversion data:

Expand Down Expand Up @@ -60,7 +58,7 @@ The `appsFlyer.onInstallConversionData` returns function to unregister this eve
### <a id="handle-deeplinking"> 2. Direct Deeplinking
When a deeplink is clicked on the device the AppsFlyer SDK will return the resolved link in the [onAppOpenAttribution](https://support.appsflyer.com/hc/en-us/articles/208874366-OneLink-Deep-Linking-Guide#deep-linking-data-the-onappopenattribution-method-) method.
When a deeplink is clicked on the device the AppsFlyer SDK will return the resolved link in the onAppOpenAttribution method.([Android](https://dev.appsflyer.com/hc/docs/dl_android_gcd_legacy) / [iOS](https://dev.appsflyer.com/hc/docs/dl_ios_gcd_legacy))
Code Sample to handle OnAppOpenAttribution:
Expand Down Expand Up @@ -191,12 +189,13 @@ For more on App Links check out the guide [here](https://dev.appsflyer.com/hc/do
### <a id="ios-deeplink"> iOS Deeplink Setup
In order to record retargeting and use the onAppOpenAttribution/UDL callbacks in iOS, the developer needs to pass the User Activity / URL to our SDK, via the following methods in the **AppDelegate.m** file:
In order to record retargeting and use the onAppOpenAttribution/UDL callbacks in iOS, the developer needs to pass the User Activity / URL to our SDK.<br>
First, import the plugin in the **AppDelegate.m** file or in your **bridging header if you are using Swift**:
#### import
```objectivec
#import <RNAppsFlyer.h>
```
For Objective-c projects: add the following to you **AppDelegate.m**
```objectivec
// Deep linking
// Open URI-scheme for iOS 9 and above
Expand All @@ -215,6 +214,23 @@ In order to record retargeting and use the onAppOpenAttribution/UDL callbacks in
return YES;
}
```
For Swift projects: add the following to you **AppDelegate.swift**
```swift
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
AppsFlyerAttribution.shared().handleOpen(url)
return true
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
AppsFlyerAttribution.shared().handleOpen(url, sourceApplication: sourceApplication, annotation: annotation)
return true
}

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
AppsFlyerAttribution.shared().continue(userActivity)
return true
}
```
#### Universal Links
Universal Links link between an iOS mobile app and an associate website/domain, such as AppsFlyer’s OneLink domain (xxx.onelink.me). To do so, it is required to:
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@

### <a id="plugin-build-for"> This plugin is built for

- Android AppsFlyer SDK **v6.9.4**
- iOS AppsFlyer SDK **v6.9.1**
- Android AppsFlyer SDK **v6.10.2**
- iOS AppsFlyer SDK **v6.10.1**

## <a id="breaking-changes"> ❗❗ Breaking changes when updating to v6.x.x❗❗

Expand Down
2 changes: 1 addition & 1 deletion android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,5 @@ repositories {
dependencies {
implementation "com.facebook.react:react-native:${safeExtGet('reactNativeVersion', '+')}"
implementation "com.android.installreferrer:installreferrer:${safeExtGet('installReferrerVersion', '2.1')}"
api "com.appsflyer:af-android-sdk:${safeExtGet('appsflyerVersion', '6.9.4')}"
api "com.appsflyer:af-android-sdk:${safeExtGet('appsflyerVersion', '6.10.2')}"
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

public class RNAppsFlyerConstants {

final static String PLUGIN_VERSION = "6.10.2";
final static String NO_DEVKEY_FOUND = "No 'devKey' found or its empty";
final static String UNKNOWN_ERROR = "AF Unknown Error";
final static String SUCCESS = "Success";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import com.appsflyer.AppsFlyerConversionListener;
import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerProperties.EmailsCryptType;
import com.appsflyer.internal.platform_extension.Plugin;
import com.appsflyer.internal.platform_extension.PluginInfo;
import com.appsflyer.share.CrossPromotionHelper;
import com.appsflyer.share.LinkGenerator;
import com.appsflyer.share.ShareInviteHelper;
Expand Down Expand Up @@ -150,6 +152,10 @@ private String callSdkInternal(ReadableMap _options) {
isDeepLinking = options.optBoolean(afDeepLink, false);
isManualStartMode = options.optBoolean("manualStart", false);

boolean isExpoApp = this.isExpoApp();
PluginInfo pluginInfo = new PluginInfo(isExpoApp ? Plugin.EXPO : Plugin.REACT_NATIVE, PLUGIN_VERSION);
instance.setPluginInfo(pluginInfo);

instance.init(devKey, (isConversionData == true) ? registerConversionListener() : null, application.getApplicationContext());
if (isDeepLinking) {
instance.subscribeForDeepLink(registerDeepLinkListener());
Expand All @@ -161,6 +167,22 @@ private String callSdkInternal(ReadableMap _options) {
return null;
}

/**
* We try to load this class which is associated with Expo. If the class is loaded we return true
* so we handle this app as an Expo app. If not its just a React Native app.
* @return true if its an Expo app, false is its React Native app
*/
private boolean isExpoApp() {
try {
Class.forName("expo.modules.devmenu.react.DevMenuAwareReactActivity");
return true;
} catch (ClassNotFoundException e) {
return false;
} catch (Exception e) {
return false;
}
}

private DeepLinkListener registerDeepLinkListener() {
return new DeepLinkListener() {
@Override
Expand Down
16 changes: 11 additions & 5 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
**/
declare module "react-native-appsflyer" {
type Response<T> = void | Promise<T>;
type SuccessCB = (result?: any) => any;
type ErrorCB = (error?: any) => any;
type SuccessCB = (result?: unknown) => unknown;
type ErrorCB = (error?: Error) => unknown;
export type ConversionData = {
status: "success" | "failure",
type: "onInstallConversionDataLoaded" | "onInstallConversionFailure"
Expand Down Expand Up @@ -102,9 +102,15 @@ declare module "react-native-appsflyer" {
channel: string;
campaign?: string;
customerID?: string;
userParams?: object;

[key: string]: any;
userParams?: {
deep_link_value?: string;
[key: string]: any;
};
referrerName?: string;
referrerImageUrl?: string;
deeplinkPath?: string;
baseDeeplink?: string;
brandDomain?: string;
}

const appsFlyer: {
Expand Down
1 change: 0 additions & 1 deletion ios/AppsFlyerAttribution.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
#ifndef AppsFlyerAttribution_h
#define AppsFlyerAttribution_h
#endif /* AppsFlyerAttribution_h */
#import "AppsFlyerLib.h"

@interface AppsFlyerAttribution : NSObject
@property BOOL RNAFBridgeReady;
Expand Down
1 change: 1 addition & 0 deletions ios/AppsFlyerAttribution.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#import <Foundation/Foundation.h>
#import "AppsFlyerAttribution.h"
#import <AppsFlyerLib/AppsFlyerLib.h>

@interface AppsFlyerAttribution ()
@property NSUserActivity * userActivity;
Expand Down
49 changes: 39 additions & 10 deletions ios/AppsFlyerLib.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
// AppsFlyerLib.h
// AppsFlyerLib
//
// AppsFlyer iOS SDK 6.5.4 (62)
// Copyright (c) 2012-2020 AppsFlyer Ltd. All rights reserved.
// AppsFlyer iOS SDK 6.10.1 (109)
// Copyright (c) 2012-2023 AppsFlyer Ltd. All rights reserved.
//

#import <Foundation/Foundation.h>

#import "AppsFlyerCrossPromotionHelper.h"
#import "AppsFlyerShareInviteHelper.h"
#import "AppsFlyerDeepLinkResult.h"
#import "AppsFlyerDeepLink.h"
#import <AppsFlyerLib/AppsFlyerCrossPromotionHelper.h>
#import <AppsFlyerLib/AppsFlyerShareInviteHelper.h>
#import <AppsFlyerLib/AppsFlyerDeepLinkResult.h>
#import <AppsFlyerLib/AppsFlyerDeepLink.h>

NS_ASSUME_NONNULL_BEGIN

Expand Down Expand Up @@ -131,18 +131,36 @@ NS_ASSUME_NONNULL_BEGIN
#define AFEventParamAdRevenueAdSize @"af_adrev_ad_size"
#define AFEventParamAdRevenueMediatedNetworkName @"af_adrev_mediated_network_name"


/// Mail hashing type
typedef enum {
/// None
EmailCryptTypeNone = 0,
/// SHA1
EmailCryptTypeSHA1 = 1,
/// MD5
EmailCryptTypeMD5 = 2,
/// SHA256
EmailCryptTypeSHA256 = 3
} EmailCryptType;

typedef NS_CLOSED_ENUM (NSInteger ,AFSDKPlugin) {
AFSDKPluginIOSNative,
AFSDKPluginUnity,
AFSDKPluginFlutter,
AFSDKPluginReactNative,
AFSDKPluginAdobeAir,
AFSDKPluginAdobeMobile,
AFSDKPluginCocos2dx,
AFSDKPluginCordova,
AFSDKPluginMparticle,
AFSDKPluginNativeScript,
AFSDKPluginExpo,
AFSDKPluginUnreal,
AFSDKPluginXamarin,
AFSDKPluginCapacitor,
AFSDKPluginSegment,
AFSDKPluginAdobeSwiftAEP
} NS_SWIFT_NAME(Plugin);

@class AFSDKPluginInfo;

NS_SWIFT_NAME(DeepLinkDelegate)
@protocol AppsFlyerDeepLinkDelegate <NSObject>

Expand Down Expand Up @@ -212,6 +230,9 @@ NS_SWIFT_NAME(DeepLinkDelegate)
*/
+ (AppsFlyerLib *)shared;


- (void)setUpInteroperabilityObject:(id)object;

/**
In case you use your own user ID in your app, you can set this property to that ID.
Enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs
Expand Down Expand Up @@ -298,6 +319,9 @@ NS_SWIFT_NAME(waitForATTUserAuthorization(timeoutInterval:));
*/
@property(atomic) BOOL disableCollectASA;

/**
Disable Apple Ads Attribution API +[AAAtribution attributionTokenWithError:]
*/
@property(nonatomic) BOOL disableAppleAdsAttribution;

/**
Expand Down Expand Up @@ -368,6 +392,11 @@ NS_SWIFT_NAME(waitForATTUserAuthorization(timeoutInterval:));
*/
@property(nonatomic, nullable) NSString *currentDeviceLanguage;

/**
Internal API. Please don't use.
*/
- (void)setPluginInfoWith:(AFSDKPlugin)plugin pluginVersion:(NSString *)version additionalParams:(NSDictionary * _Nullable)additionalParams
NS_SWIFT_NAME(setPluginInfo(plugin:version:additionalParams:));
/**
Enable the collection of Facebook Deferred AppLinks
Requires Facebook SDK and Facebook app on target/client device.
Expand Down
2 changes: 1 addition & 1 deletion ios/AppsFlyerShareInviteHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
//

#import <Foundation/Foundation.h>
#import "AppsFlyerLinkGenerator.h"
#import <AppsFlyerLib/AppsFlyerLinkGenerator.h>

/**
AppsFlyerShareInviteHelper
Expand Down
11 changes: 6 additions & 5 deletions ios/RNAppsFlyer.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,19 @@

#import "AppsFlyerAttribution.h"
#import <objc/message.h>
//#if __has_include(<AppsFlyerLib/AppsFlyerLib.h>) // from Pod
//#import <AppsFlyerLib/AppsFlyerLib.h>
//#else
//#import "AppsFlyerLib.h"
//#endif
#if __has_include(<AppsFlyerLib/AppsFlyerLib.h>) // from Pod
#import <AppsFlyerLib/AppsFlyerLib.h>
#else
#import "AppsFlyerLib.h"
#endif


@interface RNAppsFlyer: RCTEventEmitter <RCTBridgeModule, AppsFlyerLibDelegate, AppsFlyerDeepLinkDelegate>
@property (readwrite, nonatomic) BOOL isManualStart;
@end


static NSString *const kAppsFlyerPluginVersion = @"6.10.2";
static NSString *const NO_DEVKEY_FOUND = @"No 'devKey' found or its empty";
static NSString *const NO_APPID_FOUND = @"No 'appId' found or its empty";
static NSString *const NO_EVENT_NAME_FOUND = @"No 'eventName' found or its empty";
Expand Down
Loading

0 comments on commit 16bc2be

Please sign in to comment.