Git Product home page Git Product logo

flutter_sdk's Introduction

Summary

This is the Flutter SDK of Adjust™. You can read more about Adjust™ at adjust.com.

Table of contents

Quick start

Deep linking

Event tracking

Custom parameters

Additional features

License

Quick start

Example apps

There are example Flutter app inside the example directory. In there you can check how the Adjust SDK can be integrated.

Getting started

These are the minimal steps required to integrate the Adjust SDK into your Flutter app.

Add the SDK to your project

You can add Adjust SDK to your Flutter app by adding following to your pubspec.yaml file:

dependencies:
  adjust_sdk: ^4.38.2

Then navigate to your project in the terminal and run:

flutter packages get

Note: If you are using Visual Studio Code to develop your app, upon editing pubspec.yaml, it will automatically run this command, so you don't need to run it manually.

[Android] Add Google Play Services

Since the 1st of August of 2014, apps in the Google Play Store must use the Google Advertising ID to uniquely identify devices. To allow the Adjust SDK to use the Google Advertising ID, you must integrate the Google Play Services. If you haven't done this yet, please add dependency to Google Play Services library by adding following dependecy to your dependencies block of app's build.gradle file for Android platform:

implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'

Note: The Adjust SDK is not tied to any specific version of the play-services-ads-identifier part of the Google Play Services library. You can use the latest version of the library, or any other version you need.

[Android] Add permissions

Please add the following permissions, which the Adjust SDK needs, if they are not already present in your AndroidManifest.xml file for Android platform:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Add permission to gather Google advertising ID

If you are targeting Android 12 and above (API level 31), you need to add the com.google.android.gms.AD_ID permission to read the device's advertising ID. Add the following line to your AndroidManifest.xml to enable the permission.

<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

For more information, see Google's AdvertisingIdClient.Info documentation.

[Android] Proguard settings

If you are using Proguard, add these lines to your Proguard file:

-keep class com.adjust.sdk.** { *; }
-keep class com.google.android.gms.common.ConnectionResult {
    int SUCCESS;
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {
    com.google.android.gms.ads.identifier.AdvertisingIdClient$Info getAdvertisingIdInfo(android.content.Context);
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info {
    java.lang.String getId();
    boolean isLimitAdTrackingEnabled();
}
-keep public class com.android.installreferrer.** { *; }

If you are not publishing your app in the Google Play Store, you can leave just com.adjust.sdk package rules:

-keep public class com.adjust.sdk.** { *; }

[Android] Install referrer

In order to correctly attribute an install of your app to its source, Adjust needs information about the install referrer. This can be obtained by using the Google Play Referrer API or by catching the Google Play Store intent with a broadcast receiver.

Important: The Google Play Referrer API is newly introduced by Google with the express purpose of providing a more reliable and secure way of obtaining install referrer information and to aid attribution providers in the fight against click injection. It is strongly advised that you support this in your application. The Google Play Store intent is a less secure way of obtaining install referrer information. It will continue to exist in parallel with the new Google Play Referrer API temporarily, but it is set to be deprecated in future.

[Android] Google Play Referrer API

In order to support this in your app, please make sure to add following dependency to your app's build.gradle file for Android platform:

implementation 'com.android.installreferrer:installreferrer:2.2'

Also, make sure that you have paid attention to the Proguard settings chapter and that you have added all the rules mentioned in it, especially the one needed for this feature:

-keep public class com.android.installreferrer.** { *; }

[Android] Google Play Store intent

The Google Play Store INSTALL_REFERRER intent should be captured with a broadcast receiver. If you are not using your own broadcast receiver to receive the INSTALL_REFERRER intent, add the following receiver tag inside the application tag in your AndroidManifest.xml file for Android platform.

<receiver
    android:name="com.adjust.sdk.AdjustReferrerReceiver"
    android:permission="android.permission.INSTALL_PACKAGES"
    android:exported="true" >
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

We use this broadcast receiver to retrieve the install referrer and pass it to our backend.

If you are already using a different broadcast receiver for the INSTALL_REFERRER intent, follow these instructions to add the Adjust broadcast receiver.

[Android] Huawei Referrer API

As of v4.22.0, the Adjust SDK supports install tracking on Huawei devices with Huawei App Gallery version 10.4 and higher. No additional integration steps are needed to start using the Huawei Referrer API.

[iOS] Link additional frameworks

Make sure that following iOS frameworks are linked with your iOS app:

  • AdServices.framework - in case you are running Apple Search Ads campaigns
  • AdSupport.framework - for reading iOS Advertising Id (IDFA)
  • StoreKit.framework - for communication with SKAdNetwork framework
  • AppTrackingTransparency.framework - to ask for user's consent to be tracked and obtain status of that consent

All of these frameworks are enabling certain SDK features, but they are not mandatory for SDK to work normally. With this in mind, you can set Status of each one of these frameworks to Optional in your Project Settings → Build Phases → Link Binary With Libraries section.

Integrate the SDK into your app

To start with, we'll set up basic session tracking.

Basic setup

Make sure to initialise Adjust SDK as soon as possible in your Flutter app (upon loading first widget in your app). You can initialise Adjust SDK like described below:

AdjustConfig config = new AdjustConfig('{YourAppToken}', AdjustEnvironment.sandbox);
Adjust.start(config);

Replace {YourAppToken} with your app token. You can find this in your dashboard.

Depending on whether you are building your app for testing or for production, you must set environment with one of these values:

AdjustEnvironment.sandbox;
AdjustEnvironment.production;

Important: This value should be set to AdjustEnvironment.sandbox if and only if you or someone else is testing your app. Make sure to set the environment to AdjustEnvironment.production before you publish the app. Set it back to AdjustEnvironment.sandbox when you start developing and testing it again.

We use this environment to distinguish between real traffic and test traffic from test devices. It is imperative that you keep this value meaningful at all times!

Session tracking

Note: This step is really important and please make sure that you implement it properly in your app. By implementing it, you will enable proper session tracking by the Adjust SDK in your app.

Session tracking for iOS platform is supported out of the box, but in order to perform it properly on Android platform, it requires a bit of additional work described in chapter below.

Session tracking in Android

On Android platform, it is important for you to hook up into app activity lifecycle methods and make a call to Adjust.onResume() when ever app enters foreground and a call to Adjust.onPause() when ever app leaves foreground. You can do this globally or per widget (call these method upon each transition from one widget to another). For example:

class AdjustExampleApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Adjust Flutter Example App',
      home: new MainScreen(),
    );
  }
}

class MainScreen extends StatefulWidget {
  @override
  State createState() => new MainScreenState();
}

class MainScreenState extends State<MainScreen> with WidgetsBindingObserver {
  @override
  initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    initPlatformState(); // <-- Initialise SDK in here.
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    switch (state) {
      case AppLifecycleState.inactive:
        break;
      case AppLifecycleState.resumed:
        Adjust.onResume();
        break;
      case AppLifecycleState.paused:
        Adjust.onPause();
        break;
      case AppLifecycleState.detached:
        break;
    }
  }
}

SDK signature

When you set up the SDK Signature, each SDK communication package is "signed". This lets Adjust’s servers easily detect and reject any install activity that is not legitimate.

There are just a few steps involved in setting up the SDK Signature. Please contact your Technical Account Manager or [email protected] to get started.

Adjust logging

You can increase or decrease the amount of logs that you see during testing by setting logLevel member on your config instance with one of the following parameters:

adjustConfig.logLevel = AdjustLogLevel.verbose; // enable all logs
adjustConfig.logLevel = AdjustLogLevel.debug; // disable verbose logs
adjustConfig.logLevel = AdjustLogLevel.info; // disable debug logs (default)
adjustConfig.logLevel = AdjustLogLevel.warn; // disable info logs
adjustConfig.logLevel = AdjustLogLevel.error; // disable warning logs
adjustConfig.logLevel = AdjustLogLevel.suppress; // disable all logs

Build your app

Build and run your Flutter app. In your Android/iOS log you can check for logs coming from Adjust SDK and in there you should see message: Install tracked.

Deep linking

Deep linking

If you are using an Adjust tracker URL with the option to deep link into your app, there is the possibility to get information about the deep link URL and its content. Hitting the URL can happen when the user has your app already installed (standard deep linking scenario) or if they don't have the app on their device (deferred deep linking scenario). In the standard deep linking scenario, the Android platform natively offers the possibility for you to get the information about the deep link content. The deferred deep linking scenario is something which the Android platform doesn't support out of the box, and, in this case, the Adjust SDK will offer you the mechanism you need to get the information about the deep link content.

You need to set up deep linking handling in your app on native level - in your generated Xcode project (for iOS) and Android Studio (for Android).

Standard deep linking scenario

Unfortunately, in this scenario the information about the deep link can not be delivered to you in your Dart code. Once you enable your app to handle deep linking, you will get information about the deep link on native level. For more information check our chapters below on how to enable deep linking for Android and iOS apps.

Deferred deep linking scenario

In order to get information about the URL content in a deferred deep linking scenario, you should set a callback method on the config object which will receive one string parameter where the content of the URL will be delivered. You should set this method on the config object by assigning the deferredDeeplinkCallback member:

AdjustConfig adjustConfig = new AdjustConfig(yourAppToken, environment);
adjustConfig.deferredDeeplinkCallback = (String uri) {
  print('[Adjust]: Received deferred deeplink: ' + uri);
};
Adjust.start(adjustConfig);

In deferred deep linking scenario, there is one additional setting which can be set on the config object. Once the Adjust SDK gets the deferred deep link information, we offer you the possibility to choose whether our SDK should open this URL or not. You can choose to set this option by assigning the launchDeferredDeeplink member of the config instance:

AdjustConfig adjustConfig = new AdjustConfig(yourAppToken, environment);
adjustConfig.launchDeferredDeeplink = true;
adjustConfig.deferredDeeplinkCallback = (String uri) {
  print('[Adjust]: Received deferred deeplink: ' + uri);
};
Adjust.start(adjustConfig);

If nothing is set, the Adjust SDK will always try to launch the URL by default.

To enable your apps to support deep linking, you should set up schemes for each supported platform.

Deep linking handling in Android app

This should be done in native Android Studio / Eclipse project.

To set up your Android app to handle deep linking on native level, please follow our guide in the official Android SDK README.

Deep linking handling in iOS app

This should be done in native Xcode project.

To set up your iOS app (Runner project) to handle deep linking on native level, please follow our guide in the official iOS SDK README.

Reattribution via deep links

Adjust enables you to run re-engagement campaigns through deep links. For more information on how to do that, please check our official docs.

If you are using this feature, in order for your user to be properly reattributed, you need to make one additional call to the Adjust SDK in your app.

Once you have received deep link content information in your app, add a call to the appWillOpenUrl method. By making this call, the Adjust SDK will try to find if there is any new attribution information inside of the deep link. If there is any, it will be sent to the Adjust backend. If your user should be reattributed due to a click on the adjust tracker URL with deep link content, you will see the attribution callback in your app being triggered with new attribution info for this user.

Once everything set up, inside of your native Android activity make a call to appWillOpenUrl method in following way:

import com.adjust.sdk.flutter.AdjustSdk;
import io.flutter.embedding.android.FlutterActivity; // Used for post flutter 1.12 Android projects
//import io.flutter.app.FlutterActivity; // Used for pre flutter 1.12 Android projects

public class MainActivity extends FlutterActivity {
    // Either call make the call in onCreate.
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // GeneratedPluginRegistrant.registerWith(this); Used only for pre flutter 1.12 Android projects

        Intent intent = getIntent();
        Uri data = intent.getData();
        AdjustSdk.appWillOpenUrl(data, this);
    }

    // Or make the cakll in onNewIntent.
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Uri data = intent.getData();
        AdjustSdk.appWillOpenUrl(data, this);
    }
}

Depending on the android:launchMode setting of your Activity in the AndroidManifest.xml file, information about the deep_link parameter content will be delivered to the appropriate place in the Activity file. For more information about the possible values of the android:launchMode property, check the official Android documentation.

There are two places within your desired Activity where information about the deep link content will be delivered via the Intent object - either in the Activity's onCreate or onNewIntent methods. Once your app has launched and one of these methods has been triggered, you will be able to get the actual deep link passed in the deep_link parameter in the click URL.

Once everything set up, inside of your native iOS app delegate make a call to appWillOpenUrl method in following way:

#import "Adjust.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [GeneratedPluginRegistrant registerWithRegistry:self];
    // Override point for customization after application launch.
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    [Adjust appWillOpenUrl:url];
    return YES;
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler {
    if ([[userActivity activityType] isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        [Adjust appWillOpenUrl:[userActivity webpageURL]];
    }
    return YES;
}

@end

Event tracking

Track event

You can use adjust to track any event in your app. Suppose you want to track every tap on a button. You would have to create a new event token in your dashboard. Let's say that event token is abc123. In your button's click handler method you could then add the following lines to track the click:

AdjustEvent adjustEvent = new AdjustEvent('abc123');
Adjust.trackEvent(adjustEvent);

Track revenue

If your users can generate revenue by tapping on advertisements or making in-app purchases you can track those revenues with events. Lets say a tap is worth one Euro cent. You could then track the revenue event like this:

AdjustEvent adjustEvent = new AdjustEvent('abc123');
adjustEvent.setRevenue(6, 'EUR');
Adjust.trackEvent(adjustEvent);

This can be combined with callback parameters of course.

When you set a currency token, Adjust will automatically convert the incoming revenues into a reporting revenue of your choice. Read more about currency conversion here.

You can read more about revenue and event tracking in the event tracking guide.

Revenue deduplication

You can also add an optional transaction ID to avoid tracking duplicated revenues. The last ten transaction IDs are remembered, and revenue events with duplicated transaction IDs are skipped. This is especially useful for In-App Purchase tracking. You can see an example below.

If you want to track in-app purchases, please make sure to call the trackEvent only if the transaction is finished and item is purchased. That way you can avoid tracking revenue that is not actually being generated.

AdjustEvent adjustEvent = new AdjustEvent('abc123');
adjustEvent.transactionId = '{TransactionId}';
Adjust.trackEvent(adjustEvent);

Custom parameters

Custom parameters

In addition to the data points that Adjust SDK collects by default, you can use the Adjust SDK to track and add to the event/session as many custom values as you need (user IDs, product IDs, etc.). Custom parameters are only available as raw data (i.e., they won't appear in the Adjust dashboard).

You should use callback parameters for the values that you collect for your own internal use, and partner parameters for those that you wish to share with external partners. If a value (e.g. product ID) is tracked both for internal use and to forward it to external partners, the best practice would be to track it both as callback and partner parameters.

Event parameters

Event callback parameters

You can register a callback URL for your events in your dashboard. We will send a GET request to that URL whenever the event is tracked. You can add callback parameters to that event by calling addCallbackParameter to the event instance before tracking it. We will then append these parameters to your callback URL.

For example, suppose you have registered the URL https://www.adjust.com/callback then track an event like this:

AdjustEvent adjustEvent = new AdjustEvent('abc123');
adjustEvent.addCallbackParameter('key', 'value');
adjustEvent.addCallbackParameter('foo', 'bar');
Adjust.trackEvent(adjustEvent);

In that case we would track the event and send a request to:

https://www.adjust.com/callback?key=value&foo=bar

It should be mentioned that we support a variety of placeholders like {gps_adid} that can be used as parameter values. In the resulting callback this placeholder would be replaced with the Google Play Services ID of the current device. Also note that we don't store any of your custom parameters, but only append them to your callbacks. If you haven't registered a callback for an event, these parameters won't even be read.

You can read more about using URL callbacks, including a full list of available values, in our callbacks guide.

Event partner parameters

You can also add parameters to be transmitted to network partners, which have been activated in your Adjust dashboard.

This works similarly to the callback parameters mentioned above, but can be added by calling the addPartnerParameter method on your event instance.

AdjustEvent adjustEvent = new AdjustEvent('abc123');
adjustEvent.addPartnerParameter('key', 'value');
adjustEvent.addPartnerParameter('foo', 'bar');
Adjust.trackEvent(adjustEvent);

You can read more about special partners and these integrations in our guide to special partners.

Event callback identifier

You can also add custom string identifier to each event you want to track. This identifier will later be reported in event success and/or event failure callbacks to enable you to keep track on which event was successfully tracked or not. You can set this identifier by assigning the callbackId member of your event instance:

AdjustEvent adjustEvent = new AdjustEvent('abc123');
adjustEvent.callbackId = '{CallbackId}';
Adjust.trackEvent(adjustEvent);

Session parameters

Some parameters are saved to be sent in every event and session of the Adjust SDK. Once you have added any of these parameters, you don't need to add them every time, since they will be saved locally. If you add the same parameter twice, there will be no effect.

These session parameters can be called before the Adjust SDK is launched to make sure they are sent even on install. If you need to send them with an install, but can only obtain the needed values after launch, it's possible to delay the first launch of the Adjust SDK to allow this behaviour.

Session callback parameters

The same callback parameters that are registered for events can be also saved to be sent in every event or session of the Adjust SDK.

The session callback parameters have a similar interface to the event callback parameters. Instead of adding the key and it's value to an event, it's added through a call to Adjust.addSessionCallbackParameter(String key, String value):

Adjust.addSessionCallbackParameter('foo', 'bar');

The session callback parameters will be merged with the callback parameters added to an event. The callback parameters added to an event have precedence over the session callback parameters. Meaning that, when adding a callback parameter to an event with the same key to one added from the session, the value that prevails is the callback parameter added to the event.

It's possible to remove a specific session callback parameter by passing the desiring key to the method Adjust.removeSessionCallbackParameter(String key).

Adjust.removeSessionCallbackParameter('foo');

If you wish to remove all keys and their corresponding values from the session callback parameters, you can reset it with the method Adjust.resetSessionCallbackParameters().

Adjust.resetSessionCallbackParameters();

Session partner parameters

In the same way that there are session callback parameters sent in every event or session of the Adjust SDK, there is also session partner parameters.

These will be transmitted to network partners, for the integrations that have been activated in your Adjust dashboard.

The session partner parameters have a similar interface to the event partner parameters. Instead of adding the key and it's value to an event, it's added through a call to Adjust.addSessionPartnerParameter(String key, String value):

Adjust.addSessionPartnerParameter('foo', 'bar');

The session partner parameters will be merged with the partner parameters added to an event. The partner parameters added to an event have precedence over the session partner parameters. Meaning that, when adding a partner parameter to an event with the same key to one added from the session, the value that prevails is the partner parameter added to the event.

It's possible to remove a specific session partner parameter by passing the desiring key to the method Adjust.removeSessionPartnerParameter(String key).

Adjust.removeSessionPartnerParameter('foo');

If you wish to remove all keys and their corresponding values from the session partner parameters, you can reset it with the method Adjust.resetSessionPartnerParameters().

Adjust.resetSessionPartnerParameters();

Delay start

Delaying the start of the Adjust SDK allows your app some time to obtain session parameters, such as unique identifiers, to be sent on install.

Set the initial delay time in seconds with the delayStart member of the config instance:

adjustConfig.delayStart = 5.5;

In this case, this will make the Adjust SDK not send the initial install session and any event created for 5.5 seconds. After this time is expired or if you call Adjust.sendFirstPackages() in the meanwhile, every session parameter will be added to the delayed install session and events and the Adjust SDK will resume as usual.

The maximum delay start time of the adjust SDK is 10 seconds.

Additional features

Additional features

Once you have integrated the Adjust SDK into your project, you can take advantage of the following features.

AppTrackingTransparency framework

Note: This feature exists only in iOS platform.

For each package sent, the Adjust backend receives one of the following four (4) states of consent for access to app-related data that can be used for tracking the user or the device:

  • Authorized
  • Denied
  • Not Determined
  • Restricted

After a device receives an authorization request to approve access to app-related data, which is used for user device tracking, the returned status will either be Authorized or Denied.

Before a device receives an authorization request for access to app-related data, which is used for tracking the user or device, the returned status will be Not Determined.

If authorization to use app tracking data is restricted, the returned status will be Restricted.

The SDK has a built-in mechanism to receive an updated status after a user responds to the pop-up dialog, in case you don't want to customize your displayed dialog pop-up. To conveniently and efficiently communicate the new state of consent to the backend, Adjust SDK offers a wrapper around the app tracking authorization method described in the following chapter, App-tracking authorization wrapper.

App-tracking authorisation wrapper

Note: This feature exists only in iOS platform.

Adjust SDK offers the possibility to use it for requesting user authorization in accessing their app-related data. Adjust SDK has a wrapper built on top of the requestTrackingAuthorizationWithCompletionHandler: method, where you can as well define the callback method to get information about a user's choice. Also, with the use of this wrapper, as soon as a user responds to the pop-up dialog, it's then communicated back using your callback method. The SDK will also inform the backend of the user's choice. Integer value will be delivered via your callback method with the following meaning:

  • 0: ATTrackingManagerAuthorizationStatusNotDetermined
  • 1: ATTrackingManagerAuthorizationStatusRestricted
  • 2: ATTrackingManagerAuthorizationStatusDenied
  • 3: ATTrackingManagerAuthorizationStatusAuthorized

To use this wrapper, you can call it as such:

if (Platform.isIOS) {
  Adjust.requestTrackingAuthorizationWithCompletionHandler().then((status) {
    switch (status) {
      case 0:
        // ATTrackingManagerAuthorizationStatusNotDetermined case
        break;
      case 1:
        // ATTrackingManagerAuthorizationStatusRestricted case
        break;
      case 2:
        // ATTrackingManagerAuthorizationStatusDenied case
        break;
      case 3:
        // ATTrackingManagerAuthorizationStatusAuthorized case
        break;
    }
  });
}

Get current authorisation status

Note: This feature exists only in iOS platform.

To get the current app tracking authorization status you can call getAppTrackingAuthorizationStatus method of Adjust class that will return one of the following possibilities:

  • 0: The user hasn't been asked yet
  • 1: The user device is restricted
  • 2: The user denied access to IDFA
  • 3: The user authorized access to IDFA
  • -1: The status is not available

Check for ATT status change

Note: This feature exists only in iOS platform.

In cases where you are not using Adjust app-tracking authorization wrapper, Adjust SDK will not be able to know immediately upon answering the dialog what is the new value of app-tracking status. In situations like this, if you would want Adjust SDK to read the new app-tracking status value and communicate it to our backend, make sure to make a call to this method:

Adjust.checkForNewAttStatus();

SKAdNetwork framework

Note: This feature exists only in iOS platform.

If you have implemented the Adjust SDK v4.23.0 or above and your app is running on iOS 14 and above, the communication with SKAdNetwork will be set on by default, although you can choose to turn it off. When set on, Adjust automatically registers for SKAdNetwork attribution when the SDK is initialized. If events are set up in the Adjust dashboard to receive conversion values, the Adjust backend sends the conversion value data to the SDK. The SDK then sets the conversion value. After Adjust receives the SKAdNetwork callback data, it is then displayed in the dashboard.

In case you don't want the Adjust SDK to automatically communicate with SKAdNetwork, you can disable that by calling the following method on configuration object:

adjustConfig.deactivateSKAdNetworkHandling();

Update SKAdNetwork conversion value

Note: This feature exists only in iOS platform.

You can use Adjust SDK wrapper method updateConversionValue to update SKAdNetwork conversion value for your user:

Adjust.updateConversionValue(6);

Conversion value updated callback

You can register callback to get notified each time when Adjust SDK updates conversion value for the user.

AdjustConfig adjustConfig = new AdjustConfig(yourAppToken, environment);
config.conversionValueUpdatedCallback = (num? conversionValue) {
  print('[Adjust]: Received conversion value update: ' + conversionValue!.toString());
};
Adjust.start(adjustConfig);

Subscription tracking

Note: This feature is only available in the SDK v4.22.0 and above.

You can track App Store and Play Store subscriptions and verify their validity with the Adjust SDK. After a subscription has been successfully purchased, make the following call to the Adjust SDK:

For App Store subscription:

AdjustAppStoreSubscription subscription = new AdjustAppStoreSubscription(
  price,
  currency,
  transactionId,
  receipt);
subscription.setTransactionDate(transactionDate);
subscription.setSalesRegion(salesRegion);

Adjust.trackAppStoreSubscription(subscription);

For Play Store subscription:

AdjustPlayStoreSubscription subscription = new AdjustPlayStoreSubscription(
  price,
  currency,
  sku,
  orderId,
  signature,
  purchaseToken);
subscription.setPurchaseTime(purchaseTime);

Adjust.trackPlayStoreSubscription(subscription);

Subscription tracking parameters for App Store subscription:

Subscription tracking parameters for Play Store subscription:

Note: Subscription tracking API offered by Adjust SDK expects all parameters to be passed as string values. Parameters described above are the ones which API exects you to pass to subscription object prior to tracking subscription. There are various libraries which are handling in app purchases in Flutter and each one of them should return information described above in some form upon successfully completed subscription purchase. You should locate where these parameters are placed in response you are getting from library you are using for in app purchases, extract those values and pass them to Adjust API as string values.

Just like with event tracking, you can attach callback and partner parameters to the subscription object as well:

For App Store subscription:

AdjustAppStoreSubscription subscription = new AdjustAppStoreSubscription(
  price,
  currency,
  transactionId,
  receipt);
subscription.setTransactionDate(transactionDate);
subscription.setSalesRegion(salesRegion);

// add callback parameters
subscription.addCallbackParameter('key', 'value');
subscription.addCallbackParameter('foo', 'bar');

// add partner parameters
subscription.addPartnerParameter('key', 'value');
subscription.addPartnerParameter('foo', 'bar');

Adjust.trackAppStoreSubscription(subscription);

For Play Store subscription:

AdjustPlayStoreSubscription subscription = new AdjustPlayStoreSubscription(
  price,
  currency,
  sku,
  orderId,
  signature,
  purchaseToken);
subscription.setPurchaseTime(purchaseTime);

// add callback parameters
subscription.addCallbackParameter('key', 'value');
subscription.addCallbackParameter('foo', 'bar');

// add partner parameters
subscription.addPartnerParameter('key', 'value');
subscription.addPartnerParameter('foo', 'bar');

Adjust.trackPlayStoreSubscription(subscription);

Push token (uninstall tracking)

Push tokens are used for Audience Builder and client callbacks, and they are required for uninstall and reinstall tracking.

To send us the push notification token, add the following call to Adjust once you have obtained your token or when ever it's value is changed:

Adjust.setPushToken('{PushNotificationsToken}');

Attribution callback

You can register a callback to be notified of tracker attribution changes. Due to the different sources considered for attribution, this information can not be provided synchronously.

Please make sure to consider our applicable attribution data policies.

With the config instance, before starting the SDK, add the attribution callback:

AdjustConfig adjustConfig = new AdjustConfig(yourAppToken, environment);
config.attributionCallback = (AdjustAttribution attributionChangedData) {
  print('[Adjust]: Attribution changed!');

  if (attributionChangedData.trackerToken != null) {
    print('[Adjust]: Tracker token: ' + attributionChangedData.trackerToken);
  }
  if (attributionChangedData.trackerName != null) {
    print('[Adjust]: Tracker name: ' + attributionChangedData.trackerName);
  }
  if (attributionChangedData.campaign != null) {
    print('[Adjust]: Campaign: ' + attributionChangedData.campaign);
  }
  if (attributionChangedData.network != null) {
    print('[Adjust]: Network: ' + attributionChangedData.network);
  }
  if (attributionChangedData.creative != null) {
    print('[Adjust]: Creative: ' + attributionChangedData.creative);
  }
  if (attributionChangedData.adgroup != null) {
    print('[Adjust]: Adgroup: ' + attributionChangedData.adgroup);
  }
  if (attributionChangedData.clickLabel != null) {
    print('[Adjust]: Click label: ' + attributionChangedData.clickLabel);
  }
  if (attributionChangedData.adid != null) {
    print('[Adjust]: Adid: ' + attributionChangedData.adid);
  }
};
Adjust.start(adjustConfig);

The callback function will be called after the SDK receives the final attribution data. Within the callback function you have access to the attribution parameter. Here is a quick summary of its properties:

  • trackerToken the tracker token string of the current attribution.
  • trackerName the tracker name string of the current attribution.
  • network the network grouping level string of the current attribution.
  • campaign the campaign grouping level string of the current attribution.
  • adgroup the ad group grouping level string of the current attribution.
  • creative the creative grouping level string of the current attribution.
  • clickLabel the click label string of the current attribution.
  • adid the Adjust device identifier string.
  • costType the cost type string
  • costAmount the cost amount
  • costCurrency the cost currency string
  • fbInstallReferrer the Facebook install referrer information

Note: The cost data - costType, costAmount & costCurrency are only available when configured in AdjustConfig by setting needsCost member to true. If not configured or configured, but not being part of the attribution, these fields will have value null. This feature is available in SDK v4.26.0 and later.

Session and event callbacks

You can register a callback to be notified when events or sessions are tracked. There are four callbacks: one for tracking successful events, one for tracking failed events, one for tracking successful sessions and one for tracking failed sessions. You can add any number of callbacks after creating the config object:

AdjustConfig adjustConfig = new AdjustConfig(yourAppToken, environment);

// Set session success tracking delegate.
config.sessionSuccessCallback = (AdjustSessionSuccess sessionSuccessData) {
  print('[Adjust]: Session tracking success!');

  if (sessionSuccessData.message != null) {
    print('[Adjust]: Message: ' + sessionSuccessData.message);
  }
  if (sessionSuccessData.timestamp != null) {
    print('[Adjust]: Timestamp: ' + sessionSuccessData.timestamp);
  }
  if (sessionSuccessData.adid != null) {
    print('[Adjust]: Adid: ' + sessionSuccessData.adid);
  }
  if (sessionSuccessData.jsonResponse != null) {
    print('[Adjust]: JSON response: ' + sessionSuccessData.jsonResponse);
  }
};

// Set session failure tracking delegate.
config.sessionFailureCallback = (AdjustSessionFailure sessionFailureData) {
  print('[Adjust]: Session tracking failure!');

  if (sessionFailureData.message != null) {
    print('[Adjust]: Message: ' + sessionFailureData.message);
  }
  if (sessionFailureData.timestamp != null) {
    print('[Adjust]: Timestamp: ' + sessionFailureData.timestamp);
  }
  if (sessionFailureData.adid != null) {
    print('[Adjust]: Adid: ' + sessionFailureData.adid);
  }
  if (sessionFailureData.willRetry != null) {
    print('[Adjust]: Will retry: ' + sessionFailureData.willRetry.toString());
  }
  if (sessionFailureData.jsonResponse != null) {
    print('[Adjust]: JSON response: ' + sessionFailureData.jsonResponse);
  }
};

// Set event success tracking delegate.
config.eventSuccessCallback = (AdjustEventSuccess eventSuccessData) {
  print('[Adjust]: Event tracking success!');

  if (eventSuccessData.eventToken != null) {
    print('[Adjust]: Event token: ' + eventSuccessData.eventToken);
  }
  if (eventSuccessData.message != null) {
    print('[Adjust]: Message: ' + eventSuccessData.message);
  }
  if (eventSuccessData.timestamp != null) {
    print('[Adjust]: Timestamp: ' + eventSuccessData.timestamp);
  }
  if (eventSuccessData.adid != null) {
    print('[Adjust]: Adid: ' + eventSuccessData.adid);
  }
  if (eventSuccessData.callbackId != null) {
    print('[Adjust]: Callback ID: ' + eventSuccessData.callbackId);
  }
  if (eventSuccessData.jsonResponse != null) {
    print('[Adjust]: JSON response: ' + eventSuccessData.jsonResponse);
  }
};

// Set event failure tracking delegate.
config.eventFailureCallback = (AdjustEventFailure eventFailureData) {
  print('[Adjust]: Event tracking failure!');

  if (eventFailureData.eventToken != null) {
    print('[Adjust]: Event token: ' + eventFailureData.eventToken);
  }
  if (eventFailureData.message != null) {
    print('[Adjust]: Message: ' + eventFailureData.message);
  }
  if (eventFailureData.timestamp != null) {
    print('[Adjust]: Timestamp: ' + eventFailureData.timestamp);
  }
  if (eventFailureData.adid != null) {
    print('[Adjust]: Adid: ' + eventFailureData.adid);
  }
  if (eventFailureData.callbackId != null) {
    print('[Adjust]: Callback ID: ' + eventFailureData.callbackId);
  }
  if (eventFailureData.willRetry != null) {
    print('[Adjust]: Will retry: ' + eventFailureData.willRetry.toString());
  }
  if (eventFailureData.jsonResponse != null) {
    print('[Adjust]: JSON response: ' + eventFailureData.jsonResponse);
  }
};

Adjust.start(adjustConfig);

The callback function will be called after the SDK tries to send a package to the server. Within the callback function you have access to a response data object specifically for the callback. Here is a quick summary of the success session response data object fields:

  • message message string from the server or the error logged by the SDK.
  • timestamp timestamp string from the server.
  • adid a unique string device identifier provided by Adjust.
  • jsonResponse the JSON object with the reponse from the server.

Both event response data objects contain:

  • eventToken the event token string, if the package tracked was an event.
  • callbackId the custom defined callback ID string set on event object.

And both event and session failed objects also contain:

  • willRetry boolean which indicates whether there will be an attempt to resend the package at a later time.

User attribution

Like described in attribution callback section, this callback get triggered providing you info about new attribution when ever it changes. In case you want to access info about your user's current attribution whenever you need it, you can make a call to following method of the Adjust instance:

AdjustAttribution attribution = Adjust.getAttribution();

Note: Information about current attribution is available after app installation has been tracked by the Adjust backend and attribution callback has been initially triggered. From that moment on, Adjust SDK has information about your user's attribution and you can access it with this method. So, it is not possible to access user's attribution value before the SDK has been initialized and attribution callback has been initially triggered.

Device IDs

The Adjust SDK offers you possibility to obtain some of the device identifiers.

iOS Advertising Identifier

To obtain the IDFA, call the getIdfa method of the Adjust instance:

Adjust.getIdfa().then((idfa) {
  // Use idfa string value.
});

Google Play Services advertising identifier

The Google Play Services Advertising Identifier (Google advertising ID) is a unique identifier for a device. Users can opt out of sharing their Google advertising ID by toggling the "Opt out of Ads Personalization" setting on their device. When a user has enabled this setting, the Adjust SDK returns a string of zeros when trying to read the Google advertising ID.

Important: If you are targeting Android 12 and above (API level 31), you need to add the com.google.android.gms.AD_ID permission to your app. If you do not add this permission, you will not be able to read the Google advertising ID even if the user has not opted out of sharing their ID.

Certain services (such as Google Analytics) require you to coordinate Device and Client IDs in order to prevent duplicate reporting.

To obtain the device Google Advertising identifier, it's necessary to pass a callback function to Adjust.getGoogleAdId that will receive the Google Advertising ID in it's argument, like this:

Adjust.getGoogleAdId().then((googleAdId) {
  // Use googleAdId string value.
});

Amazon advertising identifier

To obtain the Amazon advertising identifier, call the getAmazonAdId method of the Adjust instance:

Adjust.getAmazonAdId().then((amazonAdId) {
  // Use amazonAdId string value.
});

Adjust device identifier

For each device with your app installed on it, Adjust backend generates unique Adjust device identifier (adid). In order to obtain this identifier, you can make a call the getAdid method of the Adjust instance:

Adjust.getAdid().then((adid) {
  // Use adid string value.
});

Note: Information about adid is available after app installation has been tracked by the Adjust backend. From that moment on, Adjust SDK has information about your device adid and you can access it with this method. So, it is not possible to access adid value before the SDK has been initialised and installation of your app was tracked successfully.

Set external device ID

Note If you want to use external device IDs, please contact your Adjust representative. They will talk you through the best approach for your use case.

An external device identifier is a custom value that you can assign to a device or user. They can help you to recognize users across sessions and platforms. They can also help you to deduplicate installs by user so that a user isn't counted as multiple new installs.

You can also use an external device ID as a custom identifier for a device. This can be useful if you use these identifiers elsewhere and want to keep continuity.

Check out our external device identifiers article for more information.

Note This setting requires Adjust SDK v4.21.0 or later.

To set an external device ID, assign the identifier to the externalDeviceId property of your config instance. Do this before you initialize the Adjust SDK.

adjustConfig.externalDeviceId = '{Your-External-Device-Id}';

Important: You need to make sure this ID is unique to the user or device depending on your use-case. Using the same ID across different users or devices could lead to duplicated data. Talk to your Adjust representative for more information.

If you want to use the external device ID in your business analytics, you can pass it as a session callback parameter. See the section on session callback parameters for more information.

You can import existing external device IDs into Adjust. This ensures that the backend matches future data to your existing device records. If you want to do this, please contact your Adjust representative.

Pre-installed trackers

If you want to use the Adjust SDK to recognize users whose devices came with your app pre-installed, follow these steps.

  • Create a new tracker in your dashboard.

  • Set the default tracker of your config object:

    adjustConfig.defaultTracker = '{TrackerToken}';

    Replace {TrackerToken} with the tracker token you created in step 1. Please note that the Dashboard displays a tracker URL (including https://app.adjust.com/). In your source code, you should specify only the six-character token and not the entire URL.

  • Build and run your app. You should see a line like the following in your LogCat:

    Default tracker: 'abc123'
    

Offline mode

You can put the Adjust SDK in offline mode to suspend transmission to our servers, while retaining tracked data to be sent later. While in offline mode, all information is saved in a file, so be careful not to trigger too many events while in offline mode.

You can activate offline mode by calling setOfflineMode with the parameter true.

Adjust.setOfflineMode(true);

Conversely, you can deactivate offline mode by calling setOfflineMode with false. When the Adjust SDK is put back in online mode, all saved information is sent to our servers with the correct time information.

Unlike disabling tracking, this setting is not remembered between sessions. This means that the SDK is in online mode whenever it is started, even if the app was terminated in offline mode.

Disable tracking

You can disable the Adjust SDK from tracking any activities of the current device by calling setEnabled with parameter false. This setting is remembered between sessions.

Adjust.setEnabled(false);

You can check if the Adjust SDK is currently enabled by calling the function isEnabled. It is always possible to activatе the Adjust SDK by invoking setEnabled with the enabled parameter as true.

Event buffering

If your app makes heavy use of event tracking, you might want to delay some HTTP requests in order to send them in one batch every minute. You can enable event buffering with your config instance:

adjustConfig.eventBufferingEnabled = true;

Background tracking

The default behaviour of the Adjust SDK is to pause sending HTTP requests while the app is in the background. You can change this in your config instance:

adjustConfig.sendInBackground = true;

GDPR right to be forgotten

In accordance with article 17 of the EU's General Data Protection Regulation (GDPR), you can notify Adjust when a user has exercised their right to be forgotten. Calling the following method will instruct the Adjust SDK to communicate the user's choice to be forgotten to the Adjust backend:

Adjust.gdprForgetMe();

Upon receiving this information, Adjust will erase the user's data and the Adjust SDK will stop tracking the user. No requests from this device will be sent to Adjust in the future.

Third-party sharing for specific users

You can notify Adjust when a user disables, enables, and re-enables data sharing with third-party partners.

Disable third-party sharing for specific users

Call the following method to instruct the Adjust SDK to communicate the user's choice to disable data sharing to the Adjust backend:

AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(false);
Adjust.trackThirdPartySharing(adjustThirdPartySharing);

Upon receiving this information, Adjust will block the sharing of that specific user's data to partners and the Adjust SDK will continue to work as usual.

Call the following method to instruct the Adjust SDK to communicate the user's choice to share data or change data sharing, to the Adjust backend:

AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true);
Adjust.trackThirdPartySharing(adjustThirdPartySharing);

Upon receiving this information, Adjust changes sharing the specific user's data to partners. The Adjust SDK will continue to work as expected.

Call the following method to instruct the Adjust SDK to send the granular options to the Adjust backend:

AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(null);
adjustThirdPartySharing.addGranularOption('PartnerA', 'foo', 'bar');
Adjust.trackThirdPartySharing(adjustThirdPartySharing);

Consent measurement for specific users

You can notify Adjust when a user exercises their right to change data sharing with partners for marketing purposes, but they allow data sharing for statistical purposes.

Call the following method to instruct the Adjust SDK to communicate the user's choice to change data sharing, to the Adjust backend:

Adjust.trackMeasurementConsent(true);

Upon receiving this information, Adjust changes sharing the specific user's data to partners. The Adjust SDK will continue to work as expected.

Data residency

In order to enable data residency feature, make sure to set urlStrategy member of the AdjustConfig instance with one of the following constants:

adjustConfig.urlStrategy = AdjustConfig.DataResidencyEU; // for EU data residency region
adjustConfig.urlStrategy = AdjustConfig.DataResidencyTR; // for Turkey data residency region
adjustConfig.urlStrategy = AdjustConfig.DataResidencyUS; // for US data residency region

COPPA compliance

By default Adjust SDK doesn't mark app as COPPA compliant. In order to mark your app as COPPA compliant, make sure to set coppaCompliantEnabled member of AdjustConfig instance to true:

adjustConfig.coppaCompliantEnabled = true;

Note: By enabling this feature, third-party sharing will be automatically disabled for the users. If later during the app lifetime you decide not to mark app as COPPA compliant anymore, third-party sharing will not be automatically re-enabled. Instead, next to not marking your app as COPPA compliant anymore, you will need to explicitly re-enable third-party sharing in case you want to do that.

Play Store Kids Apps

Note: This feature exists only in Android platform.

By default Adjust SDK doesn't mark Android app as Play Store Kids App. In order to mark your app as the app which is targetting kids in Play Store, make sure to set playStoreKidsAppEnabled member of AdjustConfig instance to true:

adjustConfig.playStoreKidsAppEnabled = true;

License

The Adjust SDK is licensed under the MIT License.

Copyright (c) 2018-Present Adjust GmbH, https://www.adjust.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

flutter_sdk's People

Contributors

bironader avatar duzenko avatar fareesh avatar fbcouch avatar ilkerulusoy avatar ivosam3 avatar mrtnvm avatar nonelse avatar shashanksu avatar sporiff avatar tp avatar tsuruobiz avatar uerceg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_sdk's Issues

Flutter ios build error

...../ios/Pods/Adjust/Adjust/Adjust.m:274:16: error: implicit conversion of 'NSURLRequestAttribution' (aka 'enum NSURLRequestAttribution') to 'ADJAttribution * _Nullable' is disallowed with ARC
return [[Adjust getInstance] attribution];
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...../ios/Pods/Adjust/Adjust/Adjust.m:274:16: warning: incompatible integer to pointer conversion returning 'NSURLRequestAttribution' (aka 'enum NSURLRequestAttribution') from a function with result type 'ADJAttribution * _Nullable' [-Wint-conversion]
return [[Adjust getInstance] attribution];

suddenly getting this error during the project build process.
using adjust_sdk: 4.23.3 to 4.28.0

Flutter 1.22.6 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 9b2d32b605 (11 months ago) • 2021-01-22 14:36:39 -0800
Engine • revision 2f0af37152
Tools • Dart 2.10.5

Received deferred deeplink (deferredDeeplinkCallback) not working

We are handling the deeplink for navigation but in the flutter the deferredDeeplinkCallback event is not working.

We use the example https://github.com/adjust/flutter_sdk/tree/master/example to run the demo but still get this error.
I checked the log and I still saw AdjustSdk recognizing the deeplink (app open when run deeplink), but I did not get a response to the Flutter, even though I followed the instructions:

  • Set scheme in AndroidManifest.xml file
  • Config AdjustSdk.appWillOpenUrl(data, this) in MainActivity
Flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 1.22.4, on Microsoft Windows [Version 10.0.18363.1256], locale en-US)

[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[√] Android Studio (version 3.6)
[√] VS Code (version 1.51.1)
[√] Connected device (1 available)

• No issues found!

Logs:

flutter run --verbose
[ +100 ms] executing: [C:\flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H
[  +61 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H
[        ] 1aafb3a8b9b0c36241c5f5b34ee914770f015818
[        ] executing: [C:\flutter/] git tag --points-at HEAD
[  +58 ms] Exit code 0 from: git tag --points-at HEAD
[        ] 1.22.4
[   +6 ms] executing: [C:\flutter/] git rev-parse --abbrev-ref --symbolic @{u}
[  +38 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[        ] origin/stable
[        ] executing: [C:\flutter/] git ls-remote --get-url origin
[  +36 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] https://github.com/flutter/flutter.git
[  +63 ms] executing: [C:\flutter/] git rev-parse --abbrev-ref HEAD
[  +37 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[        ] stable
[  +49 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[   +3 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[  +17 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe devices -l
[  +37 ms] List of devices attached
           ce0717171a5e2c370d7e   device product:greatltexx model:SM_N950F device:greatlte transport_id:23
[   +6 ms] C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe -s ce0717171a5e2c370d7e shell getprop
[ +112 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update.
[   +3 ms] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[   +2 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[ +108 ms] Found plugin adjust_sdk at C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\
[  +91 ms] Found plugin adjust_sdk at C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\
[   +7 ms] Generating C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\android\app\src\main\java\io\flutter\plugins\GeneratedPluginRegistrant.java
[  +20 ms] ro.hardware = samsungexynos8895
[  +36 ms] Starting incremental build...
[   +2 ms] Initializing file store
[   +9 ms] Skipping target: gen_localizations
[   +4 ms] complete
[   +4 ms] Launching lib\main.dart on SM N950F in debug mode...
[   +5 ms] C:\flutter\bin\cache\dart-sdk\bin\dart.exe --disable-dart-dev C:\flutter\bin\cache\artifacts\engine\windows-x64\frontend_server.dart.snapshot --sdk-root C:\flutter\bin\cache\artifacts\engine\common\flutter_patched_sdk/ --incremental --target=flutter
--debugger-module-names --experimental-emit-debug-metadata -Ddart.developer.causal_async_stacks=true --output-dill C:\Users\MSI\AppData\Local\Temp\flutter_tools.e034cdca\flutter_tool.b55f694\app.dill --packages .packages -Ddart.vm.profile=false
-Ddart.vm.product=false --bytecode-options=source-positions,local-var-info,debugger-stops,instance-field-initializers,keep-unreachable-code,avoid-closure-call-instructions --enable-asserts --track-widget-creation --filesystem-scheme org-dartlang-root
--initialize-from-dill build\cache.dill.track.dill
[  +10 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\build-tools\29.0.3\aapt dump xmltree C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\build\app\outputs\flutter-apk\app.apk AndroidManifest.xml
[  +13 ms] Exit code 0 from: C:\Users\MSI\AppData\Local\Android\sdk\build-tools\29.0.3\aapt dump xmltree C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\build\app\outputs\flutter-apk\app.apk AndroidManifest.xml
[        ] N: android=http://schemas.android.com/apk/res/android
             E: manifest (line=2)
               A: android:versionCode(0x0101021b)=(type 0x10)0x1
               A: android:versionName(0x0101021c)="1.0.0" (Raw: "1.0.0")
               A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1d
               A: android:compileSdkVersionCodename(0x01010573)="10" (Raw: "10")
               A: package="com.adjust.examples" (Raw: "com.adjust.examples")
               A: platformBuildVersionCode=(type 0x10)0x1d
               A: platformBuildVersionName=(type 0x10)0xa
               E: uses-sdk (line=7)
                 A: android:minSdkVersion(0x0101020c)=(type 0x10)0x10
                 A: android:targetSdkVersion(0x01010270)=(type 0x10)0x1d
               E: uses-permission (line=14)
                 A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
               E: uses-permission (line=15)
                 A: android:name(0x01010003)="android.permission.ACCESS_NETWORK_STATE" (Raw: "android.permission.ACCESS_NETWORK_STATE")
               E: uses-permission (line=16)
                 A: android:name(0x01010003)="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" (Raw: "com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE")
               E: application (line=18)
                 A: android:label(0x01010001)="example" (Raw: "example")
                 A: android:icon(0x01010002)=@0x7f080000
                 A: android:debuggable(0x0101000f)=(type 0x12)0xffffffff
                 A: android:appComponentFactory(0x0101057a)="androidx.core.app.CoreComponentFactory" (Raw: "androidx.core.app.CoreComponentFactory")
                 E: activity (line=23)
                   A: android:theme(0x01010000)=@0x7f0a0000
                   A: android:name(0x01010003)="com.adjust.examples.MainActivity" (Raw: "com.adjust.examples.MainActivity")
                   A: android:launchMode(0x0101001d)=(type 0x10)0x1
                   A: android:configChanges(0x0101001f)=(type 0x11)0x40003fb4
                   A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x10
                   A: android:hardwareAccelerated(0x010102d3)=(type 0x12)0xffffffff
                   E: meta-data (line=37)
                     A: android:name(0x01010003)="io.flutter.embedding.android.NormalTheme" (Raw: "io.flutter.embedding.android.NormalTheme")
                     A: android:resource(0x01010025)=@0x7f0a0001
                   E: meta-data (line=47)
                     A: android:name(0x01010003)="io.flutter.embedding.android.SplashScreenDrawable" (Raw: "io.flutter.embedding.android.SplashScreenDrawable")
                     A: android:resource(0x01010025)=@0x7f040000
                   E: intent-filter (line=51)
                     E: action (line=52)
                       A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
                     E: category (line=54)
                       A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
                   E: intent-filter (line=56)
                     E: action (line=57)
                       A: android:name(0x01010003)="android.intent.action.VIEW" (Raw: "android.intent.action.VIEW")
                     E: category (line=59)
                       A: android:name(0x01010003)="android.intent.category.DEFAULT" (Raw: "android.intent.category.DEFAULT")
                     E: category (line=60)
                       A: android:name(0x01010003)="android.intent.category.BROWSABLE" (Raw: "android.intent.category.BROWSABLE")
                     E: data (line=62)
                       A: android:scheme(0x01010027)="adjustExample" (Raw: "adjustExample")
                 E: meta-data (line=69)
                   A: android:name(0x01010003)="flutterEmbedding" (Raw: "flutterEmbedding")
                   A: android:value(0x01010024)=(type 0x10)0x2
[   +8 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe -s ce0717171a5e2c370d7e shell -x logcat -v time -t 1
[ +154 ms] Exit code 0 from: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe -s ce0717171a5e2c370d7e shell -x logcat -v time -t 1
[   +1 ms] --------- beginning of main
           12-23 14:36:41.285 D/ForegroundUtils( 4406): could not check pending caller
[   +1 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe -s ce0717171a5e2c370d7e shell -x logcat -v time -t 1
[ +139 ms] Exit code 0 from: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe -s ce0717171a5e2c370d7e shell -x logcat -v time -t 1
[   +1 ms] --------- beginning of main
           12-23 14:36:41.285 D/ForegroundUtils( 4406): could not check pending caller
[  +16 ms] <- compile package:example/main.dart
[  +10 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe version
[  +24 ms] Android Debug Bridge version 1.0.41
           Version 30.0.5-6877874
           Installed as C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe
[   +1 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe start-server
[  +25 ms] Building APK
[  +15 ms] Running Gradle task 'assembleDebug'...
[   +2 ms] gradle.properties already sets `android.enableR8`
[   +3 ms] Using gradle from C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\android\gradlew.bat.
[   +1 ms] C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\android\gradlew.bat mode: 33279 rwxrwxrwx.
[   +7 ms] executing: C:\Program Files\Android\Android Studio\jre\bin\java -version
[  +77 ms] Exit code 0 from: C:\Program Files\Android\Android Studio\jre\bin\java -version
[        ] openjdk version "1.8.0_212-release"
           OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)
           OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
[   +3 ms] executing: [C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\android/] C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\android\gradlew.bat -Pverbose=true -Ptarget-platform=android-arm64
-Ptarget=C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\lib\main.dart -Ptrack-widget-creation=true -Pfilesystem-scheme=org-dartlang-root assembleDebug
[ +976 ms] > Configure project :app
[   +1 ms] WARNING: The option setting 'android.enableR8=true' is deprecated.
[        ] It will be removed in version 5.0 of the Android Gradle plugin.
[        ] You will no longer be able to disable R8
[  +90 ms] > Task :adjust_sdk:preBuild UP-TO-DATE
[        ] > Task :adjust_sdk:preDebugBuild UP-TO-DATE
[        ] > Task :adjust_sdk:mergeDebugJniLibFolders UP-TO-DATE
[        ] > Task :adjust_sdk:mergeDebugNativeLibs UP-TO-DATE
[        ] > Task :adjust_sdk:compileDebugAidl NO-SOURCE
[        ] > Task :adjust_sdk:stripDebugDebugSymbols NO-SOURCE
[        ] > Task :adjust_sdk:copyDebugJniLibsProjectAndLocalJars UP-TO-DATE
[        ] > Task :adjust_sdk:generateDebugBuildConfig UP-TO-DATE
[        ] > Task :adjust_sdk:compileDebugRenderscript NO-SOURCE
[        ] > Task :adjust_sdk:generateDebugResValues UP-TO-DATE
[        ] > Task :adjust_sdk:generateDebugResources UP-TO-DATE
[        ] > Task :adjust_sdk:packageDebugResources UP-TO-DATE
[        ] > Task :adjust_sdk:parseDebugLocalResources UP-TO-DATE
[  +92 ms] > Task :adjust_sdk:processDebugManifest UP-TO-DATE
[   +1 ms] > Task :adjust_sdk:generateDebugRFile UP-TO-DATE
[        ] > Task :adjust_sdk:javaPreCompileDebug UP-TO-DATE
[   +2 ms] > Task :adjust_sdk:compileDebugJavaWithJavac UP-TO-DATE
[   +3 ms] > Task :adjust_sdk:extractDebugAnnotations UP-TO-DATE
[        ] > Task :adjust_sdk:mergeDebugGeneratedProguardFiles UP-TO-DATE
[        ] > Task :adjust_sdk:mergeDebugConsumerProguardFiles UP-TO-DATE
[        ] > Task :adjust_sdk:mergeDebugShaders UP-TO-DATE
[   +1 ms] > Task :adjust_sdk:compileDebugShaders NO-SOURCE
[        ] > Task :adjust_sdk:generateDebugAssets UP-TO-DATE
[        ] > Task :adjust_sdk:packageDebugAssets UP-TO-DATE
[        ] > Task :adjust_sdk:packageDebugRenderscript NO-SOURCE
[        ] > Task :adjust_sdk:prepareLintJarForPublish UP-TO-DATE
[        ] > Task :adjust_sdk:processDebugJavaRes NO-SOURCE
[        ] > Task :adjust_sdk:mergeDebugJavaResource UP-TO-DATE
[        ] > Task :adjust_sdk:syncDebugLibJars UP-TO-DATE
[        ] > Task :adjust_sdk:bundleDebugAar UP-TO-DATE
[        ] > Task :adjust_sdk:compileDebugSources UP-TO-DATE
[        ] > Task :adjust_sdk:assembleDebug UP-TO-DATE
[        ] > Task :adjust_sdk:bundleLibCompileToJarDebug UP-TO-DATE
[        ] > Task :app:compileFlutterBuildDebug UP-TO-DATE
[        ] > Task :app:packLibsflutterBuildDebug UP-TO-DATE
[        ] > Task :app:preBuild UP-TO-DATE
[        ] > Task :app:preDebugBuild UP-TO-DATE
[        ] > Task :app:compileDebugAidl NO-SOURCE
[   +1 ms] > Task :app:generateDebugBuildConfig UP-TO-DATE
[  +81 ms] > Task :app:compileDebugRenderscript NO-SOURCE
[        ] > Task :adjust_sdk:compileDebugLibraryResources UP-TO-DATE
[        ] > Task :app:cleanMergeDebugAssets
[        ] > Task :app:mergeDebugShaders UP-TO-DATE
[        ] > Task :app:compileDebugShaders NO-SOURCE
[        ] > Task :app:generateDebugAssets UP-TO-DATE
[        ] > Task :app:mergeDebugAssets
[ +197 ms] > Task :app:copyFlutterAssetsDebug
[   +1 ms] > Task :app:generateDebugResValues UP-TO-DATE
[   +1 ms] > Task :app:generateDebugResources UP-TO-DATE
[  +97 ms] > Task :app:mergeDebugResources UP-TO-DATE
[        ] > Task :adjust_sdk:extractDeepLinksDebug UP-TO-DATE
[   +1 ms] > Task :app:createDebugCompatibleScreenManifests UP-TO-DATE
[        ] > Task :app:extractDeepLinksDebug UP-TO-DATE
[        ] > Task :app:processDebugManifest UP-TO-DATE
[        ] > Task :app:processDebugResources UP-TO-DATE
[        ] > Task :app:compileDebugKotlin UP-TO-DATE
[        ] > Task :app:javaPreCompileDebug UP-TO-DATE
[        ] > Task :app:compileDebugJavaWithJavac UP-TO-DATE
[        ] > Task :app:compileDebugSources UP-TO-DATE
[        ] > Task :adjust_sdk:bundleLibResDebug NO-SOURCE
[        ] > Task :app:processDebugJavaRes NO-SOURCE
[        ] > Task :app:mergeDebugJavaResource UP-TO-DATE
[        ] > Task :adjust_sdk:bundleLibRuntimeToJarDebug UP-TO-DATE
[        ] > Task :app:checkDebugDuplicateClasses UP-TO-DATE
[        ] > Task :app:dexBuilderDebug UP-TO-DATE
[        ] > Task :app:desugarDebugFileDependencies UP-TO-DATE
[   +1 ms] > Task :adjust_sdk:copyDebugJniLibsProjectOnly UP-TO-DATE
[        ] > Task :app:mergeExtDexDebug UP-TO-DATE
[        ] > Task :app:mergeDexDebug UP-TO-DATE
[        ] > Task :app:mergeDebugJniLibFolders UP-TO-DATE
[        ] > Task :app:mergeDebugNativeLibs UP-TO-DATE
[  +87 ms] > Task :app:stripDebugDebugSymbols UP-TO-DATE
[   +1 ms] WARNING: Compatible side by side NDK version was not found. Default is 21.0.6113669.
[        ] Compatible side by side NDK version was not found. Default is 21.0.6113669.
[        ] > Task :app:validateSigningDebug UP-TO-DATE
[        ] > Task :app:packageDebug UP-TO-DATE
[  +70 ms] > Task :app:assembleDebug
[   +2 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
[        ] Use '--warning-mode all' to show the individual deprecation warnings.
[        ] See https://docs.gradle.org/6.1.1/userguide/command_line_interface.html#sec:command_line_warnings
[        ] BUILD SUCCESSFUL in 1s
[        ] 53 actionable tasks: 4 executed, 49 up-to-date
[ +355 ms] Running Gradle task 'assembleDebug'... (completed in 2.2s)
[  +31 ms] calculateSha: LocalDirectory: 'C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\build\app\outputs\flutter-apk'/app.apk
[  +27 ms] calculateSha: reading file took 26us
[ +528 ms] calculateSha: computing sha took 526us
[   +5 ms] √ Built build\app\outputs\flutter-apk\app-debug.apk.
[   +3 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\build-tools\29.0.3\aapt dump xmltree C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\build\app\outputs\flutter-apk\app.apk AndroidManifest.xml
[  +12 ms] Exit code 0 from: C:\Users\MSI\AppData\Local\Android\sdk\build-tools\29.0.3\aapt dump xmltree C:\xampp\htdocs\App\Flutter\adjust_flutter_sdk-master\flutter_sdk-master\example\build\app\outputs\flutter-apk\app.apk AndroidManifest.xml
[        ] N: android=http://schemas.android.com/apk/res/android
             E: manifest (line=2)
               A: android:versionCode(0x0101021b)=(type 0x10)0x1
               A: android:versionName(0x0101021c)="1.0.0" (Raw: "1.0.0")
               A: android:compileSdkVersion(0x01010572)=(type 0x10)0x1d
               A: android:compileSdkVersionCodename(0x01010573)="10" (Raw: "10")
               A: package="com.adjust.examples" (Raw: "com.adjust.examples")
               A: platformBuildVersionCode=(type 0x10)0x1d
               A: platformBuildVersionName=(type 0x10)0xa
               E: uses-sdk (line=7)
                 A: android:minSdkVersion(0x0101020c)=(type 0x10)0x10
                 A: android:targetSdkVersion(0x01010270)=(type 0x10)0x1d
               E: uses-permission (line=14)
                 A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
               E: uses-permission (line=15)
                 A: android:name(0x01010003)="android.permission.ACCESS_NETWORK_STATE" (Raw: "android.permission.ACCESS_NETWORK_STATE")
               E: uses-permission (line=16)
                 A: android:name(0x01010003)="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" (Raw: "com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE")
               E: application (line=18)
                 A: android:label(0x01010001)="example" (Raw: "example")
                 A: android:icon(0x01010002)=@0x7f080000
                 A: android:debuggable(0x0101000f)=(type 0x12)0xffffffff
                 A: android:appComponentFactory(0x0101057a)="androidx.core.app.CoreComponentFactory" (Raw: "androidx.core.app.CoreComponentFactory")
                 E: activity (line=23)
                   A: android:theme(0x01010000)=@0x7f0a0000
                   A: android:name(0x01010003)="com.adjust.examples.MainActivity" (Raw: "com.adjust.examples.MainActivity")
                   A: android:launchMode(0x0101001d)=(type 0x10)0x1
                   A: android:configChanges(0x0101001f)=(type 0x11)0x40003fb4
                   A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x10
                   A: android:hardwareAccelerated(0x010102d3)=(type 0x12)0xffffffff
                   E: meta-data (line=37)
                     A: android:name(0x01010003)="io.flutter.embedding.android.NormalTheme" (Raw: "io.flutter.embedding.android.NormalTheme")
                     A: android:resource(0x01010025)=@0x7f0a0001
                   E: meta-data (line=47)
                     A: android:name(0x01010003)="io.flutter.embedding.android.SplashScreenDrawable" (Raw: "io.flutter.embedding.android.SplashScreenDrawable")
                     A: android:resource(0x01010025)=@0x7f040000
                   E: intent-filter (line=51)
                     E: action (line=52)
                       A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
                     E: category (line=54)
                       A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
                   E: intent-filter (line=56)
                     E: action (line=57)
                       A: android:name(0x01010003)="android.intent.action.VIEW" (Raw: "android.intent.action.VIEW")
                     E: category (line=59)
                       A: android:name(0x01010003)="android.intent.category.DEFAULT" (Raw: "android.intent.category.DEFAULT")
                     E: category (line=60)
                       A: android:name(0x01010003)="android.intent.category.BROWSABLE" (Raw: "android.intent.category.BROWSABLE")
                     E: data (line=62)
                       A: android:scheme(0x01010027)="adjustExample" (Raw: "adjustExample")
                 E: meta-data (line=69)
                   A: android:name(0x01010003)="flutterEmbedding" (Raw: "flutterEmbedding")
                   A: android:value(0x01010024)=(type 0x10)0x2
[   +3 ms] Stopping app 'app.apk' on SM N950F.
[   +1 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe -s ce0717171a5e2c370d7e shell am force-stop com.adjust.examples
[ +259 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe -s ce0717171a5e2c370d7e shell pm list packages com.adjust.examples
[  +91 ms] package:com.adjust.examples
[   +2 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe -s ce0717171a5e2c370d7e shell cat /data/local/tmp/sky.com.adjust.examples.sha1
[  +42 ms] 684cbb9433b1d618b473b7a87a25882529d1fc90
[   +2 ms] Latest build already installed.
[        ] SM N950F startApp
[   +2 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe -s ce0717171a5e2c370d7e shell am start -a android.intent.action.RUN -f 0x20000000 --ez enable-background-compilation true --ez enable-dart-profiling true --ez enable-checked-mode
true --ez verify-entry-points true com.adjust.examples/com.adjust.examples.MainActivity
[  +97 ms] Starting: Intent { act=android.intent.action.RUN flg=0x20000000 cmp=com.adjust.examples/.MainActivity (has extras) }
[   +1 ms] Waiting for observatory port to be available...
[ +893 ms] Observatory URL on device: http://127.0.0.1:41379/9w2An80nsYM=/
[   +1 ms] executing: C:\Users\MSI\AppData\Local\Android\sdk\platform-tools\adb.exe -s ce0717171a5e2c370d7e forward tcp:0 tcp:41379
[  +28 ms] 59400
[   +1 ms] Forwarded host port 59400 to device port 41379 for Observatory
[   +4 ms] Caching compiled dill
[  +20 ms] Connecting to service protocol: http://127.0.0.1:59400/9w2An80nsYM=/
[   +1 ms] DDS is currently disabled due to https://github.com/flutter/flutter/issues/62507
[ +383 ms] Successfully connected to service protocol: http://127.0.0.1:59400/9w2An80nsYM=/
[   +1 ms] Waiting for SM N950F to report its views...
[  +10 ms] Waiting for SM N950F to report its views... (completed in 9ms)
[  +13 ms] DevFS: Creating new filesystem on the device (null)
[  +44 ms] DevFS: Created new filesystem on the device (file:///data/user/0/com.adjust.examples/code_cache/exampleVQXPHE/example/)
[   +2 ms] Updating assets
[  +70 ms] Syncing files to device SM N950F...
[   +2 ms] Scanning asset files
[   +2 ms] <- reset
[        ] Compiling dart to kernel with 0 updated files
[   +1 ms] <- recompile package:example/main.dart 50453467-cdce-4607-8c9a-bd6df52dd6c7
[        ] <- 50453467-cdce-4607-8c9a-bd6df52dd6c7
[  +73 ms] Updating files
[ +150 ms] DevFS: Sync finished
[   +1 ms] Syncing files to device SM N950F... (completed in 230ms)
[        ] Synced 1.7MB.
[   +1 ms] <- accept
[   +8 ms] Connected to _flutterView/0x73b7156820.
[   +1 ms] Flutter run key commands.
[   +1 ms] r Hot reload. 
[        ] R Hot restart.
[        ] h Repeat this help message.
[        ] d Detach (terminate "flutter run" but leave application running).
[        ] c Clear the screen
[        ] q Quit (terminate the application on the device).
[        ] An Observatory debugger and profiler on SM N950F is available at: http://127.0.0.1:59400/9w2An80nsYM=/
[ +582 ms] W/Adjust  ( 3842): Adjust not initialized, but adding session callback parameter saved for launch
[   +1 ms] W/Adjust  ( 3842): Adjust not initialized, but adding session callback parameter saved for launch
[        ] W/Adjust  ( 3842): Adjust not initialized, but adding session partner parameter saved for launch
[        ] W/Adjust  ( 3842): Adjust not initialized, but adding session partner parameter saved for launch
[        ] W/Adjust  ( 3842): Adjust not initialized, but removing session callback parameter saved for launch
[        ] W/Adjust  ( 3842): Adjust not initialized, but removing session partner parameter saved for launch
[        ] W/Adjust  ( 3842): Adjust not initialized, but resetting session callback parameters saved for launch
[        ] W/Adjust  ( 3842): Adjust not initialized, but resetting session partner parameters saved for launch
[   +4 ms] W/Adjust  ( 3842): SANDBOX: Adjust is running in Sandbox mode. Use this setting for testing. Don't forget to set the environment to `production` before publishing!
[  +13 ms] W/Adjust  ( 3842): SANDBOX: Adjust is running in Sandbox mode. Use this setting for testing. Don't forget to set the environment to `production` before publishing!
[        ] D/Adjust  ( 3842): Read Attribution: tt:r9oldb2 tn:Organic net:Organic cam:null adg:null cre:null cl:null adid:f52087fa002d27ff08e671279ae6590e
[   +6 ms] D/Adjust  ( 3842): Read Activity state: ec:0 sc:1 ssc:5 sl:868.8 ts:677.4 la:11:12:13 uuid:82170064-41da-4298-9dfa-3380d6d2c72b
[        ] D/Adjust  ( 3842): Read Session Callback parameters: null
[        ] D/Adjust  ( 3842): Read Session Partner parameters: null
[        ] D/Adjust  ( 3842): adjust_config.properties file not found in this app
[ +101 ms] I/Adjust  ( 3842): Google Play Services Advertising ID read correctly at start time
[   +1 ms] V/Adjust  ( 3842): Foreground timer configured to fire after 60.0 seconds of starting and cycles every 60.0 seconds
[   +6 ms] D/Adjust  ( 3842): Read Package queue: []
[   +1 ms] D/Adjust  ( 3842): Package handler read 0 packages
[   +2 ms] D/Adjust  ( 3842): Wrote Session Callback parameters: {scp_foo_1=scp_bar}
[        ] D/Adjust  ( 3842): Wrote Session Callback parameters: {scp_foo_1=scp_bar, scp_foo_2=scp_value}
[   +1 ms] D/Adjust  ( 3842): Wrote Session Partner parameters: {spp_foo_1=spp_bar}
[        ] D/Adjust  ( 3842): Wrote Session Partner parameters: {spp_foo_1=spp_bar, spp_foo_2=spp_value}
[   +1 ms] D/Adjust  ( 3842): Key scp_foo_1 will be removed
[        ] D/Adjust  ( 3842): Wrote Session Callback parameters: {scp_foo_2=scp_value}
[        ] D/Adjust  ( 3842): Key spp_foo_1 will be removed
[   +1 ms] D/Adjust  ( 3842): Wrote Session Partner parameters: {spp_foo_2=spp_value}
[        ] D/Adjust  ( 3842): Wrote Session Callback parameters: null
[        ] D/Adjust  ( 3842): Wrote Session Partner parameters: null
[        ] V/Adjust  ( 3842): Foreground timer starting
[        ] V/Adjust  ( 3842): Subsession start
[        ] V/Adjust  ( 3842): Started subsession 6 of session 1
[   +2 ms] D/Adjust  ( 3842): Wrote Activity state: ec:0 sc:1 ssc:6 sl:887.4 ts:677.4 la:11:12:13 uuid:82170064-41da-4298-9dfa-3380d6d2c72b
[  +14 ms] D/Adjust  ( 3842): InstallReferrer invoke method name: onInstallReferrerSetupFinished
[   +1 ms] D/Adjust  ( 3842): InstallReferrer invoke arg: 0
[  +11 ms] D/Adjust  ( 3842): installReferrer: utm_source=google-play&utm_medium=organic, clickTime: 0, installBeginTime: 0
[        ] D/Adjust  ( 3842): installVersion: null, clickTimeServer: -1, installBeginServer: -1, googlePlayInstant: false
[        ] D/Adjust  ( 3842): Install Referrer read successfully. Closing connection
[        ] D/Adjust  ( 3842): Install Referrer API connection closed
[+3154 ms] D/ViewRootImpl@5780ebf[MainActivity]( 3842): MSG_WINDOW_FOCUS_CHANGED 0 1
[   +1 ms] D/InputMethodManager( 3842): prepareNavigationBarInfo() DecorView@be0df63[MainActivity]
[        ] D/InputMethodManager( 3842): getNavigationBarColor() -855310
[  +12 ms] D/ViewRootImpl@5780ebf[MainActivity]( 3842): setWindowStopped(true) old=false
[   +6 ms] D/SurfaceView( 3842): windowStopped(true) false io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792} of ViewRootImpl@5780ebf[MainActivity]
[   +1 ms] D/SurfaceView( 3842): show() Surface(name=SurfaceView - com.adjust.examples/com.adjust.examples.MainActivity@f56a98c@0[3842])/@0xdd708d5 io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792}
[   +1 ms] D/SurfaceView( 3842): surfaceDestroyed callback.size 1 #1 io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792}
[  +15 ms] W/libEGL  ( 3842): EGLNativeWindowType 0x739bc2b010 disconnect failed
[        ] D/SurfaceView( 3842): destroy() Surface(name=SurfaceView - com.adjust.examples/com.adjust.examples.MainActivity@f56a98c@0[3842])/@0xdd708d5 io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792}
[  +13 ms] V/Adjust  ( 3842): Foreground timer suspended with 56.8 seconds left
[        ] V/Adjust  ( 3842): Subsession end
[        ] D/SurfaceView( 3842): onWindowVisibilityChanged(4) false io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792} of ViewRootImpl@5780ebf[MainActivity]
[   +1 ms] D/Adjust  ( 3842): Wrote Activity state: ec:0 sc:1 ssc:6 sl:890.6 ts:680.6 la:11:12:13 uuid:82170064-41da-4298-9dfa-3380d6d2c72b
[   +1 ms] W/libEGL  ( 3842): EGLNativeWindowType 0x739d9e2010 disconnect failed
[        ] D/OpenGLRenderer( 3842): eglDestroySurface = 0x73b8d2eb00, 0x739d9e2000
[  +16 ms] D/ViewRootImpl@5780ebf[MainActivity]( 3842): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x5 surface={valid=false 0} changed=true
[  +16 ms] D/InputTransport( 3842): Input channel destroyed: fd=95
[ +310 ms] D/SurfaceView( 3842): onWindowVisibilityChanged(8) false io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792} of ViewRootImpl@5780ebf[MainActivity]
[   +9 ms] D/ViewRootImpl@5780ebf[MainActivity]( 3842): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x1 surface={valid=false 0} changed=false
[+4476 ms] D/SurfaceView( 3842): onWindowVisibilityChanged(4) false io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792} of ViewRootImpl@5780ebf[MainActivity]
[   +9 ms] D/ViewRootImpl@5780ebf[MainActivity]( 3842): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x1 surface={valid=false 0} changed=false
[   +1 ms] D/ViewRootImpl@5780ebf[MainActivity]( 3842): setWindowStopped(false) old=true
[        ] V/Adjust  ( 3842): Url to parse (adjustExample://demo?adjust_reftag=cXyRS18aG9rUx)
[        ] D/SurfaceView( 3842): windowStopped(false) false io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792} of ViewRootImpl@5780ebf[MainActivity]
[        ] D/ViewRootImpl@5780ebf[MainActivity]( 3842): setWindowStopped(false) old=false
[        ] D/SurfaceView( 3842): onWindowVisibilityChanged(0) true io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792} of ViewRootImpl@5780ebf[MainActivity]
[  +14 ms] D/ViewRootImpl@5780ebf[MainActivity]( 3842): Relayout returned: old=[0,0][1440,2960] new=[0,0][1440,2960] result=0x7 surface={valid=true 496565624832} changed=true
[        ] D/mali_winsys( 3842): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
[        ] D/OpenGLRenderer( 3842): eglCreateWindowSurface = 0x73b8d2eb00, 0x739d9e2010
[   +4 ms] D/SurfaceView( 3842): show() Surface(name=SurfaceView - com.adjust.examples/com.adjust.examples.MainActivity@f56a98c@1[3842])/@0x64610b4 io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792}
[        ] D/SurfaceView( 3842): surfaceCreated 1 #8 io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792}
[        ] D/mali_winsys( 3842): EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
[   +5 ms] D/SurfaceView( 3842): surfaceChanged (1440,2792) 1 #8 io.flutter.embedding.android.FlutterSurfaceView{f56a98c V.E...... ........ 0,0-1440,2792}
[        ] W/Activity( 3842): AppLock checkAppLockState locked:false verifying:false pkgName = com.adjust.examples isInMultiWindowMode:false showWhenLocked:false
[        ] D/ViewRootImpl@5780ebf[MainActivity]( 3842): MSG_WINDOW_FOCUS_CHANGED 1 1
[        ] D/InputMethodManager( 3842): prepareNavigationBarInfo() DecorView@be0df63[MainActivity]
[        ] D/InputMethodManager( 3842): getNavigationBarColor() -855310
[        ] D/InputMethodManager( 3842): prepareNavigationBarInfo() DecorView@be0df63[MainActivity]
[        ] D/InputMethodManager( 3842): getNavigationBarColor() -855310
[        ] V/InputMethodManager( 3842): Starting input: tba=com.adjust.examples ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
[        ] D/InputMethodManager( 3842): startInputInner - Id : 0
[        ] I/InputMethodManager( 3842): startInputInner - mService.startInputOrWindowGainedFocus
[   +1 ms] D/InputTransport( 3842): Input channel constructed: fd=98
[  +17 ms] V/Adjust  ( 3842): Foreground timer starting
[        ] V/Adjust  ( 3842): Subsession start
[        ] D/Adjust  ( 3842): Added sdk_click 1
[        ] V/Adjust  ( 3842): Started subsession 7 of session 1
[        ] D/Adjust  ( 3842): Wrote Activity state: ec:0 sc:1 ssc:7 sl:895.5 ts:680.6 la:11:12:13 uuid:82170064-41da-4298-9dfa-3380d6d2c72b
[        ] D/Adjust  ( 3842): Should not try to read Install referrer
[   +8 ms] V/Adjust  ( 3842): Path:      /sdk_click
[        ] V/Adjust  ( 3842): ClientSdk: [email protected]
[        ] V/Adjust  ( 3842): Parameters:
[        ] V/Adjust  ( 3842):   android_uuid     82170064-41da-4298-9dfa-3380d6d2c72b
[        ] V/Adjust  ( 3842):   api_level        28
[        ] V/Adjust  ( 3842):   app_token        8856pj8o9tds
[        ] V/Adjust  ( 3842):   app_version      1.0.0
[        ] V/Adjust  ( 3842):   attribution_deeplink 1
[        ] V/Adjust  ( 3842):   click_time       2020-12-23T14:36:56.024Z+0700
[        ] V/Adjust  ( 3842):   connectivity_type 1
[   +1 ms] V/Adjust  ( 3842):   country          VN
[   +4 ms] V/Adjust  ( 3842):   cpu_type         arm64-v8a
[        ] V/Adjust  ( 3842):   created_at       2020-12-23T14:36:56.025Z+0700
[        ] V/Adjust  ( 3842):   deeplink         adjustExample://demo?adjust_reftag=cXyRS18aG9rUx
[        ] V/Adjust  ( 3842):   device_manufacturer samsung
[        ] V/Adjust  ( 3842):   device_name      SM-N950F
[        ] V/Adjust  ( 3842):   device_type      phone
[        ] V/Adjust  ( 3842):   display_height   2792
[        ] V/Adjust  ( 3842):   display_width    1440
[        ] V/Adjust  ( 3842):   environment      sandbox
[        ] V/Adjust  ( 3842):   event_buffering_enabled 0
[        ] V/Adjust  ( 3842):   fb_id            ab2d4f8e-0a14-4f07-8356-5799e6e5e918
[        ] V/Adjust  ( 3842):   gps_adid         ae0ea942-fcdd-41c9-900d-3b6ddf8d01f6
[        ] V/Adjust  ( 3842):   gps_adid_attempt 1
[        ] V/Adjust  ( 3842):   gps_adid_src     service
[        ] V/Adjust  ( 3842):   hardware_name    LamlazyROM Note8 Global DualSim V3 - android 9 - azmobile
[        ] V/Adjust  ( 3842):   installed_at     2020-12-23T14:21:53.977Z+0700
[        ] V/Adjust  ( 3842):   language         vi
[        ] V/Adjust  ( 3842):   last_interval    5
[        ] V/Adjust  ( 3842):   mcc              452
[        ] V/Adjust  ( 3842):   mnc              01
[        ] V/Adjust  ( 3842):   needs_response_details 1
[        ] V/Adjust  ( 3842):   network_type     0
[        ] V/Adjust  ( 3842):   os_build         PPR1.180610.011
[   +2 ms] V/Adjust  ( 3842):   os_name          android
[        ] V/Adjust  ( 3842):   os_version       9
[        ] V/Adjust  ( 3842):   package_name     com.adjust.examples
[        ] V/Adjust  ( 3842):   reftag           cXyRS18aG9rUx
[        ] V/Adjust  ( 3842):   screen_density   high
[        ] V/Adjust  ( 3842):   screen_format    long
[        ] V/Adjust  ( 3842):   screen_size      normal
[        ] V/Adjust  ( 3842):   session_count    1
[        ] V/Adjust  ( 3842):   session_length   891
[        ] V/Adjust  ( 3842):   source           deeplink
[        ] V/Adjust  ( 3842):   subsession_count 6
[        ] V/Adjust  ( 3842):   time_spent       681
[        ] V/Adjust  ( 3842):   tracking_enabled 1
[        ] V/Adjust  ( 3842):   updated_at       2020-12-23T14:29:07.552Z+0700
[        ] I/System.out( 3842): (HTTPLog)-Static: isSBSettingEnabled false
[        ] I/System.out( 3842): (HTTPLog)-Static: isSBSettingEnabled false
[+1332 ms] V/Adjust  ( 3842): Response: {"app_token":"8856pj8o9tds","adid":"f52087fa002d27ff08e671279ae6590e","timestamp":"2020-12-23T07:36:57.551Z+0000","message":"Click tracked"}
[        ] I/Adjust  ( 3842): Click tracked
[  +11 ms] D/Adjust  ( 3842): Wrote Activity state: ec:0 sc:1 ssc:7 sl:895.5 ts:680.6 la:11:12:13 uuid:82170064-41da-4298-9dfa-3380d6d2c72b
[+55392 ms] V/Adjust  ( 3842): Foreground timer fired
[  +13 ms] D/Adjust  ( 3842): Wrote Activity state: ec:0 sc:1 ssc:7 sl:952.3 ts:737.4 la:11:12:13 uuid:82170064-41da-4298-9dfa-3380d6d2c72b

I can't debug build with Flutter 2.0.0

When I try to build in the environment of Flutter 2.0.0, this error message appears and it seems that I can not build. Is there any workaround?

Ld /Users/user/Library/Developer/Xcode/DerivedData/Runner-fmijjoaoeppsqsacgnydsiaqeana/Build/Products/Debug-iphoneos/Adjust/Adjust.framework/Adjust normal (in target 'Adjust' from project 'Pods')
    cd /Users/user/.ghq/github.com/user1/app/ios/Pods
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -target arm64-apple-ios11.0 -dynamiclib -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.4.sdk -L/Users/user/Library/Developer/Xcode/DerivedData/Runner-fmijjoaoeppsqsacgnydsiaqeana/Build/Products/Debug-iphoneos/Adjust -F/Users/user/Library/Developer/Xcode/DerivedData/Runner-fmijjoaoeppsqsacgnydsiaqeana/Build/Products/Debug-iphoneos/Adjust -F/Users/user/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-armv7_arm64 -filelist /Users/user/Library/Developer/Xcode/DerivedData/Runner-fmijjoaoeppsqsacgnydsiaqeana/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/Adjust.build/Objects-normal/arm64/Adjust.LinkFileList -install_name @rpath/Adjust.framework/Adjust -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -dead_strip -Xlinker -object_path_lto -Xlinker /Users/user/Library/Developer/Xcode/DerivedData/Runner-fmijjoaoeppsqsacgnydsiaqeana/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/Adjust.build/Objects-normal/arm64/Adjust_lto.o -Xlinker -export_dynamic -Xlinker -no_deduplicate -fembed-bitcode -Xlinker -bitcode_verify -Xlinker -bitcode_hide_symbols -Xlinker -bitcode_symbol_map -Xlinker /Users/user/Library/Developer/Xcode/DerivedData/Runner-fmijjoaoeppsqsacgnydsiaqeana/Build/Products/Debug-iphoneos/Adjust -fobjc-arc -fobjc-link-runtime -framework SystemConfiguration -weak_framework AdSupport -weak_framework CoreTelephony -weak_framework iAd -framework Flutter -framework Foundation -framework SystemConfiguration -compatibility_version 1 -current_version 1 -Xlinker -dependency_info -Xlinker /Users/user/Library/Developer/Xcode/DerivedData/Runner-fmijjoaoeppsqsacgnydsiaqeana/Build/Intermediates.noindex/Pods.build/Debug-iphoneos/Adjust.build/Objects-normal/arm64/Adjust_dependency_info.dat -o /Users/user/Library/Developer/Xcode/DerivedData/Runner-fmijjoaoeppsqsacgnydsiaqeana/Build/Products/Debug-iphoneos/Adjust/Adjust.framework/Adjust
    
ld: bitcode bundle could not be generated because '/Users/user/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-armv7_arm64/Flutter.framework/Flutter' was built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive or Install build file '/Users/user/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-armv7_arm64/Flutter.framework/Flutter'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

pubspec.yaml

adjust_sdk: ^4.26.0

Flutter

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.0.0, on Mac OS X 10.15.7 19H512 darwin-x64, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.1)
[✓] VS Code (version 1.41.1)
[✓] Connected device (3 available)

Execution failed for task ':adjust_sdk:compileDebugJavaWithJavac'.

Flutter run failed on Android

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':adjust_sdk:compileDebugJavaWithJavac'.

Failed to calculate the value of task ':adjust_sdk:compileDebugJavaWithJavac' property 'options.generatedSourceOutputDirectory'.
Querying the mapped value of map(java.io.File property(org.gradle.api.file.Directory, fixed(class org.gradle.api.internal.file.DefaultFilePropertyFactory$FixedDirectory, /Users/username/<flutter_project>/build/adjust_sdk/generated/ap_generated_sources/debug/out)) org.gradle.api.internal.file.DefaultFilePropertyFactory$ToFileTransformer@55941cbd) before task ':adjust_sdk:compileDebugJavaWithJavac' has completed is not supported

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 19s
Exception: Gradle task assembleDebug failed with exit code 1

Flutter doctor Doctor summary (to see all details, run flutter doctor -v):
[!] Flutter (Channel unknown, 3.3.2, on macOS 12.6 21G115 darwin-x64, locale en-ID)
  ! Flutter version 3.3.2 on channel unknown at /Users/username/Development/flutter
  ! Upstream repository unknown
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc1)
[✓] Xcode - develop for iOS and macOS (Xcode 13.3)
[✗] Chrome - develop for the web (Cannot find Chrome executable at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome)
  ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[✓] Android Studio (version 2021.3)
[✓] VS Code (version 1.71.2)
[✓] Connected device (2 available)
[✓] HTTP Host Availability

! Doctor found issues in 2 categories.

Initializing Adjust SDK using `Stateless` widget

Hi there, hope you doing great!
According to the documentation for calling onResume and onPause methods you have to use WidgetsBindingObserver and override didChangeAppLifecycleState method.
if you use StatefulWidget at the root everything will be ok. the question is I have a Flutter app which all the widgets are Stateless.
I could add observer using root widget constructor. but how to dispose it?

import 'package:flutter/material.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp( MyApp());
}

class MyApp extends StatelessWidget with WidgetsBindingObserver {
  MyApp({Key? key}) : super(key: key) {
    WidgetsBinding.instance.addObserver(this);
    // Adjust config and start
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    switch (state) {
      case AppLifecycleState.resumed:
        // Adjust on resume
        break;
      case AppLifecycleState.inactive:
        // TODO: Handle this case.
        break;
      case AppLifecycleState.paused:
        // Adjust on pause
        break;
      case AppLifecycleState.detached:
        // TODO: Handle this case.
        break;
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

I mean in this senario what can we do for initializing Adjust?

thanks

module 'adjust_sdk' not found on IOS

When I execute flutter run is working fine, when run flutter build it fail

This fail is present only on ios, on android build working well

...GeneratedPluginRegistrant.m:10:9: fatal error: module 'adjust_sdk' not found
@import adjust_sdk;
~~~~~~~^~~~~~~~~~
1 error generated.

com.google.android.gms:play-services-analytics deprecated

Hi,

I just integrated the Adjust SDK in our Flutter app. I saw we need to add com.google.android.gms:play-services-analytics to the build.gradle and that Adjust doesn't care about a specific version. I googled what the latest version is and saw that the package is deprecated in favor of Firebase Analytics.

In our project we do use Firebase Analytics. Is this package required then?

Thanks,
Rutger

How to navigate based on standard deep link?

Is there any way I can navigate the user inside my flutter app based on the deep link?

I know standard deep links are not detected by dart code, they are detected in onNewIntent in Android for example, how can I send this link back to dart for Android & iOS as well?

Expose `OnSessionTrackingSucceededListener` callback to easily wait until `getAdid()` returns non-`null` ID

Hey,

we discovered a race-condition in our app which was driven by the fact that initial calls to getAdid() (with a fresh install), after "going online" with setOfflineMode(false), return null initially.

Only if one calls this again a few seconds later will it return an actual string identifier.

In an issue for the native Android SDK (adjust/android_sdk#454), you suggest to wait for a session event callback.

Unfortunately this does not seem to be exposed via the Flutter SDK yet. Would you be willing to add this?

Our current workaround is to poll the getAdid() function until it returns the first value.

Alternatively I could also see the behavior of getAdid() to be changed to have the Future resolve only after an ID has been received. This might of course take a long time and might be unexpected to callers (so they should never put it into the user's path).

Events are not tracked when is from DeepLink

I'm trying to use Adjust Deeplinks to redirect the user to my app and after all configuration, that's working fine.
But, after the user being redirect to app, the events that are already setted do not appear linked to any tracker on the Dashboard.

Any ideas to solve this?

Support null safety

This is a request to add support for null safety to package:adjust_sdk.
We depend on your awesome package, so would be great to have null safety enabled.

The Dart/Flutter team already encourages publishing the migrated packages: See this blog post.

See the migration guide for details about enabling null safety.

Tracking Unistall ios

I went through the document here and followed it
[https://help.adjust.com/en/article/uninstalls-reinstalls]
in android it works fine. But on ios, i am using both p8 and p12 on firebase but its not working i tried on testflight and also build ipa. Status unchanged, sent token firebase to adjust.
Expected behavior: Adjust tracked uninstall app on Ios

Adjust.track failed

The same code, different event creation time, the event created a long time ago failed to send, the most recently created event can be sent successfully

JSON response: {"error":"Event request failed (Ignoring event, earlier unique event tracked)"}

Critical: Can't build with apk with Adjust

When I try building the apk I get this error message that the build grade is not supported. When I manually change the gradle to 6.1.1 it also fails.

I can't release my app anymore without it crashing.

Error Message below:

FAILURE: Build failed with an exception.

  • Where:
    Build file '/Users/cedricyarish/flutter/.pub-cache/hosted/pub.dartlang.org/adjust_sdk-4.22.0/android/build.gradle' line: 25

  • What went wrong:
    A problem occurred evaluating root project 'adjust_sdk'.

Failed to apply plugin [id 'com.android.internal.version-check']
Minimum supported Gradle version is 6.1.1. Current version is 5.1.1. If using the gradle wrapper, try editing the distributionUrl in /Users/cedricyarish/flutter/.pub-cache/hosted/pub.dartlang.org/adjust_sdk-4.22.0/android/gradle/wrapper/gradle-wrapper.properties to gradle-6.1.1-all.zip

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

Crash when running in release mode in Android environment

In Android environment, crashes when run in release mode.
It works fine in debug mode and on iOS.

Using https://github.com/adjust/flutter_sdk/releases/tag/v4.30.0

Error log

E/AndroidRuntime(10282): FATAL EXCEPTION: OkHttp Dispatcher
E/AndroidRuntime(10282): Process: ****, PID: 10282
E/AndroidRuntime(10282): java.lang.IllegalAccessError: Illegal class access: 'l.a0.h.a' attempting to access 'l.s' (declaration of 'l.a0.h.a' appears in /data/app/~~zCt2jGV57oqfSrr_pnv6Tg==/****-yaSSiPa0EDhM9IIxINYQ0g==/base.apk!classes2.dex)d

versions

Flutter 2.5.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision ffb2ecea52 (9 months ago) • 2021-09-17 15:26:33 -0400
Engine • revision b3af521a05
Tools • Dart 2.14.2

Build error on android

Hi team,
I am using Flutter 2.5.0 and Dart 2.14.0, I have added adjust sdk by following all the steps for Android and IOS, for IOS its working fine but for Android, build is generated but crashed as soon as launched on device.

Error: Caused by: java.lang.IllegalStateException: The Crashlytics build ID is missing. This occurs when Crashlytics tooling is absent from your app's build configuration. Please review Crashlytics onboarding instructions and ensure you have a valid Crashlytics account.

Feature Request

Hi,

I am working on an app, where I can do most of the code in flutter/dart, but some things I have to do outside of flutter in native code. For example, because I am using certain third-party libraries, I can only access the push token outside of flutter reliably.

Now, it would be perfect for me, if you could set your dependency to the android adjust sdk as "api" instead of "implementation" in your build.gradle file. That way, I would be able to use the same Adjust SDK also in native Android code.

What do you think?

Bump and implement native SDKs to Android 4.26.+ and iOS 4.25.+

To be able to use the new features of the Adjust native SDKs, the flutter sdk implementation has to be bumped to the newest versions / the new features have to be implemented.

Doing this would allow:

iOS:

  • Added Facebook audience network ad revenue source string.
  • Added support for Apple Search Ads attribution with usage of AdServices.framework.
  • Added appTrackingAuthorizationStatus getter to Adjust instance to be able to get current app tracking status.
  • Added improved measurement consent management and third party sharing system.
  • Added possibility to get cost data information in attribution callback.
  • Added setNeedsCost: method to ADJConfig to indicate if cost data is needed in attribution callback (by default cost data will not be part of attribution callback if not enabled with this setter method).
  • Enabled position independent code generation.
  • Improved logging.
  • Addressed Xcode warnings regarding deprecated API usage.
  • Removed some obsolete and unused API.
  • Replaced malloc with more secure calloc calls (adjust/ios_sdk#432).

Android:

  • Added Facebook audience network ad revenue source string.
  • Changed minimum supported API version to 17 for webbridge, to avoid insecure JavaScript potential injections on lower API -
  • Moved reading of install referrer details to background thread after service connection establishes.
  • Added improved measurement consent management and third party sharing system.
  • Added possibility to get cost data information in attribution callback.
  • Added setNeedsCost(boolean) method to AdjustConfig to indicate if cost data is needed in attribution callback (by default cost data will not be part of attribution callback if not enabled with this setter method).
  • Added setPreinstallTrackingEnabled method to adjust_config.js to allow enabling of preintall tracking from web bridge plugin.
  • Switched from usage of deprecated getNetworkType() method to getDataNetworkType() on devices running Android 11 or later.

Deeplink is not working

Hello,
When I have tried the deep link directly and install app then i am able to receive deeplink, but when same deeplink put on facebook campaign, then i am not able to receive deeplink on app.

Can you please help me here?

iOS Deeplink configuration issue

Hello,

I have little confusion with iOS deeplink configuration. I've set up iOS app, verification has been passed. I've set up universal linking (got raw universal link) and add some test tracker url. This tracker generate url which use domain: app.adjust.com and when I'm opening it on iOS device, it redirect me to app store, even if app is already installed on device (in both: debug and release mode). When I manually change the domain to raw universal link, then it's working fine (I'm redirected directly to the app if it's installed), but only in debug mode. In release mode, after open web page, it shows "Url not found".

What did I overlook during the setup that causes this solution not to work? On Android whole flow it's working fine.

Unhandled Exception: MissingPluginException(No implementation found for method requestTrackingAuthorizationWithCompletionHandler on channel com.adjust.sdk/api

[ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: MissingPluginException(No implementation found for method requestTrackingAuthorizationWithCompletionHandler on channel com.adjust.sdk/api)
E/flutter ( 5174): #0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:175:7)
E/flutter ( 5174):
E/flutter ( 5174): #1 Adjust.requestTrackingAuthorizationWithCompletionHandler (package:adjust_sdk/adjust.dart:101:24)
E/flutter ( 5174):

Cannot build for iOS: unknown receiver 'AdjustSdk'

When trying to build for iOS we get this error from Xcode:

/.../ios/Runner/GeneratedPluginRegistrant.m:173:4: error: unknown receiver 'AdjustSdk'; did you mean 'ADJAdjustSdk'?
[AdjustSdk registerWithRegistrar:[registry registrarForPlugin:@"AdjustSdk"]];
^~~~~~~~~
ADJAdjustSdk
In module 'adjust_sdk' imported from /.../ios/Runner/GeneratedPluginRegistrant.m:14:
/.../build/ios/Debug-iphonesimulator/adjust_sdk/adjust_sdk.framework/Headers/AdjustSdk.h:11:12: note: 'ADJAdjustSdk' declared here
@interface ADJAdjustSdk : NSObject

How can we solve this issue?

Versions:
Adjust 4.23.0
Flutter 1.20.2

[Implementation Question] appWillOpenUrl usage

Dear Adjust Team,

I have a question about the implementation of deeplinks in our apps. In the documentation it is mentioned that to receive the attributions of a link we have to override some methods in the native controllers of each platform (such as in the MainActivity for Android/AppDelegate for iOS) and call the appWillOpenUrl method, but in the SDK From Flutter that method is also available, so we could call it directly from the Flutter side (from the functions that detect deeplinks) without needing the Native code on each platform, right? I currently have it on both sides for fear it won't upload correctly, but it seems unnecessary to me.

Deep link: Url not found

I can't get this basic functionality to work
We have created and registered our android app in Adjust Dashboard, set up intent filter in the app manifest
The android scheme works
image
The adjust deep link does not
image
Please advise

Android install success message discrepancy

Observed behaviour:
Adjust SDK on Android does not show Install tracked on calling Adjust.start(adjustConfig). (It does show Session tracked though)

Expected behaviour:
The SDK should display Install tracked like iOS or the docs should be updated to reflect the right success message for Android.

Or maybe there's a bug somewhere that is causing the Adjust SDK to initialise multiple times?

Adjust Logs for fresh install (Flutter debug mode)
W/Adjust  (13413): SANDBOX: Adjust is running in Sandbox mode. Use this setting for testing. Don't forget to set the environment to `production` before publishing!
W/Adjust  (13413): SANDBOX: Adjust is running in Sandbox mode. Use this setting for testing. Don't forget to set the environment to `production` before publishing!
D/Adjust  (13413): Attribution file not found
D/Adjust  (13413): Activity state file not found
D/Adjust  (13413): Session Callback parameters file not found
D/Adjust  (13413): Session Partner parameters file not found
D/Adjust  (13413): adjust_config.properties file not found in this app
I/Adjust  (13413): Google Play Services Advertising ID read correctly at start time
V/Adjust  (13413): Foreground timer configured to fire after 60.0 seconds of starting and cycles every 60.0 seconds
D/Adjust  (13413): Package queue file not found
V/Adjust  (13413): Foreground timer starting
V/Adjust  (13413): Subsession start
W/Adjust  (13413): Couldn't receive networkOperator string to read MCC
W/Adjust  (13413): Couldn't receive networkOperator string to read MNC
D/Adjust  (13413): Added package 1 (session)
V/Adjust  (13413): Path:      /session
V/Adjust  (13413): ClientSdk: [email protected]
V/Adjust  (13413): Parameters:
V/Adjust  (13413): 	android_uuid     d136b670-e05a-4b3c-835b-7e64c8bb9a15
V/Adjust  (13413): 	api_level        29
V/Adjust  (13413): 	app_token        {{redacted}}
V/Adjust  (13413): 	app_version      21.18.0
V/Adjust  (13413): 	attribution_deeplink 1
V/Adjust  (13413): 	connectivity_type 1
V/Adjust  (13413): 	country          US
V/Adjust  (13413): 	cpu_type         arm64-v8a
V/Adjust  (13413): 	created_at       2021-09-24T16:02:43.413Z+0200
V/Adjust  (13413): 	device_manufacturer Google
V/Adjust  (13413): 	device_name      Pixel 3
V/Adjust  (13413): 	device_type      phone
V/Adjust  (13413): 	display_height   2116
V/Adjust  (13413): 	display_width    1080
V/Adjust  (13413): 	environment      sandbox
V/Adjust  (13413): 	event_buffering_enabled 0
V/Adjust  (13413): 	gps_adid         f94025da-750a-4ace-bb9b-b1ca28ea76ab
V/Adjust  (13413): 	gps_adid_attempt 1
V/Adjust  (13413): 	gps_adid_src     service
V/Adjust  (13413): 	hardware_name    QQ2A.200305.002
V/Adjust  (13413): 	installed_at     2021-09-24T16:02:36.659Z+0200
V/Adjust  (13413): 	language         en
V/Adjust  (13413): 	needs_response_details 1
V/Adjust  (13413): 	network_type     0
V/Adjust  (13413): 	os_build         QQ2A.200305.002
V/Adjust  (13413): 	os_name          android
V/Adjust  (13413): 	os_version       10
V/Adjust  (13413): 	package_name     {{redacted}}
V/Adjust  (13413): 	screen_density   high
V/Adjust  (13413): 	screen_format    long
V/Adjust  (13413): 	screen_size      normal
V/Adjust  (13413): 	session_count    1
V/Adjust  (13413): 	tracking_enabled 1
V/Adjust  (13413): 	updated_at       2021-09-24T16:02:36.659Z+0200
D/Adjust  (13413): Wrote Package queue: [session]
D/Adjust  (13413): Package handler wrote 1 packages
D/Adjust  (13413): Making request to url : https://app.adjust.com/session
D/Adjust  (13413): Wrote Activity state: ec:0 sc:1 ssc:1 sl:0.0 ts:0.0 la:11:12:13 uuid:d136b670-e05a-4b3c-835b-7e64c8bb9a15
D/Adjust  (13413): InstallReferrer invoke method name: onInstallReferrerSetupFinished
D/Adjust  (13413): InstallReferrer invoke arg: 0
D/Adjust  (13413): installReferrer: utm_source=google-play&utm_medium=organic, clickTime: 0, installBeginTime: 0
D/Adjust  (13413): installVersion: null, clickTimeServer: -1, installBeginServer: -1, googlePlayInstant: false
D/Adjust  (13413): Install Referrer read successfully. Closing connection
D/Adjust  (13413): Install Referrer API connection closed
W/Adjust  (13413): Couldn't receive networkOperator string to read MCC
W/Adjust  (13413): Couldn't receive networkOperator string to read MNC
D/Adjust  (13413): Added sdk_click 1
V/Adjust  (13413): Path:      /sdk_click
V/Adjust  (13413): ClientSdk: [email protected]
V/Adjust  (13413): Parameters:
V/Adjust  (13413): 	android_uuid     d136b670-e05a-4b3c-835b-7e64c8bb9a15
V/Adjust  (13413): 	api_level        29
V/Adjust  (13413): 	app_token        {{redacted}}
V/Adjust  (13413): 	app_version      {{redacted}}
V/Adjust  (13413): 	attribution_deeplink 1
V/Adjust  (13413): 	connectivity_type 1
V/Adjust  (13413): 	country          US
V/Adjust  (13413): 	cpu_type         arm64-v8a
V/Adjust  (13413): 	created_at       2021-09-24T16:02:43.465Z+0200
V/Adjust  (13413): 	device_manufacturer Google
V/Adjust  (13413): 	device_name      Pixel 3
V/Adjust  (13413): 	device_type      phone
V/Adjust  (13413): 	display_height   2116
V/Adjust  (13413): 	display_width    1080
V/Adjust  (13413): 	environment      sandbox
V/Adjust  (13413): 	event_buffering_enabled 0
V/Adjust  (13413): 	gps_adid         f94025da-750a-4ace-bb9b-b1ca28ea76ab
V/Adjust  (13413): 	gps_adid_attempt 1
V/Adjust  (13413): 	gps_adid_src     service
V/Adjust  (13413): 	hardware_name    QQ2A.200305.002
V/Adjust  (13413): 	installed_at     2021-09-24T16:02:36.659Z+0200
V/Adjust  (13413): 	language         en
V/Adjust  (13413): 	needs_response_details 1
V/Adjust  (13413): 	network_type     0
V/Adjust  (13413): 	os_build         QQ2A.200305.002
V/Adjust  (13413): 	os_name          android
V/Adjust  (13413): 	os_version       10
V/Adjust  (13413): 	package_name     {{redacted}}
V/Adjust  (13413): 	referrer         utm_source=google-play&utm_medium=organic
V/Adjust  (13413): 	referrer_api     google
V/Adjust  (13413): 	screen_density   high
V/Adjust  (13413): 	screen_format    long
V/Adjust  (13413): 	screen_size      normal
V/Adjust  (13413): 	session_count    1
V/Adjust  (13413): 	session_length   0
V/Adjust  (13413): 	source           install_referrer
V/Adjust  (13413): 	subsession_count 1
V/Adjust  (13413): 	time_spent       0
V/Adjust  (13413): 	tracking_enabled 1
V/Adjust  (13413): 	updated_at       2021-09-24T16:02:36.659Z+0200
D/Adjust  (13413): Making request to url : https://app.adjust.com/sdk_click
W/System  (13413): Ignoring header If-None-Match because its value was null.
D/Adjust  (13413): Response string: {"app_token":"{{redacted}}","adid":"{{redacted}}","timestamp":"2021-09-24T14:02:43.287Z+0000","message":"Session tracked"}
I/Adjust  (13413): Response message: Session tracked
D/Adjust  (13413): Will not retry with current url strategy
D/Adjust  (13413): Got response in PackageHandler
D/Adjust  (13413): Finished tracking session
D/Adjust  (13413): Wrote Package queue: []
D/Adjust  (13413): Package handler wrote 0 packages
V/Adjust  (13413): Package handler can send
D/Adjust  (13413): Wrote Activity state: ec:0 sc:1 ssc:1 sl:0.0 ts:0.0 la:11:12:13 uuid:d136b670-e05a-4b3c-835b-7e64c8bb9a15
D/Adjust  (13413): Launching SessionResponse tasks
D/Adjust  (13413): Wrote Activity state: ec:0 sc:1 ssc:1 sl:0.0 ts:0.0 la:11:12:13 uuid:d136b670-e05a-4b3c-835b-7e64c8bb9a15
V/Adjust  (13413): Attribution timer canceled
V/Adjust  (13413): Attribution timer starting. Launching in 0.0 seconds
V/Adjust  (13413): Attribution timer fired
D/Adjust  (13413): Response string: {"app_token":"{{redacted}}","adid":"{{redacted}}","timestamp":"2021-09-24T14:02:43.304Z+0000","message":"Click tracked"}
I/Adjust  (13413): Response message: Click tracked
D/Adjust  (13413): Will not retry with current url strategy
D/Adjust  (13413): Wrote Activity state: ec:0 sc:1 ssc:1 sl:0.0 ts:0.0 la:11:12:13 uuid:d136b670-e05a-4b3c-835b-7e64c8bb9a15
V/Adjust  (13413): Path:      attribution
V/Adjust  (13413): ClientSdk: [email protected]
V/Adjust  (13413): Parameters:
V/Adjust  (13413): 	android_uuid     d136b670-e05a-4b3c-835b-7e64c8bb9a15
V/Adjust  (13413): 	api_level        29
V/Adjust  (13413): 	app_token        {{redacted}}
V/Adjust  (13413): 	app_version      {{redacted}}
V/Adjust  (13413): 	attribution_deeplink 1
V/Adjust  (13413): 	created_at       2021-09-24T16:02:43.624Z+0200
V/Adjust  (13413): 	device_name      Pixel 3
V/Adjust  (13413): 	device_type      phone
V/Adjust  (13413): 	environment      sandbox
V/Adjust  (13413): 	event_buffering_enabled 0
V/Adjust  (13413): 	gps_adid         f94025da-750a-4ace-bb9b-b1ca28ea76ab
V/Adjust  (13413): 	gps_adid_attempt 1
V/Adjust  (13413): 	gps_adid_src     service
V/Adjust  (13413): 	initiated_by     sdk
V/Adjust  (13413): 	needs_response_details 1
V/Adjust  (13413): 	os_name          android
V/Adjust  (13413): 	os_version       10
V/Adjust  (13413): 	package_name     {{redacted}}
V/Adjust  (13413): 	tracking_enabled 1
D/Adjust  (13413): Making request to url: https://app.adjust.com/attribution
D/Adjust  (13413): Wrote Activity state: ec:0 sc:1 ssc:1 sl:0.0 ts:0.0 la:11:12:13 uuid:d136b670-e05a-4b3c-835b-7e64c8bb9a15
D/Adjust  (13413): Response string: {"app_token":"{{redacted}}","adid":"{{redacted}}","timestamp":"2021-09-24T14:02:43.435Z+0000","message":"Attribution found","attribution":{"tracker_token":"{{redacted}}","tracker_name":"Organic","network":"Organic"}}
I/Adjust  (13413): Response message: Attribution found
D/Adjust  (13413): Will not retry with current url strategy
D/Adjust  (13413): Wrote Activity state: ec:0 sc:1 ssc:1 sl:0.0 ts:0.0 la:11:12:13 uuid:d136b670-e05a-4b3c-835b-7e64c8bb9a15
D/Adjust  (13413): Wrote Attribution: tt:tel3yqo tn:Organic net:Organic cam: adg: cre: cl: adid:8f00628c8b1a847d598bc01e0c36e682 ct: ca:NaN cc:
V/Adjust  (13413): Foreground timer fired
D/Adjust  (13413): Wrote Activity state: ec:0 sc:1 ssc:1 sl:60.0 ts:60.0 la:11:12:13 uuid:d136b670-e05a-4b3c-835b-7e64c8bb9a15

After a hot-restart, Adjust prints the following error: Adjust already initialized.

Is this the expected behaviour and the same as that on native Android?

Adjust logs after a hot restart ``` W/Adjust (13413): SANDBOX: Adjust is running in Sandbox mode. Use this setting for testing. Don't forget to set the environment to `production` before publishing! E/Adjust (13413): Adjust already initialized V/Adjust (13413): Foreground timer is already started V/Adjust (13413): Subsession start V/Adjust (13413): Started subsession 2 of session 1 D/Adjust (13413): Wrote Activity state: ec:0 sc:1 ssc:2 sl:419.5 ts:360.0 la:11:12:13 uuid:d136b670-e05a-4b3c-835b-7e64c8bb9a15 D/Adjust (13413): Should not try to read Install referrer V/Adjust (13413): Foreground timer fired D/Adjust (13413): Wrote Activity state: ec:0 sc:1 ssc:2 sl:420.0 ts:360.6 la:11:12:13 uuid:d136b670-e05a-4b3c-835b-7e64c8bb9a15 ```

CocoaPods could not find compatible versions for pod "Adjust"

Running a build on a Gitlab Runner after upgrading to 4.31.0 gives this warning:

    Resolving dependencies of `Podfile`
      CDN: trunk Relative path: CocoaPods-version.yml exists! Returning local because checking is only performed in repo update
      CDN: trunk Relative path: all_pods_versions_5_1_d.txt exists! Returning local because checking is only performed in repo update
      CDN: trunk Relative path: Specs/5/1/d/Adjust/4.30.0/Adjust.podspec.json exists! Returning local because checking is only performed in repo update
    [!] CocoaPods could not find compatible versions for pod "Adjust":
      In Podfile:
        adjust_sdk (from `.symlinks/plugins/adjust_sdk/ios`) was resolved to 4.31.0, which depends on
          Adjust (= 4.31.0)
    None of your spec sources contain a spec satisfying the dependency: `Adjust (= 4.31.0)`.
    You have either:
     * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
     * mistyped the name or version.
     * not added the source repo that hosts the Podspec to your Podfile.

Already tried these solutions people recommended online (mainly from StackOverflow):

Solution 1:

pod deintegrate
pod install

Solution 2:

pod install --repo-update

Solution 3:

Delete the podfile.lock
Reinstantiate it by pod install

Solution 4:

flutter pub clean 

flutter doctor -v

[✓] Flutter (Channel stable, 3.0.5, on macOS 11.6.3 20G415 darwin-x64, locale en-US)
    • Flutter version 3.0.5 at /usr/local/flutter_2.2.3
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision f1875d570e (3 weeks ago), 2022-07-13 11:24:16 -0700
    • Engine revision e85ea0e79c
    • Dart version 2.17.6
    • DevTools version 2.12.2
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at /Users/admin/Library/Android/sdk
    • Platform android-31, build-tools 30.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
    • All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 13.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.0
[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 4.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-x64     • macOS 11.6.3 20G415 darwin-x64
[✓] HTTP Host Availability
    • All required HTTP hosts are available
• No issues found!

flutter build ipa

Running "flutter pub get" in [redacted]...                       2,528ms
Archiving [redacted]...
Automatically signing iOS for device deployment using specified development team in Xcode project: [redacted]
Running pod install...                                           2,143ms
CocoaPods' output:
↳
      Preparing
    Analyzing dependencies
    Inspecting targets to integrate
      Using `ARCHS` setting to build architectures of target `Pods-Runner`: (``)
    Fetching external sources
    -> Fetching podspec for `Flutter` from `Flutter`
    -> Fetching podspec for `adjust_sdk` from `.symlinks/plugins/adjust_sdk/ios`
    -> Fetching podspec for `audio_session` from `.symlinks/plugins/audio_session/ios`
    -> Fetching podspec for `device_info_plus` from `.symlinks/plugins/device_info_plus/ios`
    -> Fetching podspec for `flutter_midi` from `.symlinks/plugins/flutter_midi/ios`
    -> Fetching podspec for `flutter_sequencer` from `.symlinks/plugins/flutter_sequencer/ios`
    -> Fetching podspec for `in_app_purchase_storekit` from `.symlinks/plugins/in_app_purchase_storekit/ios`
    -> Fetching podspec for `integration_test` from `.symlinks/plugins/integration_test/ios`
    -> Fetching podspec for `just_audio` from `.symlinks/plugins/just_audio/ios`
    -> Fetching podspec for `package_info_plus` from `.symlinks/plugins/package_info_plus/ios`
    -> Fetching podspec for `path_provider_ios` from `.symlinks/plugins/path_provider_ios/ios`
    -> Fetching podspec for `shared_preferences_ios` from `.symlinks/plugins/shared_preferences_ios/ios`
    -> Fetching podspec for `store_redirect` from `.symlinks/plugins/store_redirect/ios`
    -> Fetching podspec for `url_launcher_ios` from `.symlinks/plugins/url_launcher_ios/ios`
    -> Fetching podspec for `video_player_avfoundation` from `.symlinks/plugins/video_player_avfoundation/ios`
    -> Fetching podspec for `wakelock` from `.symlinks/plugins/wakelock/ios`
    Resolving dependencies of `Podfile`
      CDN: trunk Relative path: CocoaPods-version.yml exists! Returning local because checking is only performed in repo update
      CDN: trunk Relative path: all_pods_versions_5_1_d.txt exists! Returning local because checking is only performed in repo update
      CDN: trunk Relative path: Specs/5/1/d/Adjust/4.30.0/Adjust.podspec.json exists! Returning local because checking is only performed in repo update
    [!] CocoaPods could not find compatible versions for pod "Adjust":
      In Podfile:
        adjust_sdk (from `.symlinks/plugins/adjust_sdk/ios`) was resolved to 4.31.0, which depends on
          Adjust (= 4.31.0)
    None of your spec sources contain a spec satisfying the dependency: `Adjust (= 4.31.0)`.
    You have either:
     * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
     * mistyped the name or version.
     * not added the source repo that hosts the Podspec to your Podfile.
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:317:in `raise_error_unless_state'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:299:in `block in unwind_for_conflict'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:297:in `tap'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:297:in `unwind_for_conflict'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:257:in `process_topmost_state'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/molinillo-0.8.0/lib/molinillo/resolution.rb:182:in `resolve'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/molinillo-0.8.0/lib/molinillo/resolver.rb:43:in `resolve'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/resolver.rb:94:in `resolve'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/installer/analyzer.rb:1078:in `block in resolve_dependencies'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/user_interface.rb:64:in `section'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/installer/analyzer.rb:10[76]([redacted]):in `resolve_dependencies'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/installer/analyzer.rb:124:in `analyze'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/installer.rb:416:in `analyze'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/installer.rb:241:in `block in resolve_dependencies'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/user_interface.rb:64:in `section'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/installer.rb:240:in `resolve_dependencies'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/installer.rb:161:in `install!'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/command/install.rb:52:in `run'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/claide-1.0.3/lib/claide/command.rb:334:in `run'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/lib/cocoapods/command.rb:52:in `run'
    /Users/admin/.rvm/rubies/ruby-2.7.2/lib/ruby/gems/2.7.0/gems/cocoapods-1.11.0/bin/pod:55:in `<top (required)>'
    /Users/admin/.rvm/rubies/ruby-2.7.2/bin/pod:23:in `load'
    /Users/admin/.rvm/rubies/ruby-2.7.2/bin/pod:23:in `<main>'
    /Users/admin/.rvm/gems/ruby-2.7.2/bin/ruby_executable_hooks:22:in `eval'
    /Users/admin/.rvm/gems/ruby-2.7.2/bin/ruby_executable_hooks:22:in `<main>'
Error: CocoaPods's specs repository is too out-of-date to satisfy dependencies.
To update the CocoaPods specs, run:
  pod repo update
Error running pod install

Web unsupported

adjust_sdk does not seem to support Flutter web at this moment.

It would be very benificial if support for that would be added, especially because https://github.com/adjust/web_sdk already exists 👌🏽
Adding it seems like it would be trivial.

For now, we will have to manually call the JavaScript SDK in Flutter web. This has to be done alongside calling the Flutter SDK on mobile, which means that we need an extra layer of abstraction for conditional imports.

Android build FAILURE: Build failed with an exception.

When trying to build on Android using flutter run, I am running into the following issue using adjust_sdk: ^4.28.0:

Building plugin adjust_sdk...
Running Gradle task 'assembleAarRelease'...


FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':compileReleaseAidl'.
> SDK location not found. Define location with an ANDROID_SDK_ROOT environment variable or by setting the sdk.dir path in your project's local properties file at 'AppData\Local\Pub\Cache\hosted\pub.dartlang.org\adjust_sdk-4.28.0\android\local.properties'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s

Exception: The plugin adjust_sdk could not be built due to the issue above.

I was not able to solve this by including the sdk.dir property in the cached package nor the SDK root variable.

Not able to get info from attributionCallback in iOS side

Hello,

I'm trying to receive additional info from the tracker link (namely campaign and clickLabel) in adjustConfig.attributionCallback in our Flutter mobile app. I have achieved this on the Android side, but I'm not getting any data in the iOS app after opening and downloading it from AppStore with adjust tracker link (the link is the same as for the Android app).
If I understood correctly from your Flutter documentation, I don't need to set up any additional settings on the native iOS side of the app to make it work. Please, correct me if I'm wrong.
What can the problem be with my iOS app, which is not allowing me to collect additional info in attribution callback?
Should I add some of the following frameworks from this list to make it work https://github.com/adjust/flutter_sdk#ios-link-additional-frameworks?

My Flutter code is:

AdjustConfig config = new AdjustConfig(ADJUST_APP_TOKEN, ADJUST_ENVIRONMENT);
config.logLevel = AdjustLogLevel.debug;
config.attributionCallback = (AdjustAttribution attributionChangedData) {
    if (attributionChangedData.campaign != null) {
        StorageService.setString(TRACKER_CAMPAIGN_KEY, attributionChangedData.campaign);
    }
    if (attributionChangedData.clickLabel != null) {
        StorageService.setString(TRACKER_LABEL_KEY, attributionChangedData.clickLabel);
    }
};
Adjust.start(config);

Does not return android data when app is closed

I configured all android and ios steps in flutter and native, in ios the data is returned to flutter when app is closed or opened with invokeMethod. But on android it only returns when the app is open.

Flutter:

  static const platform = MethodChannel('flutter.native/deeplink');
  
  @override
  void initState() {
    super.initState();
    
    WidgetsBinding.instance?.addObserver(this);
    _initAdjust();
    
    platform.setMethodCallHandler((call) async {
      await Future.delayed(const Duration(seconds: 10));
    
      switch (call.method) {
        case 'getDeepLinkData':
          print('arguments: ${call.arguments.toString()}');
          print('method: ${call.method}');
          log('arguments: ${call.arguments}');
          //TODO -> DO SOMETHING
          break;
      }
    });

  }

  void _initAdjust() {
    final AdjustConfig adjustConfig =
    AdjustConfig('codeAdjust', AdjustEnvironment.production);
    adjustConfig.launchDeferredDeeplink = true;

    adjustConfig.logLevel = AdjustLogLevel.verbose;
    adjustConfig.deferredDeeplinkCallback = (String? uri) {
      print('[Adjust]: Received deferred deeplink: ' + uri.toString());
    };
    adjustConfig.attributionCallback = (AdjustAttribution attribution) {
      print('attribution callback');
    };
    Adjust.start(adjustConfig);
  }

Android:

class MainActivity : FlutterActivity() {

  private val CHANNEL = "flutter.native/deeplink"

  override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
      super.configureFlutterEngine(flutterEngine)
      GeneratedPluginRegistrant.registerWith(flutterEngine)
  }

  override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      val intent = intent
      val data = intent.data
      AdjustSdk.appWillOpenUrl(data, this);
          Log.e("Url", data.toString())
          MethodChannel(
              flutterEngine?.dartExecutor?.binaryMessenger,
              CHANNEL
          ).invokeMethod("getDeepLinkData", data.toString())
      
  }

  override fun onNewIntent(intent: Intent) {
      super.onNewIntent(intent)
      val data = intent.data
      AdjustSdk.appWillOpenUrl(data, this);
          Log.e("Url", data.toString())
          MethodChannel(
              flutterEngine?.dartExecutor?.binaryMessenger,
              CHANNEL
          ).invokeMethod("getDeepLinkData", data.toString())

  }

}

Crashed on iOS devices

Hello, there!

Currently I am using adjust_sdk package to implement the adjust sdk into our flutter application.

It is working well on android.

But on some iOS devices, just crashed.
iOS 14.2 (iPhone11)

Sdk is not comfortable for iOS 14.2?

Looking forward to hearing from anyone to fix this issue.

Thanks

ARC semantics issue & ARC restriction

image

Hi folks,

I got an issue when building app for IOS 15.0
I was using both adjust_sdk: ^4.29.0 and adjust_sdk: ^4.29.1 but this issue still remains.

Here is my environment:
Flutter version: 2.5.1
IOS version: 15.0
Simulator version: Version 13.0 (970), Simulator kit 612, CoreSimulator 776.3
Xcode: Version 13.0 (13A233)
MacOS: Big Sur 11.6
Mac: MBP 13-inch, M1 chip

Fatal Exception: java.lang.NullPointerException

Since the integration of V2 Android Plugin (efa0692) we get some crashes in our Android App:

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void io.flutter.plugin.common.MethodChannel.invokeMethod(java.lang.String, java.lang.Object)' on a null object reference
       at com.adjust.sdk.flutter.AdjustSdk$1.onAttributionChanged(AdjustSdk.java:10)
       at com.adjust.sdk.ActivityHandler$40.run(ActivityHandler.java:3)
       at android.os.Handler.handleCallback(Handler.java:883)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loop(Looper.java:237)
       at android.app.ActivityThread.main(ActivityThread.java:8167)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)

` Could not build module 'adjust_sdk'`

I can't build ios project after install Adjust.

Could not build module 'adjust_sdk'

Include of non-modular header inside framework module 'adjust_sdk.ADJSdkDelegate': '/Users/hdhuu/Downloads/metro-mapp/ios/Pods/Headers/Public/Adjust/Adjust.h'

Screen Shot 2020-07-30 at 09 08 33

You should not call registerWith more than once!

V/Adjust  (11763): Foreground timer suspended with 53.2 seconds left
V/Adjust  (11763): Subsession end
D/Adjust  (11763): Wrote Activity state: ec:0 sc:1 ssc:1 sl:6.7 ts:6.7 la:11:12:13 uuid:a31b665f-5490-421e-80ed-db78f73c2f51
D/ViewContentFactory(11763): initViewContentFetcherClass
I/ContentCatcher(11763): ViewContentFetcher : ViewContentFetcher
D/ViewContentFactory(11763): createInterceptor took 0ms
E/AdjustBridge(11763): You should not call registerWith more than once!
E/flutter (11763): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method addSessionCallbackParameter on channel com.adjust.sdk/api)
E/flutter (11763): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7)
E/flutter (11763): <asynchronous suspension>
E/flutter (11763): #1      Adjust.addSessionCallbackParameter (package:adjust_sdk/adjust.dart:114:14)
E/flutter (11763): #2      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:200:12)
E/flutter (11763): <asynchronous suspension>
E/flutter (11763): #3      _AdjustApp.initState (package:fake_adjust_example/main.dart:38:5)
E/flutter (11763): #4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)
E/flutter (11763): #5      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #6      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #7      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #8      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #9      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #10     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #11     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #12     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #13     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #14     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #15     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #16     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #17     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #18     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #19     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #20     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #21     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #22     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #23     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #24     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #25     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #26     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #27     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #28     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #29     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #30     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #31     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #32     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter (11763): #33     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #34     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #35     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #36     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #37     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #38     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #39     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #40     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #41     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #42     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #43     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #44     ComponentElement._firstBuild (package:flutter/src/widgets/fr
E/flutter (11763): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method addSessionCallbackParameter on channel com.adjust.sdk/api)
E/flutter (11763): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7)
E/flutter (11763): <asynchronous suspension>
E/flutter (11763): #1      Adjust.addSessionCallbackParameter (package:adjust_sdk/adjust.dart:114:14)
E/flutter (11763): #2      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:201:12)
E/flutter (11763): #3      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)
E/flutter (11763): #4      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:66:34)
E/flutter (11763): #5      _AdjustApp.initState (package:fake_adjust_example/main.dart:38:5)
E/flutter (11763): #6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)
E/flutter (11763): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #10     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #15     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #19     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #28     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #33     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #34     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter (11763): #35     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #39     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #40     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #41     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #45     El
E/flutter (11763): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method addSessionPartnerParameter on channel com.adjust.sdk/api)
E/flutter (11763): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7)
E/flutter (11763): <asynchronous suspension>
E/flutter (11763): #1      Adjust.addSessionPartnerParameter (package:adjust_sdk/adjust.dart:118:14)
E/flutter (11763): #2      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:204:12)
E/flutter (11763): #3      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)
E/flutter (11763): #4      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:66:34)
E/flutter (11763): #5      _AdjustApp.initState (package:fake_adjust_example/main.dart:38:5)
E/flutter (11763): #6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)
E/flutter (11763): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #10     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #15     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #19     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #28     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #33     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #34     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter (11763): #35     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #39     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #40     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #41     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #45     Elem
E/flutter (11763): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method addSessionPartnerParameter on channel com.adjust.sdk/api)
E/flutter (11763): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7)
E/flutter (11763): <asynchronous suspension>
E/flutter (11763): #1      Adjust.addSessionPartnerParameter (package:adjust_sdk/adjust.dart:118:14)
E/flutter (11763): #2      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:205:12)
E/flutter (11763): #3      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)
E/flutter (11763): #4      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:66:34)
E/flutter (11763): #5      _AdjustApp.initState (package:fake_adjust_example/main.dart:38:5)
E/flutter (11763): #6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)
E/flutter (11763): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #10     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #15     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #19     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #28     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #33     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #34     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter (11763): #35     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #39     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #40     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #41     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #45     Elem
E/flutter (11763): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method removeSessionCallbackParameter on channel com.adjust.sdk/api)
E/flutter (11763): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7)
E/flutter (11763): <asynchronous suspension>
E/flutter (11763): #1      Adjust.removeSessionCallbackParameter (package:adjust_sdk/adjust.dart:122:14)
E/flutter (11763): #2      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:208:12)
E/flutter (11763): #3      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)
E/flutter (11763): #4      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:66:34)
E/flutter (11763): #5      _AdjustApp.initState (package:fake_adjust_example/main.dart:38:5)
E/flutter (11763): #6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)
E/flutter (11763): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #10     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #15     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #19     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #28     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #33     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #34     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter (11763): #35     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #39     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #40     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #41     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #45 
E/flutter (11763): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method removeSessionPartnerParameter on channel com.adjust.sdk/api)
E/flutter (11763): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7)
E/flutter (11763): <asynchronous suspension>
E/flutter (11763): #1      Adjust.removeSessionPartnerParameter (package:adjust_sdk/adjust.dart:126:14)
E/flutter (11763): #2      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:209:12)
E/flutter (11763): #3      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)
E/flutter (11763): #4      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:66:34)
E/flutter (11763): #5      _AdjustApp.initState (package:fake_adjust_example/main.dart:38:5)
E/flutter (11763): #6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)
E/flutter (11763): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #10     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #15     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #19     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #28     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #33     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #34     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter (11763): #35     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #39     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #40     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #41     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #45   
E/flutter (11763): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method resetSessionCallbackParameters on channel com.adjust.sdk/api)
E/flutter (11763): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7)
E/flutter (11763): <asynchronous suspension>
E/flutter (11763): #1      Adjust.resetSessionCallbackParameters (package:adjust_sdk/adjust.dart:130:14)
E/flutter (11763): #2      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:212:12)
E/flutter (11763): #3      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)
E/flutter (11763): #4      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:66:34)
E/flutter (11763): #5      _AdjustApp.initState (package:fake_adjust_example/main.dart:38:5)
E/flutter (11763): #6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)
E/flutter (11763): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #10     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #15     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #19     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #28     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #33     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #34     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter (11763): #35     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #39     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #40     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #41     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #45 
E/flutter (11763): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method resetSessionPartnerParameters on channel com.adjust.sdk/api)
E/flutter (11763): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7)
E/flutter (11763): <asynchronous suspension>
E/flutter (11763): #1      Adjust.resetSessionPartnerParameters (package:adjust_sdk/adjust.dart:134:14)
E/flutter (11763): #2      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:215:12)
E/flutter (11763): #3      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)
E/flutter (11763): #4      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:66:34)
E/flutter (11763): #5      _AdjustApp.initState (package:fake_adjust_example/main.dart:38:5)
E/flutter (11763): #6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)
E/flutter (11763): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #10     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #15     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #19     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #28     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #33     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #34     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter (11763): #35     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #39     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #40     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #41     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #45   
E/flutter (11763): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method start on channel com.adjust.sdk/api)
E/flutter (11763): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:300:7)
E/flutter (11763): <asynchronous suspension>
E/flutter (11763): #1      Adjust.start (package:adjust_sdk/adjust.dart:23:14)
E/flutter (11763): #2      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:218:12)
E/flutter (11763): #3      _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)
E/flutter (11763): #4      _AdjustApp._initPlatformState (package:fake_adjust_example/main.dart:66:34)
E/flutter (11763): #5      _AdjustApp.initState (package:fake_adjust_example/main.dart:38:5)
E/flutter (11763): #6      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)
E/flutter (11763): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #10     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #11     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #12     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #13     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #14     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #15     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #16     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #19     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #28     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter (11763): #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #33     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #34     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter (11763): #35     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #38     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #39     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter (11763): #40     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter (11763): #41     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter (11763): #42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter (11763): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter (11763): #44     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter (11763): #45     Element.rebuild (package:flutter/src/widgets/fr
V/Adjust  (11763): Foreground timer starting
V/Adjust  (11763): Subsession start
V/Adjust  (11763): Started subsession 2 of session 1
D/Adjust  (11763): Wrote Activity state: ec:0 sc:1 ssc:2 sl:58.3 ts:6.7 la:11:12:13 uuid:a31b665f-5490-421e-80ed-db78f73c2f51
D/Adjust  (11763): Install referrer has already been read
E/BpSurfaceComposerClient(11763): Failed to transact (-1)
E/BpSurfaceComposerClient(11763): Failed to transact (-1)
V/Adjust  (11763): Foreground timer fired
D/Adjust  (11763): Wrote Activity state: ec:0 sc:1 ssc:2 sl:111.6 ts:60.0 la:11:12:13 uuid:a31b665f-5490-421e-80ed-db78f73c2f51
V/Adjust  (11763): Foreground timer fired
D/Adjust  (11763): Wrote Activity state: ec:0 sc:1 ssc:2 sl:171.6 ts:120.0 la:11:12:13 uuid:a31b665f-5490-421e-80ed-db78f73c2f51

App not sending install tracking in Production, works in Sandbox

Environment:

  • Flutter v1.22.6
  • Flutter Adjust sdk v4.28.0
  • Adjust has uninstall event add-on and sdk signature activated
  • build.gradle dependencies version
    dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.google.firebase:firebase-analytics:17.2.2'
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.google.android.gms:play-services-analytics:17.0.0'
    implementation 'com.android.installreferrer:installreferrer:1.0'
    }
  • AppSealing v2.22.0

On local, we can track install data to Sandbox and Production well.
But on after the release workflow in CI/CD, Adjust not sending install data to production.

Code to generate the release build below :
flutter build appbundle --release --no-shrink --build-name=$(yq e .versionProd pubspec.yaml) --build-number=$PROJECT_BUILD_NUMBER --obfuscate --split-debug-info=obfuscate/symbols

Our hypothesis that the obfuscate symbol here creating problem for Adjust SDK to work properly.
On https://github.com/adjust/flutter_sdk, we read there is step for proguard to exclude Adjust SDK from being obfuscated, but we don't find specific instruction for flutter obfuscate.

Please confirm our hypothesis or if there's other watchout for the release build.

Crashed on Android devices

After adding sdk giving below error. version 4.29.1

Crashlytics log:

Fatal Exception: java.lang.IllegalAccessError: Illegal class access: 'androidx.room.h' attempting to access 'androidx.work.impl.WorkDatabase_Impl$a' (declaration of 'androidx.room.h' appears in base.apk)
       at androidx.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:97)
       at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onUpgrade(FrameworkSQLiteOpenHelper.java:177)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:416)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:316)
       at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:145)
       at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:106)
       at androidx.room.RoomDatabase.inTransaction(RoomDatabase.java:476)
       at androidx.room.RoomDatabase.assertNotSuspendingTransaction(RoomDatabase.java:281)
       at androidx.work.impl.model.SystemIdInfoDao_Impl.getWorkSpecIds(SystemIdInfoDao_Impl.java:120)
       at androidx.work.impl.background.systemjob.SystemJobScheduler.reconcileJobs(SystemJobScheduler.java:298)
       at androidx.work.impl.utils.ForceStopRunnable.cleanUp(ForceStopRunnable.java:249)
       at androidx.work.impl.utils.ForceStopRunnable.forceStopRunnable(ForceStopRunnable.java:215)
       at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:110)
       at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
       at java.lang.Thread.run(Thread.java:923)

User advertisement id is not registered in Adjust

A few of our user advertisement id is not registered in adjust.
When we send a s2s event request to adjust with the gps_adid of those user it will return 404 device not found error, even though those user already using our latest app version that has Adjust sdk in it.

We have already called onResume and onPause in didChangeAppLifecycleState function:

@override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    switch (state) {
      case AppLifecycleState.paused:
        Adjust.onPause();
        _bloc.dispatch(HomeEventGoingBackground());
        break;
      case AppLifecycleState.resumed:
        Adjust.onResume();
        _bloc.dispatch(HomeEventGoingForeground());
        break;
      default:
        break;
    }
    super.didChangeAppLifecycleState(state);
  }

The code works fine for nearly all of our users, only a few users are affected by this problem.
Some users gps_adid that returned 404 error before get a 200 ok response after a few hours, but there is also some users gps_adid that get 404 from the first time we integrated Adjust sdk up until now (around 7 days).
Currently we doesn't have any access to device or account that has this problem so we can't reproduce the problem and give you the logs.

We already know how to detect if the user is not registered via checking
Adjust.getAttribution() != null
so we can dodge s2s request that will give errors, but our team wants no data to be lost and all users behavior to be registered.

can you please help us with this problem?

[Android] Trying to retrieve AdvertiserId on UI thread

Version 4.29.0 introduced getting AdvertiserId on UI thread and it gives now a warning:

D/Adjust  ( 5881): GoogleAdId being read in the foreground
I/flutter ( 5881): Report log: Uncaught error: MissingPluginException(No implementation found for method getIdfa on channel com.adjust.sdk/api)
I/flutter ( 5881): Error: MissingPluginException(No implementation found for method getIdfa on channel com.adjust.sdk/api)
I/flutter ( 5881): StackTrace: #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:7)
I/flutter ( 5881): <asynchronous suspension>
I/flutter ( 5881): #1      Adjust.getIdfa (package:adjust_sdk/adjust.dart:85:26)
I/flutter ( 5881): <asynchronous suspension>
I/flutter ( 5881): 
I/flutter ( 5881): Message: null
I/flutter ( 5881): 
D/Adjust  ( 5881): GoogleAdId read 395164ba-2e46-452e-89f2-c4dc430c04f8
I/flutter ( 5881): Report log: Caught error: MissingPluginException(No implementation found for method getIdfa on channel com.adjust.sdk/api)
I/flutter ( 5881): Error: MissingPluginException(No implementation found for method getIdfa on channel com.adjust.sdk/api)
I/flutter ( 5881): StackTrace: #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:7)
I/flutter ( 5881): <asynchronous suspension>
I/flutter ( 5881): #1      Adjust.getIdfa (package:adjust_sdk/adjust.dart:85:26)
I/flutter ( 5881): <asynchronous suspension>
I/flutter ( 5881): 
I/flutter ( 5881): Message: Could not fetch AdvertiserId

This message did not appear in 4.28.0

Not receiving deferredDeeplinkCallback

Adjust parameter shows the log of Url to parse and deeplink parameter with a successful deeplink URL. How may I get those values? Not receiving any log at deferredDeeplinkCallback listener.

App closes when opening cameras and initializing external SDKs

The Adjust SDK is preventing some important functions from working in the Uzzo Pay app. QR Code Readers and Barcode Scanner are being prevented from accessing the device's native camera and also from accessing remote machine learning libraries. The app also has an integration with the Zendesk SDK and when we implement the Adjust SDK, Zendesk crashes and cannot run. In all the cases we've identified, there's a problem initializing the functions and the app closes. The packages and SDKs installed in the application were working normally and started to fail after the implementation of the Adjust SDK.

  • SDK error

I/TetheringManager( 1006): registerTetheringEventCallback:com.therabank.uzzo W/.therabank.uzz( 1006): Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed) W/.therabank.uzz( 1006): Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed) I/FloatingActionButton( 1006): Setting a custom background is not supported. D/AndroidRuntime( 1006): Shutting down VM E/AndroidRuntime( 1006): FATAL EXCEPTION: main E/AndroidRuntime( 1006): Process: com.therabank.uzzo, PID: 1006 E/AndroidRuntime( 1006): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.therabank.uzzo/zendesk.support.guide.HelpCenterActivity}: java.lang.IllegalArgumentException: Unable to create call adapter for interface m.g E/AndroidRuntime( 1006): for method SdkSettingsService.getSettings E/AndroidRuntime( 1006): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) E/AndroidRuntime( 1006): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) E/AndroidRuntime( 1006): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) E/AndroidRuntime( 1006): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) E/AndroidRuntime( 1006): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) E/AndroidRuntime( 1006): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) E/AndroidRuntime( 1006): at android.os.Handler.dispatchMessage(Handler.java:106) E/AndroidRuntime( 1006): at android.os.Looper.loop(Looper.java:223)

  • Error with cameras

W/Gralloc4( 1843): allocator 3.x is not supported D/q ( 1843): resume() D/l ( 1843): Opening camera W/CameraBase( 1843): An error occurred while connecting to camera 0: Status(-8, EX_SERVICE_SPECIFIC): '1: validateClientPermissionsLocked:1165: Caller "com.therabank.uzzo" (PID 10161, UID 1843) cannot open camera "0" without camera permission' E/l ( 1843): Failed to open camera E/l ( 1843): java.lang.RuntimeException: Fail to connect to camera service E/l ( 1843): at android.hardware.Camera.<init>(Camera.java:557) E/l ( 1843): at android.hardware.Camera.open(Camera.java:402) E/l ( 1843): at d.e.e.s.a.m.b.a.b(:83) E/l ( 1843): at com.journeyapps.barcodescanner.M.n.l(:142) E/l ( 1843): at com.journeyapps.barcodescanner.M.h.run(:200) E/l ( 1843): at android.os.Handler.handleCallback(Handler.java:938) E/l ( 1843): at android.os.Handler.dispatchMessage(Handler.java:99) E/l ( 1843): at android.os.Looper.loop(Looper.java:223) E/l ( 1843): at android.os.HandlerThread.run(HandlerThread.java:67) D/l ( 1843): Configuring camera E/l ( 1843): Failed to configure camera E/l ( 1843): java.lang.RuntimeException: Camera not open E/l ( 1843): at com.journeyapps.barcodescanner.M.n.e(:161) E/l ( 1843): at com.journeyapps.barcodescanner.M.i.run(:213) E/l ( 1843): at android.os.Handler.handleCallback(Handler.java:938) E/l ( 1843): at android.os.Handler.dispatchMessage(Handler.java:99) E/l ( 1843): at android.os.Looper.loop(Looper.java:223) E/l ( 1843): at com.journeyapps.barcodescanner.M.i.run(:213) E/l ( 1843): at android.os.Handler.handleCallback(Handler.java:938) E/l ( 1843): at android.os.Handler.dispatchMessage(Handler.java:99) E/l ( 1843): at android.os.Looper.loop(Looper.java:223) E/l ( 1843): at android.os.HandlerThread.run(HandlerThread.java:67) D/q ( 1843): pause() D/l ( 1843): Closing camera D/q ( 1843): resume() D/l ( 1843): Opening camera D/l ( 1843): Configuring camera I/n ( 1843): Camera Display Orientation: 90 I/n ( 1843): Initial camera parameters: preview-size=1280x720;video-size=1280x720;preferred-preview-size-for-video=1280x720;preview-size-values=640x480,352x288,320x240,176x144,1280x720,1280x960;video-size-values=640x480,352x288,320x240,176x144,1280x720;preview-format=yuv420sp;preview-format-values=rgba8888,yuv420p,yuv420sp;preview-frame-rate=30;preview-fps-range=5000,30000;preview-fps-range-values=(5000,30000),(15000,30000),(15000,15000),(30000,30000);preview-frame-rate-values=30,15;picture-size=640x480;picture-size-values=640x480,352x288,320x240,176x144,1280x720,1280x960;picture-format=jpeg;picture-format-values=jpeg;jpeg-thumbnail-width=320;jpeg-thumbnail-height=240;jpeg-thumbnail-size-values=0x0,160x120,320x240;jpeg-thumbnail-quality=90;jpeg-quality=90;rotation=0;whitebalance=auto;whitebalance-values=auto,incandescent,fluorescent,daylight,shade;effect=none;effect-values=none;antibanding=auto;antibanding-values=off,auto;scene-mode=auto;scene-mode-values=auto,;focus-mode=fixed;focus-mode-values=fixed;max-num-focus-areas=0;focus-areas=(0,0,0,0,0);focal-length=5;horizontal-view-angle=35.4893;vertical-view-angle=26.9915;exposure-compensation=0;max-exposure-compensation=9;min-exposure-compensation=-9;exposure-compensation-step=0.333333;auto-exposure-lock-supported=false;auto-whitebalance-lock-supported=false;max-num-metering-areas=1;metering-areas=(0,0,0,0,0);zoom=0;max-zoom=99;zoom-ratios=100,109,118,127,136,145,154,163,172,181,190,200,209,218,227,236,245,254,263,272,281,290,299,309,318,327,336,345,354,363,372,381,390,399,409,418,427,436,445,454,463,472,481,490,499,509,518,527,536,545,554,563,572,581,590,599,609,618,627,636,645,654,663,672,681,690,699,709,718,727,736,745,754,763,772,781,790,799,809,818,827,836,845,854,863,872,881,890,899,909,918,927,936,945,954,963,972,981,990,999;zoom-supported=true;smooth-zoom-supported=false;focus-distances=Infinity,Infinity,Infinity;max-num-detected-faces-hw=0;max-num-detected-faces-sw=0;video-frame-format=android-opaque;recording-hint=false;video-snapshot-supported=true;video-stabilization=false;video-stabilization-supported=false I/CameraConfiguration( 1843): Requesting focus mode value from among: [auto] I/CameraConfiguration( 1843): Supported focus mode values: [fixed] I/CameraConfiguration( 1843): No supported values match I/CameraConfiguration( 1843): Requesting focus mode value from among: [macro, edof] I/CameraConfiguration( 1843): Supported focus mode values: [fixed] I/CameraConfiguration( 1843): No supported values match I/CameraConfiguration( 1843): Requesting flash mode value from among: [off] I/CameraConfiguration( 1843): Supported flash mode values: null I/CameraConfiguration( 1843): No supported values match I/y ( 1843): Viewfinder size: 2504x1440 I/y ( 1843): Preview in order of preference: [1280x720, 1280x960, 640x480, 352x288, 320x240, 176x144] I/n ( 1843): Final camera parameters: video-size=1280x720;preferred-preview-size-for-video=1280x720;preview-size-values=640x480,352x288,320x240,176x144,1280x720,1280x960;video-size-values=640x480,352x288,320x240,176x144,1280x720;preview-format=yuv420sp;preview-format-values=rgba8888,yuv420p,yuv420sp;preview-frame-rate=30;preview-fps-range=5000,30000;preview-fps-range-values=(5000,30000),(15000,30000),(15000,15000),(30000,30000);preview-frame-rate-values=30,15;picture-size=640x480;picture-size-values=640x480,352x288,320x240,176x144,1280x720,1280x960;picture-format=jpeg;picture-format-values=jpeg;jpeg-thumbnail-width=320;jpeg-thumbnail-height=240;jpeg-thumbnail-size-values=0x0,160x120,320x240;jpeg-thumbnail-quality=90;jpeg-quality=90;rotation=0;whitebalance=auto;whitebalance-values=auto,incandescent,fluorescent,daylight,shade;effect=none;effect-values=none;antibanding=auto;antibanding-values=off,auto;scene-mode=auto;scene-mode-values=auto,;focus-mode=fixed;focus-mode-values=fixed;max-num-focus-areas=0;focus-areas=(0,0,0,0,0);focal-length=5;horizontal-view-angle=35.4893;vertical-view-angle=26.9915;exposure-compensation=0;max-exposure-compensation=9;min-exposure-compensation=-9;exposure-compensation-step=0.333333;auto-exposure-lock-supported=false;auto-whitebalance-lock-supported=false;max-num-metering-areas=1;metering-areas=(0,0,0,0,0);zoom=0;max-zoom=99;zoom-ratios=100,109,118,127,136,145,154,163,172,181,190,200,209,218,227,236,245,254,263,272,281,290,299,309,318,327,336,345,354,363,372,381,390,399,409,418,427,436,445,454,463,472,481,490,499,509,518,527,536,545,554,563,572,581,590,599,609,618,627,636,645,654,663,672,681,690,699,709,718,727,736,745,754,763,772,781,790,799,809,818,827,836,845,854,863,872,881,890,899,909,918,927,936,945,954,963,972,981,990,999;zoom-supported=true;smooth-zoom-supported=false;focus-distances=Infinity,Infinity,Infinity;max-num-detected-faces-hw=0;max-num-detected-faces-sw=0;video-frame-format=android-opaque;recording-hint=false;video-snapshot-supported=true;video-stabilization=false;video-stabilization-supported=false;preview-size=1280x720 I/s ( 1843): Preview: 720x1280; Scaled: 1440x2560; Want: 1440x2504 I/q ( 1843): Starting preview D/AndroidRuntime( 1843): Shutting down VM D/l ( 1843): Starting preview E/AndroidRuntime( 1843): FATAL EXCEPTION: main E/AndroidRuntime( 1843): Process: com.therabank.uzzo, PID: 1843 E/AndroidRuntime( 1843): java.lang.RuntimeException: java.lang.NoSuchMethodException: d.e.e.e.values [] E/AndroidRuntime( 1843): at java.lang.Enum.enumValues(Enum.java:270) E/AndroidRuntime( 1843): at java.lang.Enum.access$000(Enum.java:61) E/AndroidRuntime( 1843): at java.lang.Enum$1.create(Enum.java:277) E/AndroidRuntime( 1843): at java.lang.Enum$1.create(Enum.java:275) E/AndroidRuntime( 1843): at libcore.util.BasicLruCache.get(BasicLruCache.java:63) E/AndroidRuntime( 1843): at java.lang.Enum.getSharedConstants(Enum.java:289) E/AndroidRuntime( 1843): at java.lang.Class.getEnumConstantsShared(Class.java:2428) E/AndroidRuntime( 1843): at java.util.EnumMap.getKeyUniverse(EnumMap.java:755) E/AndroidRuntime( 1843): at java.util.EnumMap.<init>(EnumMap.java:138) E/AndroidRuntime( 1843): at com.journeyapps.barcodescanner.B.a(:38) E/AndroidRuntime( 1843): at com.journeyapps.barcodescanner.BarcodeView.P(:119) E/AndroidRuntime( 1843): at com.journeyapps.barcodescanner.BarcodeView.V(:178) E/AndroidRuntime( 1843): at com.journeyapps.barcodescanner.BarcodeView.E(:188) E/AndroidRuntime( 1843): at com.journeyapps.barcodescanner.q.K(:787) E/AndroidRuntime( 1843): at com.journeyapps.barcodescanner.q.L(:530) E/AndroidRuntime( 1843): at com.journeyapps.barcodescanner.q.D(:474) E/AndroidRuntime( 1843): at com.journeyapps.barcodescanner.q.d(:60) E/AndroidRuntime( 1843): at com.journeyapps.barcodescanner.m.handleMessage(:202) E/AndroidRuntime( 1843): at android.os.Handler.dispatchMessage(Handler.java:102) E/AndroidRuntime( 1843): at android.os.Looper.loop(Looper.java:223) E/AndroidRuntime( 1843): at android.app.ActivityThread.main(ActivityThread.java:7656) E/AndroidRuntime( 1843): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime( 1843): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) E/AndroidRuntime( 1843): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) E/AndroidRuntime( 1843): Caused by: java.lang.NoSuchMethodException: d.e.e.e.values [] E/AndroidRuntime( 1843): at java.lang.Class.getMethod(Class.java:2072) E/AndroidRuntime( 1843): at java.lang.Class.getDeclaredMethod(Class.java:2050) E/AndroidRuntime( 1843): at java.lang.Enum.enumValues(Enum.java:267) E/AndroidRuntime( 1843): ... 23 more I/g ( 1843): Current focus mode 'fixed'; use auto focus? false I/.therabank.uzz( 1843): Background young concurrent copying GC freed 39951(2048KB) AllocSpace objects, 18(872KB) LOS objects, 45% free, 3476KB/6425KB, paused 10.516ms total 51.273ms D/TransportRuntime.SQLiteEventStore( 1843): Storing event with priority=HIGHEST, name=FIREBASE_CRASHLYTICS_REPORT for destination cct D/TransportRuntime.JobInfoScheduler( 1843): Scheduling upload for context TransportContext(cct, HIGHEST, MSRodHRwczovL2NyYXNobHl0aWNzcmVwb3J0cy1wYS5nb29nbGVhcGlzLmNvbS92MS9maXJlbG9nL2xlZ2FjeS9iYXRjaGxvZ1xBSXphU3lCcnBTWVQ0RkZMMDlyZUhKaTZIOUZZZGVpU25VVE92Mk0=) with jobId=-2063191763 in 1000ms(Backend next call timestamp 1636053639622). Attempt 1 I/Process ( 1843): Sending signal. PID: 1843 SIG: 9 Lost connection to device. Exited (sigterm)

Adjust_sdk lib has been deprecated after upgrading Flutter upto ver.2.5.2

Console:

C:\Flutter\flutter\.pub-cache\hosted\pub.dartlang.org\adjust_sdk-4.29.1\android\src\main\java\com\adjust\sdk\flutter\AdjustSdk.java:50: warning: [deprecation] Registrar in PluginRegistry has been deprecated
import io.flutter.plugin.common.PluginRegistry.Registrar;
                                              ^
C:\Flutter\flutter\.pub-cache\hosted\pub.dartlang.org\adjust_sdk-4.29.1\android\src\main\java\com\adjust\sdk\flutter\AdjustSdk.java:121: warning: [deprecation] Registrar in PluginRegistry has been deprecated
    public static void registerWith(Registrar registrar) {

Hope this will be fixed soon

Thank you

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.