Giter Club home page Giter Club logo

adaptysdk-flutter's People

Contributors

akyashkin avatar another1dd avatar dardary avatar ditansu avatar iwitaly avatar kpotehin avatar valyano avatar vladd-g avatar x401om 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  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

adaptysdk-flutter's Issues

Introductory Offers missed

Hello. Why there is no information about Introductory Offers on iOS?

I can't find anything in model about this. Is it your mistake or I don't understand something?

Adapty_flutter and epub_viewer can't work together

Hi,

I was getting an error for a while in my app. At the end, I was trying to understand the cause of the error by removing the packages I used one by one. I finally found the reason for the crash. After removing the adapty_flutter package, I realized that there is no problem. There is obviously a conflict in the adapty_flutter package and the epub_viewer package. I'm open to any helpful information.

The error message i got:
E/AndroidRuntime( 1638): java.lang.NoSuchFieldError: No static field abc_text_select_handle_middle_mtrl_dark of type I in class Lcom/folioreader/R$drawable; or its superclasses (declaration of 'com.folioreader.R$drawable' appears in /data/app/~~wsrkl0h87yoxUbPWj-P6Wg==/com.example.upubselfdemo-Tvu7HpZFMAKRbrLx2LFhLA==/base.apk!classes2.dex) E/AndroidRuntime( 1638): at com.folioreader.ui.view.FolioWebView.initViewTextSelection(FolioWebView.kt:287) E/AndroidRuntime( 1638): at com.folioreader.ui.view.FolioWebView.init(FolioWebView.kt:279) E/AndroidRuntime( 1638): at com.folioreader.ui.view.FolioWebView.setFolioActivityCallback(FolioWebView.kt:411) E/AndroidRuntime( 1638): at com.folioreader.ui.fragment.FolioPageFragment.initWebView(FolioPageFragment.kt:375) E/AndroidRuntime( 1638): at com.folioreader.ui.fragment.FolioPageFragment.onCreateView(FolioPageFragment.kt:183) E/AndroidRuntime( 1638): at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963) E/AndroidRuntime( 1638): at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518) E/AndroidRuntime( 1638): at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) E/AndroidRuntime( 1638): at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) E/AndroidRuntime( 1638): at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100) E/AndroidRuntime( 1638): at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1971) E/AndroidRuntime( 1638): at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:311) E/AndroidRuntime( 1638): at androidx.fragment.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:274) E/AndroidRuntime( 1638): at com.folioreader.ui.view.DirectionalViewpager.populate(DirectionalViewpager.java:1327) E/AndroidRuntime( 1638): at com.folioreader.ui.view.DirectionalViewpager.populate(DirectionalViewpager.java:1105) E/AndroidRuntime( 1638): at com.folioreader.ui.view.DirectionalViewpager.onMeasure(DirectionalViewpager.java:1828) E/AndroidRuntime( 1638): at android.view.View.measure(View.java:25466) E/AndroidRuntime( 1638): at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1676) E/AndroidRuntime( 1638): at android.view.View.measure(View.java:25466) E/AndroidRuntime( 1638): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957) E/AndroidRuntime( 1638): at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) E/AndroidRuntime( 1638): at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145) E/AndroidRuntime( 1638): at android.view.View.measure(View.java:25466) E/AndroidRuntime( 1638): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957) E/AndroidRuntime( 1638): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) E/AndroidRuntime( 1638): at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) E/AndroidRuntime( 1638): at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) E/AndroidRuntime( 1638): at android.view.View.measure(View.java:25466) E/AndroidRuntime( 1638): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957)

Blocking requests

I'm not sure, but seems that adapty doesn't allow parallel requests. At least at debug environment. It doesn't start next request until previous doesn't end.
It brings many problems is it intentionally done. Or am I wrong?

Below, the same request log. And It seems that there is no timeout.
2022-09-02 22:33:42.677+0500 [Adapty v1.17.7(1)] - INFO
2022-09-02 22:36:43.093+0500 [Adapty v1.17.7(1)] - INFO

How I call:

    if (_product != null) {
      final _productCopy = _product;
      final result = await Adapty.makePurchase(_productCopy);
      if (result.purchaserInfo?.accessLevels['premium']?.isActive ?? false) {
        return true;
      }
    }

    return false;

Environment:
iOS: 15.6.1
Flutter: 3.0.5
Adapty: ^1.0.14

release app bundle doesn't display products

I am working on adapty subscription
when i test my app on release apk then it display all product from google play store
but when i make release app bundle then it not display any product from google play store

Support Flutter 3.0.0

e: /Users/GG/.pub-cache/hosted/pub.dartlang.org/adapty_flutter-1.0.9/android/src/main/kotlin/com/adapty/flutter/registrant/AdaptyPluginRegistrant.kt: (19, 33): Type mismatch: inferred type is String? but String was expected
e: /Users/GG/.pub-cache/hosted/pub.dartlang.org/adapty_flutter-1.0.9/android/src/main/kotlin/com/adapty/flutter/registrant/AdaptyPluginRegistrant.kt: (22, 31): Type mismatch: inferred type is String? but String was expected

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':adapty_flutter:compileDebugKotlin'.

Compilation error. See log for more details

  • 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 32s
Exception: Gradle task assembleDebug failed with exit code 1

Android Manifest conflict with AppsFlyer (backup rules)

Hello,

I'm experiencing the following error when trying to execute the app:

/home/guilherme/Desktop/Positiv/mobile_app/android/app/src/debug/AndroidManifest.xml:12:18-70 Error:
	Attribute application@fullBackupContent value=(@xml/adapty_backup_rules) from [com.github.adaptyteam:AdaptySDK-Android:1.11.0] AndroidManifest.xml:12:18-70
	is also present at [com.appsflyer:af-android-sdk:6.8.2] AndroidManifest.xml:15:18-73 value=(@xml/appsflyer_backup_rules).
	Suggestion: add 'tools:replace="android:fullBackupContent"' to <application> element at AndroidManifest.xml:31:5-168:19 to override.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:processDebugMainManifest'.
> Manifest merger failed : Attribute application@fullBackupContent value=(@xml/adapty_backup_rules) from [com.github.adaptyteam:AdaptySDK-Android:1.11.0] AndroidManifest.xml:12:18-70
  	is also present at [com.appsflyer:af-android-sdk:6.8.2] AndroidManifest.xml:15:18-73 value=(@xml/appsflyer_backup_rules).
  	Suggestion: add 'tools:replace="android:fullBackupContent"' to <application> element at AndroidManifest.xml:31:5-168:19 to override.

Related:

By taking a look at AppsFlyerSDK/appsflyer-android-sdk#9 (comment) and https://github.com/adaptyteam/AdaptySDK-Android/blob/master/adapty/src/main/res/xml/adapty_backup_rules.xml I have managed to solve it by:

  1. Creating a backup_rules.xml file in android/app/src/main/res/xml with the following content:
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    <exclude domain="sharedpref" path="appsflyer-data"/>
    <exclude domain="sharedpref" path="AdaptySDKPrefs.xml"/>
</full-backup-content>
  1. Adding the following two lines to the application tag of my AndroidManigest file:
android:fullBackupContent="@xml/backup_rules"
tools:replace="android:fullBackupContent"

Even though it works, I would like to confirm if this is the right approach and if it won't cause any side effects on the integration with Adapty and on the data being collected.

Get paywalls mapping from json error

  1. First error:
    Unhandled Exception: NoSuchMethodError: The method 'map' was called on null.
    Tried calling: map(Closure: (dynamic) => AdaptyPaywall)
    #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
    #1 new GetPaywallsResult.fromJson (package:adapty_flutter/results/get_paywalls_result.dart:12:68)
    #2 Adapty.getPaywalls (package:adapty_flutter/adapty_flutter.dart:68:30)
  1. Second error:
    Unhandled Exception: FormatException: Unexpected end of input (at character 1)
    #0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1404:5)
    #1 _ChunkedJsonParser.close (dart:convert-patch/convert_patch.dart:522:7)
    #2 _parseJson (dart:convert-patch/convert_patch.dart:41:10)
    #3 JsonDecoder.convert (dart:convert/json.dart:505:36)
    #4 JsonCodec.decode (dart:convert/json.dart:156:41)
    #5 new AdaptyPaywall.fromMap (package:adapty_flutter/models/adapty_paywall.dart:36:91)
    #6 new GetPaywallsResult.fromJson. (package:adapty_flutter/results/get_paywalls_result.dart:12:93)
    #7 MappedListIterable.elementAt (dart:_internal/iterable.dart:417:31)
    #8 ListIterator.moveNext (dart:_internal/iterable.dart:343:26)
    #9 new List.from (dart:core-patch/array_patch.dart:38:29)
    #10 new List.of (dart:core-patch/array_patch.dart:68:17)
    #11 ListIterable.toList (dart:_internal/iterable.dart:211:44)
    #12 new GetPaywallsResult.fromJson (package:adapty_flutter/results/get_paywalls_result.dart:12:105)
    #13 Adapty.getPaywalls (package:adapty_flutter/adapty_flutter.dart:68:30)

Adapty.getPurchaserInfo(forceUpdate:true) returns no accessLevel when user first logs in from iOS

Hi,

We get an astonishing behavior in the sandbox. When newly created app user logs in from Android, the Adapty.getPurchaserInfo(forceUpdate:true) returns a complete list of accessLevels. Then, the same app user on iOS, also gets the complete list of accessLevels. However, when the newly created app user first logs in from iOS, the same user gets an empty accessLevels using Adapty.getPurchaserInfo(forceUpdate:true) from iOS and Android.

Here is how we call Adapty.getPurchaserInfo( forceUpdate:true):

        AdaptyPurchaserInfo purchaserInfo = await Adapty.getPurchaserInfo( forceUpdate:true);

Here is how we call Adapty.identify(userId):

        result=await Adapty.identify(userId);

Here are our logs (edited to avoid sharing private information) with full Adapty verbosity when performing the identify and getPurchaseInfo (among other events) from iOS:

2022-03-03 20:38:57.996+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: logout(_:)
2022-03-03 20:38:57.996+0100 [Adapty v1.16.8(1)] - INFO.
Updating local purchaserInfo: nil, with profileId: nil, customerUserId: nil
2022-03-03 20:38:58.002+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: createProfile(_:_:)
2022-03-03 20:38:58.003+0100 [Adapty v1.16.8(1)] - INFO.
Starting new request: POST https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/
Params: ["data": ["id": "YYY", "type": "adapty_analytics_profile"]]
Headers: ["Authorization": "Api-Key public_live_XXX”, "ADAPTY-SDK-PLATFORM": "iOS", "Content-Type": "application/vnd.api+json", "ADAPTY-SDK-VERSION": "1.16.8", "ADAPTY-SDK-PROFILE-ID": "YYY", "ADAPTY-SDK-VERSION-BUILD": "1", "ADAPTY_SDK_LOCALE": "en-CH"]
2022-03-03 20:38:58.347+0100 [Adapty v1.16.8(1)] - INFO.
Received response: https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/
{"data":{"type":"adapty_analytics_profile","id":"YYY","attributes":{"app_id":"ZZZ","profile_id":"YYY","customer_user_id":null,"paid_access_levels":null,"subscriptions":null,"non_subscriptions":null,"promotional_offer_eligibility":false,"introductory_offer_eligibility":true,"custom_attributes":{}}}}
Headers: [AnyHashable("Date"): Thu, 03 Mar 2022 19:38:58 GMT, AnyHashable("Alt-Svc"): h3=":443"; ma=86400, h3-29=":443"; ma=86400, AnyHashable("cf-cache-status"): DYNAMIC, AnyHashable("Content-Type"): application/vnd.api+json, AnyHashable("x-frame-options"): DENY, AnyHashable("nel"): {"success_fraction":0,"report_to":"cf-nel","max_age":604800}, AnyHashable("allow"): GET, POST, PATCH, HEAD, OPTIONS, AnyHashable("referrer-policy"): same-origin, AnyHashable("Via"): 1.1 google, AnyHashable("expect-ct"): max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct", AnyHashable("report-to"): {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=aaa"}],"group":"cf-nel","max_age":604800}, AnyHashable("Server"): cloudflare, AnyHashable("Vary"): Origin, Accept-Encoding, AnyHashable("x-content-type-options"): nosniff, AnyHashable("cf-ray"): bbb-MAD]
2022-03-03 20:38:58.355+0100 [Adapty v1.16.8(1)] - INFO.
Updating local purchaserInfo: Optional(accessLevels: [:], subscriptions: [:], nonSubscriptions: [:]), with profileId: Optional("YYY"), customerUserId: nil
2022-03-03 20:38:58.356+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: syncInstallation(_:)
2022-03-03 20:38:58.362+0100 [Adapty v1.16.8(1)] - INFO.
Starting new request: POST https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/installation-metas/AAA/
Params: ["data": ["attributes": ["adapty_sdk_version": "1.16.8", "idfa": "00000000-0000-0000-0000-000000000000", "platform": "iOS", "app_build": "14", "device": "iPhone9,3", "idfv": "zzz", "os": "iOS 15.2.1", "app_version": "1.0.0", "locale": "en-CH", "adapty_sdk_version_build": 1, "timezone": "Africa/Casablanca"], "type": "adapty_analytics_profile_installation_meta", "id": "AAA"]]
Headers: ["ADAPTY_SDK_LOCALE": "en-CH", "ADAPTY-SDK-PLATFORM": "iOS", "Content-Type": "application/vnd.api+json", "ADAPTY-SDK-VERSION-BUILD": "1", "ADAPTY-SDK-VERSION": "1.16.8", "ADAPTY-SDK-PROFILE-ID": "YYY", "Authorization": "Api-Key public_live_XXX”]
2022-03-03 20:38:58.365+0100 [Adapty v1.16.8(1)] - INFO.
Starting new request: GET https://api.adapty.io/api/v1/sdk/in-apps/purchase-containers/?profile_id=YYY&paywall_padding_top=20.0&automatic_paywalls_screen_reporting_enabled=false
Params: ["profile_id": "YYY", "paywall_padding_top": 20.0, "automatic_paywalls_screen_reporting_enabled": false]
Headers: ["Content-Type": "application/x-www-form-urlencoded; charset=utf-8", "ADAPTY-SDK-PLATFORM": "iOS", "ADAPTY-SDK-PROFILE-ID": "YYY", "Authorization": "Api-Key public_live_XXX”, "ADAPTY-SDK-VERSION": "1.16.8", "ADAPTY-SDK-VERSION-BUILD": "1", "ADAPTY_SDK_LOCALE": "en-CH"]
2022-03-03 20:38:58.365+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: syncTransactionsHistory()
2022-03-03 20:38:58.690+0100 [Adapty v1.16.8(1)] - INFO.
Received response: https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/installation-metas/AAA/
{"data":{"type":"adapty_analytics_profile_installation_meta","id":"AAA","attributes":{"profile_id":"YYY","iam_access_key_id":"BBB","iam_secret_key":"LLL","iam_session_token":"DDD","iam_expiration":"2022-03-03T20:38:58Z"}}}
Headers: [AnyHashable("Date"): Thu, 03 Mar 2022 19:38:58 GMT, AnyHashable("expect-ct"): max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct", AnyHashable("Alt-Svc"): h3=":443"; ma=86400, h3-29=":443"; ma=86400, AnyHashable("Vary"): Origin, Accept-Encoding, AnyHashable("x-frame-options"): DENY, AnyHashable("cf-cache-status"): DYNAMIC, AnyHashable("referrer-policy"): same-origin, AnyHashable("Content-Type"): application/vnd.api+json, AnyHashable("Server"): cloudflare, AnyHashable("cf-ray"): VVV-MAD, AnyHashable("x-content-type-options"): nosniff, AnyHashable("Via"): 1.1 google, AnyHashable("nel"): {"success_fraction":0,"report_to":"cf-nel","max_age":604800}, AnyHashable("report-to"): {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=EEE"}],"group":"cf-nel","max_age":604800}, AnyHashable("allow"): POST, OPTIONS]
2022-03-03 20:38:58.697+0100 [Adapty v1.16.8(1)] - INFO.
Starting new request: POST https://kinesis.us-east-1.amazonaws.com
Params: ["Records": [["PartitionKey": "AAA", "Data": "CCC"]], "StreamName": "adapty-data-pipeline-prod"]
Headers: ["Content-Type": "application/vnd.api+json"]
2022-03-03 20:38:59.007+0100 [Adapty v1.16.8(1)] - INFO.
Received response: https://api.adapty.io/api/v1/sdk/in-apps/purchase-containers/?profile_id=YYY&paywall_padding_top=20.0&automatic_paywalls_screen_reporting_enabled=false
{"data":[{"type":"adapty_inapps_purchase_container_compact","id":"TTT","attributes":{"developer_id":"bp_plus","revision":5,"variation_id":"UUU","ab_test_name":"FFF Plus","paywall_name":"FFF Plus","products":[{"title":"FFF Plus - Annual","vendor_product_id":"bp_1Y_4999_0w0","promotional_offer_id":null,"introductory_offer_eligibility":true,"promotional_offer_eligibility":false},{"title":"FFF Plus - Monthly","vendor_product_id":"bp_1M_699_0w0","promotional_offer_id":null,"introductory_offer_eligibility":true,"promotional_offer_eligibility":false}],"is_promo":false,"visual_paywall":null,"custom_payload":null}}],"meta":{"products":[{"title":"FFF Plus - Annual","vendor_product_id":"bp_1Y_4999_0w0","introductory_offer_eligibility":true,"promotional_offer_eligibility":false},{"title":"FFF Plus - Monthly","vendor_product_id":"bp_1M_699_0w0","introductory_offer_eligibility":true,"promotional_offer_eligibility":false}]}}
Headers: [AnyHashable("cf-cache-status"): DYNAMIC, AnyHashable("Content-Encoding"): br, AnyHashable("x-response-from-cache"): False, AnyHashable("expect-ct"): max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct", AnyHashable("x-content-type-options"): nosniff, AnyHashable("referrer-policy"): same-origin, AnyHashable("Alt-Svc"): h3=":443"; ma=86400, h3-29=":443"; ma=86400, AnyHashable("report-to"): {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=WWW"}],"group":"cf-nel","max_age":604800}, AnyHashable("x-frame-options"): DENY, AnyHashable("Date"): Thu, 03 Mar 2022 19:38:59 GMT, AnyHashable("Server"): cloudflare, AnyHashable("nel"): {"success_fraction":0,"report_to":"cf-nel","max_age":604800}, AnyHashable("Via"): 1.1 google, AnyHashable("Vary"): Origin, Accept-Encoding, AnyHashable("Content-Type"): application/vnd.api+json, AnyHashable("allow"): GET, HEAD, OPTIONS, AnyHashable("cf-ray"): xxx-MAD, AnyHashable("x-response-hash"): yyy]
2022-03-03 20:38:59.854+0100 [Adapty v1.16.8(1)] - INFO.
Received response: https://kinesis.us-east-1.amazonaws.com/
{"FailedRecordCount":0,"Records":[{"SequenceNumber":"RRR","ShardId":"shardId-000000000004"}]}
Headers: [AnyHashable("x-amz-id-2"): SSS, AnyHashable("Date"): Thu, 03 Mar 2022 19:38:59 GMT, AnyHashable("Content-Type"): application/x-amz-json-1.1, AnyHashable("x-amzn-RequestId"): c481b40d-2e30-db4e-9e1a-af9ec38335e9, AnyHashable("Content-Length"): 146]
2022-03-03 20:39:00.202+0100 [Adapty v1.16.8(1)] - INFO.
Found product: bp_1M_699_0w0 FFF Plus - Monthly 6.99
2022-03-03 20:39:00.202+0100 [Adapty v1.16.8(1)] - INFO.
Found product: bp_1Y_4999_0w0 FFF Plus - Annual 49.99
2022-03-03 20:39:00.207+0100 [Adapty v1.16.8(1)] - INFO.
Successfully loaded list of products: [bp_1Y_4999_0w0,bp_1M_699_0w0]
2022-03-03 20:39:00.207+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: getPromo(_:)
2022-03-03 20:39:00.207+0100 [Adapty v1.16.8(1)] - INFO.
Starting new request: GET https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/promo/
Params: [:]
Headers: ["Authorization": "Api-Key public_live_XXX”, "ADAPTY-SDK-PLATFORM": "iOS", "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", "ADAPTY-SDK-VERSION": "1.16.8", "ADAPTY-SDK-PROFILE-ID": "YYY", "ADAPTY-SDK-VERSION-BUILD": "1", "ADAPTY_SDK_LOCALE": "en-CH"]
2022-03-03 20:39:00.350+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: identify(_:completion:)
2022-03-03 20:39:00.350+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: createProfile(_:_:)
2022-03-03 20:39:00.351+0100 [Adapty v1.16.8(1)] - INFO.
Starting new request: POST https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/
Params: ["data": ["id": "YYY", "type": "adapty_analytics_profile", "attributes": ["customer_user_id": "603"]]]
Headers: ["ADAPTY_SDK_LOCALE": "en-CH", "ADAPTY-SDK-PLATFORM": "iOS", "Content-Type": "application/vnd.api+json", "ADAPTY-SDK-VERSION-BUILD": "1", "ADAPTY-SDK-VERSION": "1.16.8", "ADAPTY-SDK-PROFILE-ID": "YYY", "Authorization": "Api-Key public_live_XXX”]
2022-03-03 20:39:00.444+0100 [Adapty v1.16.8(1)] - INFO.
Received response: https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/promo/
{"data":{}}
Headers: [AnyHashable("report-to"): {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=PPP"}],"group":"cf-nel","max_age":604800}, AnyHashable("Server"): cloudflare, AnyHashable("Vary"): Origin, AnyHashable("Content-Length"): 11, AnyHashable("allow"): GET, HEAD, OPTIONS, AnyHashable("Content-Type"): application/vnd.api+json, AnyHashable("nel"): {"success_fraction":0,"report_to":"cf-nel","max_age":604800}, AnyHashable("x-content-type-options"): nosniff, AnyHashable("Alt-Svc"): h3=":443"; ma=86400, h3-29=":443"; ma=86400, AnyHashable("x-frame-options"): DENY, AnyHashable("cf-ray"): 6e64d5ef5ce169d0-MAD, AnyHashable("expect-ct"): max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct", AnyHashable("cf-cache-status"): DYNAMIC, AnyHashable("referrer-policy"): same-origin, AnyHashable("Via"): 1.1 google, AnyHashable("Date"): Thu, 03 Mar 2022 19:39:00 GMT]
2022-03-03 20:39:00.752+0100 [Adapty v1.16.8(1)] - INFO.
Received response: https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/
{"data":{"type":"adapty_analytics_profile","id":"YYY","attributes":{"app_id":"ZZZ","profile_id":"YYY","customer_user_id":"603","paid_access_levels":null,"subscriptions":null,"non_subscriptions":null,"promotional_offer_eligibility":false,"introductory_offer_eligibility":true,"custom_attributes":{}}}}
Headers: [AnyHashable("Via"): 1.1 google, AnyHashable("x-content-type-options"): nosniff, AnyHashable("cf-ray"): 6e64d5f0df3a69d0-MAD, AnyHashable("referrer-policy"): same-origin, AnyHashable("cf-cache-status"): DYNAMIC, AnyHashable("Content-Type"): application/vnd.api+json, AnyHashable("x-frame-options"): DENY, AnyHashable("Vary"): Origin, Accept-Encoding, AnyHashable("nel"): {"success_fraction":0,"report_to":"cf-nel","max_age":604800}, AnyHashable("allow"): GET, POST, PATCH, HEAD, OPTIONS, AnyHashable("Date"): Thu, 03 Mar 2022 19:39:00 GMT, AnyHashable("Content-Encoding"): br, AnyHashable("Server"): cloudflare, AnyHashable("Alt-Svc"): h3=":443"; ma=86400, h3-29=":443"; ma=86400, AnyHashable("expect-ct"): max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct", AnyHashable("report-to"): {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=QQQ"}],"group":"cf-nel","max_age":604800}]
2022-03-03 20:39:00.754+0100 [Adapty v1.16.8(1)] - INFO.
Updating local purchaserInfo: Optional(accessLevels: [:], subscriptions: [:], nonSubscriptions: [:]), with profileId: Optional("YYY"), customerUserId: Optional("603")
2022-03-03 20:39:00.755+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: syncInstallation(_:)
2022-03-03 20:39:00.758+0100 [Adapty v1.16.8(1)] - INFO.
Starting new request: POST https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/installation-metas/AAA/
Params: ["data": ["id": "AAA", "type": "adapty_analytics_profile_installation_meta"]]
Headers: ["ADAPTY_SDK_LOCALE": "en-CH", "ADAPTY-SDK-PLATFORM": "iOS", "Content-Type": "application/vnd.api+json", "ADAPTY-SDK-VERSION-BUILD": "1", "ADAPTY-SDK-VERSION": "1.16.8", "ADAPTY-SDK-PROFILE-ID": "YYY", "Authorization": "Api-Key public_live_MMM"]
2022-03-03 20:39:00.759+0100 [Adapty v1.16.8(1)] - INFO.
Starting new request: GET https://api.adapty.io/api/v1/sdk/in-apps/purchase-containers/?profile_id=YYY&automatic_paywalls_screen_reporting_enabled=false&paywall_padding_top=20.0
Params: ["profile_id": "YYY", "automatic_paywalls_screen_reporting_enabled": false, "paywall_padding_top": 20.0]
Headers: ["ADAPTY-SDK-PREVIOUS-RESPONSE-HASH": "yyy", "ADAPTY_SDK_LOCALE": "en-CH", "ADAPTY-SDK-PLATFORM": "iOS", "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", "ADAPTY-SDK-VERSION-BUILD": "1", "ADAPTY-SDK-VERSION": "1.16.8", "ADAPTY-SDK-PROFILE-ID": "YYY", "Authorization": "Api-Key public_live_MMM"]
2022-03-03 20:39:00.759+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: syncTransactionsHistory()
2022-03-03 20:39:00.800+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: getPurchaserInfo(forceUpdate:_:)
2022-03-03 20:39:00.800+0100 [Adapty v1.16.8(1)] - INFO.
Starting new request: GET https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/
Params: [:]
Headers: ["ADAPTY-SDK-PROFILE-ID": "YYY", "ADAPTY-SDK-VERSION-BUILD": "1", "ADAPTY-SDK-VERSION": "1.16.8", "ADAPTY-SDK-PLATFORM": "iOS", "ADAPTY_SDK_LOCALE": "en-CH", "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", "Authorization": "Api-Key public_live_MMM"]
2022-03-03 20:39:01.020+0100 [Adapty v1.16.8(1)] - INFO.
Received response: https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/installation-metas/AAA/
{"data":{"type":"adapty_analytics_profile_installation_meta","id":"AAA","attributes":{"profile_id":"YYY","iam_access_key_id":"BBB","iam_secret_key":"LLL","iam_session_token":"DDD","iam_expiration":"2022-03-03T20:38:58Z"}}}
Headers: [AnyHashable("Vary"): Origin, Accept-Encoding, AnyHashable("cf-cache-status"): DYNAMIC, AnyHashable("x-content-type-options"): nosniff, AnyHashable("allow"): POST, OPTIONS, AnyHashable("Content-Encoding"): br, AnyHashable("referrer-policy"): same-origin, AnyHashable("cf-ray"): NNN-MAD, AnyHashable("Date"): Thu, 03 Mar 2022 19:39:01 GMT, AnyHashable("Via"): 1.1 google, AnyHashable("report-to"): {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=OOO"}],"group":"cf-nel","max_age":604800}, AnyHashable("Server"): cloudflare, AnyHashable("expect-ct"): max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct", AnyHashable("nel"): {"success_fraction":0,"report_to":"cf-nel","max_age":604800}, AnyHashable("Content-Type"): application/vnd.api+json, AnyHashable("x-frame-options"): DENY, AnyHashable("Alt-Svc"): h3=":443"; ma=86400, h3-29=":443"; ma=86400]
<Google> Cannot find an ad network adapter with the name(s): com.google.DummyAdapter. Remember to link all required ad network adapters and SDKs, and set -ObjC in the 'Other Linker Flags' setting of your build target.
2022-03-03 20:39:01.325+0100 [Adapty v1.16.8(1)] - INFO.
Received response: https://api.adapty.io/api/v1/sdk/in-apps/purchase-containers/?profile_id=YYY&automatic_paywalls_screen_reporting_enabled=false&paywall_padding_top=20.0
{"data":{}}
Headers: [AnyHashable("x-content-type-options"): nosniff, AnyHashable("report-to"): {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=KKK"}],"group":"cf-nel","max_age":604800}, AnyHashable("Server"): cloudflare, AnyHashable("expect-ct"): max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct", AnyHashable("Date"): Thu, 03 Mar 2022 19:39:01 GMT, AnyHashable("Alt-Svc"): h3=":443"; ma=86400, h3-29=":443"; ma=86400, AnyHashable("x-response-from-cache"): False, AnyHashable("Vary"): Origin, AnyHashable("Content-Length"): 11, AnyHashable("Via"): 1.1 google, AnyHashable("cf-ray"): 6e64d5f4bde169d0-MAD, AnyHashable("referrer-policy"): same-origin, AnyHashable("nel"): {"success_fraction":0,"report_to":"cf-nel","max_age":604800}, AnyHashable("cf-cache-status"): DYNAMIC, AnyHashable("x-frame-options"): DENY, AnyHashable("allow"): GET, HEAD, OPTIONS, AnyHashable("Content-Type"): application/vnd.api+json, AnyHashable("x-response-hash"): yyy]
2022-03-03 20:39:01.409+0100 [Adapty v1.16.8(1)] - INFO.
Found product: bp_1M_699_0w0 FFF Plus - Monthly 6.99
2022-03-03 20:39:01.409+0100 [Adapty v1.16.8(1)] - INFO.
Found product: bp_1Y_4999_0w0 FFF Plus - Annual 49.99
2022-03-03 20:39:01.411+0100 [Adapty v1.16.8(1)] - INFO.
Successfully loaded list of products: [bp_1Y_4999_0w0,bp_1M_699_0w0]
2022-03-03 20:39:01.411+0100 [Adapty v1.16.8(1)] - INFO.
Calling now: getPromo(_:)
2022-03-03 20:39:01.412+0100 [Adapty v1.16.8(1)] - INFO.
Starting new request: GET https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/promo/
Params: [:]
Headers: ["Authorization": "Api-Key public_live_MMM", "Content-Type": "application/x-www-form-urlencoded; charset=utf-8", "ADAPTY_SDK_LOCALE": "en-CH", "ADAPTY-SDK-VERSION": "1.16.8", "ADAPTY-SDK-VERSION-BUILD": "1", "ADAPTY-SDK-PLATFORM": "iOS", "ADAPTY-SDK-PROFILE-ID": "YYY"]
2022-03-03 20:39:01.682+0100 [Adapty v1.16.8(1)] - INFO.
Received response: https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/
{"data":{"type":"adapty_analytics_profile","id":"YYY","attributes":{"app_id":"ZZZ","profile_id":"YYY","customer_user_id":"603","paid_access_levels":null,"subscriptions":null,"non_subscriptions":null,"promotional_offer_eligibility":false,"introductory_offer_eligibility":true,"custom_attributes":{}}}}
Headers: [AnyHashable("x-content-type-options"): nosniff, AnyHashable("report-to"): {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=III"}],"group":"cf-nel","max_age":604800}, AnyHashable("Server"): cloudflare, AnyHashable("Date"): Thu, 03 Mar 2022 19:39:01 GMT, AnyHashable("Content-Encoding"): br, AnyHashable("expect-ct"): max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct", AnyHashable("x-response-from-cache"): False, AnyHashable("Alt-Svc"): h3=":443"; ma=86400, h3-29=":443"; ma=86400, AnyHashable("Vary"): Origin, Accept-Encoding, AnyHashable("Via"): 1.1 google, AnyHashable("cf-ray"): JJJ-MAD, AnyHashable("referrer-policy"): same-origin, AnyHashable("nel"): {"success_fraction":0,"report_to":"cf-nel","max_age":604800}, AnyHashable("cf-cache-status"): DYNAMIC, AnyHashable("x-frame-options"): DENY, AnyHashable("allow"): GET, POST, PATCH, HEAD, OPTIONS, AnyHashable("Content-Type"): application/vnd.api+json, AnyHashable("x-response-hash"): 14f856b3b5c9bf63]
2022-03-03 20:39:01.695+0100 [Adapty v1.16.8(1)] - INFO.
Updating local purchaserInfo: Optional(accessLevels: [:], subscriptions: [:], nonSubscriptions: [:]), with profileId: Optional("YYY"), customerUserId: Optional("603")
[VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: NoSuchMethodError: The getter 'isActive' was called on null.
Receiver: null
Tried calling: isActive
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:63:5)
#1      PurchaseManager.getSubscription (package:FFF/management/purchaseManager.dart:125:50)
<asynchronous suspension>
#2      PurchaseManager.logIn (package:FFF/management/purchaseManager.dart:52:7)
<asynchronous suspension>
2022-03-03 20:39:02.457+0100 [Adapty v1.16.8(1)] - INFO.
Received response: https://api.adapty.io/api/v1/sdk/analytics/profiles/YYY/promo/
{"data":{}}
Headers: [AnyHashable("x-frame-options"): DENY, AnyHashable("expect-ct"): max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct", AnyHashable("cf-ray"): GGG-MAD, AnyHashable("x-content-type-options"): nosniff, AnyHashable("Content-Length"): 11, AnyHashable("Server"): cloudflare, AnyHashable("report-to"): {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=HHH"}],"group":"cf-nel","max_age":604800}, AnyHashable("allow"): GET, HEAD, OPTIONS, AnyHashable("Via"): 1.1 google, AnyHashable("referrer-policy"): same-origin, AnyHashable("cf-cache-status"): DYNAMIC, AnyHashable("nel"): {"success_fraction":0,"report_to":"cf-nel","max_age":604800}, AnyHashable("Date"): Thu, 03 Mar 2022 19:39:02 GMT, AnyHashable("Alt-Svc"): h3=":443"; ma=86400, h3-29=":443"; ma=86400, AnyHashable("Vary"): Origin, AnyHashable("Content-Type"): application/vnd.api+json]

We looked at reasons for this inconsistent behavior within our app and our server. So far, we do not have any hunch.

Is there any potential reason for this from an Adapty perspective?

Logging a user out and back in again creates multiple blank user profiles in Adapty console

Reproduction steps

  1. Setup and run an adapty application in Flutter (i.e. calls Adapty.activate()). => New blank user (User A) is created in the console
  2. Log in with a user e.g. customerUserId 1234 i.e. Adapty.identify("1234"). => Previous blank user (User A) is now linked to user via customerId 1234
  3. Log out the user with Adapty.logout() => New blank user (User B) is created in the console
  4. Log in the same user as before i.e. Adapty.identify(1234) => Previous user is used for identification (User A).

Continue to log in a user, and logout a user to generate more garbage users in the console.

Expected behavior

Since User B has essentially mutated into User A through the identify call, I wouldn't expect to see User B in the console. (I was curious if this was the expected behaviour by the Adapty team or indeed a bug)

(I tried bypassing this bug by only calling identify on Login but when another user logs in, they mutate the previous users Adapty Profile)

[Question] What is the reason behind making the Flutter SDK activate differently to the Android/iOS SDK?

Looking through the documentation I noticed that the Android/iOS SDK requires initialization via something like:
Adapty.activate("PUBLIC_SDK_KEY", customerUserId: "YOUR_USER_ID")

However, the Flutter SDK uses the API key in the plist/manifest files, and is automatically registered via the activateOnLaunch function on the native side.

I was wondering what is the reason for starting the Adapty SDK on the application launch rather than having the Flutter SDK activated in a similar manner to iOS/Android? i.e. I call the activate function similar to the above in Flutter.

(Doing the above would allow me as the developer to control when the SDK is activated, which means if I wanted to, I could choose to activate the SDK after a user has authenticated and ensure Adapty is using my customerUserIds during the entire lifetime of the SDK - which would reduce the effects of #23 )

Happy to make the changes, and open a PR (with major version bump ofc) but thought I would ask about the reasoning first in-case the current behavior is required for something like push notifications (or another reason for starting the Android/iOS SDK outside of the Flutter process?)

Already purchased error mapping is not aligned with AdaptyError object

Hello there,

we are using your SDK for payments, but there is a problem in error handling. I get an error which is native iOS one that says I have already purchased that item. Adapty is also throwing an exception but when I try to read error code and message there is nothing aligned with one Apple is throwing at native level. See below
<SKPaymentQueue: 0x28171e640>: Payment completed with error: Error Domain=ASDServerErrorDomain Code=3532 "You are currently subscribed to this" UserInfo={NSLocalizedDescription=You are currently subscribed to this}

And adapty gives me

Screenshot 2022-09-07 at 5 05 24 PM

I have no way to handle that error. I guess inside this method
Adapty.makePurchase(product); , you can include few callback like onAlreadyPruchased and there you can provide MakePurchaseResult object as well if possible, or may be some other receipt related information.

Make Adapty a singleton

Adapty is currently only like a namespace for several functions and has several static functions.
As the functions are static it makes it hard to mock Adapty to write tests.

Would be better to adopt something like:
https://github.com/FirebaseExtended/flutterfire/blob/master/packages/cloud_firestore/cloud_firestore/lib/src/firestore.dart

This would allow to mock and verify calls to Adapty, like:

verify(mockAdapty.whateverFunction();
verifyNoMoreInteractions(mockAdapty.whateverFunction);

AdaptyError (code null) . Error thrown null. Android. Release.

Hi. I have have set up Adapty SDK and tested in debug with sandbox for android and ios. Everything worked well, as expected, but when i built a release, i started getting exceptions AdaptyError (code null) . Error thrown null.. In Profile mode everything works well.

The exception is thrown after calling Adapty.identify() and Adapty.getPaywalls().

Tested on Huawei P20 lite android 9, and Samsung Galaxy S9 android 9.

Trace
Non-fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: AdaptyError (code null) . Error thrown null.
       at Adapty._invokeMethodHandlingErrors(Adapty.java:242)
       at Adapty.getPaywalls(Adapty.java:64)
       at PurchaseBloc._purchase.<fn>(_purchase.java:79)
       at PurchaseBloc._tryCatchWrapper(PurchaseBloc.java:39)
       at PurchaseBloc._purchase(PurchaseBloc.java:76)
       at Bloc.on.<fn>.handleEvent(<fn>.java:456)
How i activate adapty
void main() {
  runZonedGuarded<void>(_run, CrashlyticsHelper.recordError);
}

Future<void> _run() async {
  WidgetsFlutterBinding.ensureInitialized();

  // FB
  await Firebase.initializeApp();

  final analytics = FirebaseAnalytics();
  await analytics.setAnalyticsCollectionEnabled(!kDebugMode);
  await analytics.logAppOpen();

  await DeviceInfoHelper.initialize();

  // error observers
  Bloc.observer = FirebaseBlocObserver();
  FlutterError.onError = CrashlyticsHelper.recordFlutterError;
  CrashlyticsHelper.log(DeviceInfoHelper.instance.infoMap.toString());  

  // Adapty
  Adapty.activate();
  // final installId = DeviceInfoHelper.instance.deviceId;
  // await Adapty.identify(installId);
  await Adapty.setLogLevel(AdaptyLogLevel.verbose);

  runApp();
}

Attribution incorrect data

Hello! We cant get right attribution source for our purchases:

AppsFlyerOptions options = AppsFlyerOptions(
        afDevKey: ApiKeys.appsflyerDevKey,
        appId: Platform.isIOS
            ? ApiKeys.appsflyerAppIdIos
            : ApiKeys.appsflyerAppIdAndroid,
        showDebug: true,
        timeToWaitForATTUserAuthorization: 70);
    appsflyer = AppsflyerSdk(options);

    appsflyer.onInstallConversionData((data) {
      return _applyConversionData(data);
    });
    appsflyer.onAppOpenAttribution((data) {
      return _applyConversionData(data);
    });

and here:

_applyConversionData(data) async {
    print('_applyConversionData - $data');
    print('networkUserId - ${await appsflyer.getAppsFlyerUID()}');
    await Adapty.updateAttribution(data,
        source: AdaptyAttributionNetwork.appsflyer,
        networkUserId: await appsflyer.getAppsFlyerUID());
}

Maximum of 10 attributes for the profile

Hi!

It seems if the following problem:
If the profile already had 10 custom attributes and I try to update the custom attributes to other, but also in quantity of 10, I get an error "Maximum of 10 attributes for the profile".

Probably old parameters are not overwritten, and new ones are added to them. Because of this, the total sum of parameters becomes more than 10

iOS App Crashes After Push Notification Permission

Hi,

Because of plugin's swizzling mechanism I'm getting crash error. I'm asking push notification permission request. When user click "Allow" for push permission, my app is crashing randomly, not every time. I'm getting this error on iOS devices.

My flutter version 3.0.5 and dart 2.17.6. I'm using adapty_flutter 1.0.12 and onesignal_flutter 3.3.2. This error comes from one of them but I'm not sure which one.

Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_PROTECTION_FAILURE 0x000000016f513fd0

Crashed: com.apple.main-thread
0 libicucore.A.dylib 0xb3938 icu::UnicodeString::copyFrom(icu::UnicodeString const&, signed char) + 4
1 libicucore.A.dylib 0x17e200 icu::number::LocalizedNumberFormatter::getDecimalFormatSymbols() const + 956
2 libicucore.A.dylib 0x18c2ec icu::number::impl::ImmutablePatternModifier::processQuantity(icu::number::impl::DecimalQuantity&, icu::number::impl::MicroProps&, UErrorCode&) const + 76
3 libicucore.A.dylib 0x17ed04 icu::number::LocalizedNumberFormatter::getDecimalFormatSymbols() const + 3776
4 libicucore.A.dylib 0x17ebf4 icu::number::LocalizedNumberFormatter::getDecimalFormatSymbols() const + 3504
5 libicucore.A.dylib 0x17d84c icu::number::LocalizedNumberFormatter::formatImpl(icu::number::impl::UFormattedNumberData*, UErrorCode&) const + 112
6 libicucore.A.dylib 0x1ed1c0 icu::SimpleDateFormat::zeroPaddingNumber(icu::NumberFormat const*, icu::UnicodeString&, int, int, int) const + 756
7 libicucore.A.dylib 0x1eb8c4 icu::SimpleDateFormat::subFormat(icu::UnicodeString&, char16_t, int, UDisplayContext, int, char16_t, icu::FieldPositionHandler&, icu::Calendar&, UErrorCode&) const + 1668
8 libicucore.A.dylib 0x1eb05c icu::SimpleDateFormat::_format(icu::Calendar&, icu::UnicodeString&, icu::FieldPositionHandler&, UErrorCode&) const + 520
9 libicucore.A.dylib 0x1eae34 icu::SimpleDateFormat::format(icu::Calendar&, icu::UnicodeString&, icu::FieldPosition&) const + 84
10 libicucore.A.dylib 0x116770 icu::DateFormat::format(double, icu::UnicodeString&, icu::FieldPosition&) const + 176
11 libicucore.A.dylib 0x220760 udat_format + 352
12 CoreFoundation 0x3ebb8 __cficu_udat_format + 68
13 CoreFoundation 0x4ca18 CFDateFormatterCreateStringWithAbsoluteTime + 172
14 CoreFoundation 0xaddec -[NSDate descriptionWithLocale:] + 496
15 Foundation 0x1cb04 _NSDescriptionWithLocaleFunc + 68
16 CoreFoundation 0x9b8c __CFStringAppendFormatCore + 11120
17 CoreFoundation 0x2898c CFStringCreateWithFormatAndArgumentsReturningMetadata + 176
18 Foundation 0x19f30 +[NSString stringWithFormat:] + 76
19 OneSignal 0xfae0 +[OneSignal shouldRegisterUserAfterDelay] + 164
20 OneSignal 0xf974 +[OneSignal registerUser] + 72
21 OneSignal 0xf1a4 +[OneSignal updateDeviceToken:] + 296
22 OneSignal 0x12bf4 +[OneSignal didRegisterForRemoteNotifications:deviceToken:] + 228
23 OneSignal 0x2e744 -[OneSignalAppDelegate oneSignalDidRegisterForRemoteNotifications:deviceToken:] + 136
24 Adapty 0x21848 $s6Adapty19AppDelegateSwizzlerC20swizzled_application33_882DEC7821489E8AC05D52AA1ADD858BLL_48didRegisterForRemoteNotificationsWithDeviceTokenySo13UIApplicationC_10Foundation4DataVtFTf4nnd_n + 180
25 Adapty 0x21720 $s6Adapty19AppDelegateSwizzlerC20swizzled_application33_882DEC7821489E8AC05D52AA1ADD858BLL_48didRegisterForRemoteNotificationsWithDeviceTokenySo13UIApplicationC_10Foundation4DataVtFTo + 92
26 CoreFoundation 0x21b24 invoking
+ 148
27 CoreFoundation 0x3f610 -[NSInvocation invoke] + 468
28 OneSignalCore 0x4984 +[SwizzlingForwarder callSelector:onObject:withArgs:] + 312
29 OneSignal 0x2e7b4 -[OneSignalAppDelegate oneSignalDidRegisterForRemoteNotifications:deviceToken:] + 248
30 UIKitCore 0xf6953c __63-[UIApplication pushRegistry:didUpdatePushCredentials:forType:]_block_invoke + 180
31 libdispatch.dylib 0x1e6c _dispatch_call_block_and_release + 92
32 libdispatch.dylib 0x3a30 _dispatch_client_callout + 148
33 libdispatch.dylib 0x11f48 _dispatch_main_queue_drain + 468
34 libdispatch.dylib 0x11b98 _dispatch_main_queue_callback_4CF + 312
35 CoreFoundation 0x51800 CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE + 248
36 CoreFoundation 0xb704 __CFRunLoopRun + 180
37 CoreFoundation 0x1ebc8 CFRunLoopRunSpecific + 92
38 GraphicsServices 0x1374 GSEventRunModal + 148
39 UIKitCore 0x514648 -[UIApplication _run] + 468
40 UIKitCore 0x295d90 UIApplicationMain + 312
41 Runner 0x58c8 main + 7 (AppDelegate.swift:7)
42 ??? 0x100fa5ce4 $s6Adapty19AppDelegateSwizzlerC20swizzled_application33_882DEC7821489E8AC05D52AA1ADD858BLL_48didRegisterForRemoteNotificationsWithDeviceTokenySo13UIApplicationC_10Foundation4DataVtFTf4nnd_n + 180

Error building app on Android - HELP

it works and builds fine on IOS

but on android I get

Type inference failed: Not enough information to infer parameter R in inline fun <T, R> T.let(block: (T) -> R): R
Please specify it explicitly.

/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/adapty_flutter-0.3.6/android/src/main/kotlin/com/adapty/flutter/AdaptyFlutterPlugin.kt: (162, 101): Unresolved reference: logShowPaywall

  • What went wrong:
    Execution failed for task ':adapty_flutter:compileDebugKotlin'.

Compilation error. See log for more details

im using adapty_flutter: ^0.3.4

getPromo method only for iOS

Can you please tell me why the getPromo method can only be used on ios?

image

If you look at the android part of the library's implementation, you can see that there is call processing.

Please make the method work on both platforms

image

Google Play Console Resubscribe

After uploading APK with Adapty SDK, Google play console states in 'subscriptions' section:
"Resubscribe is not currently available for your users because your app does not use Billing Library 2.0 in all active APKs."

Make purchase mapping error ( iOS)

[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: FormatException: Trying to read yyyy from 2020-12-15T18:53:38+0300 at position 0
#0 _DateFormatField.throwFormatException (package:intl/src/intl/date_format_field.dart:87:5)
#1 _DateFormatPatternField.parseField (package:intl/src/intl/date_format_field.dart:337:7)
#2 _DateFormatPatternField.parse (package:intl/src/intl/date_format_field.dart:250:5)
#3 DateFormat._parse (package:intl/src/intl/date_format.dart:374:13)
#4 DateFormat.parse (package:intl/src/intl/date_format.dart:303:7)
#5 MapExtension.dateTimeOrNull (package:adapty_flutter/helpers/extensions.dart:7:46)
#6 new AdaptyAccessLevelInfo.fromJson (package:adapty_flutter/models/adapty_access_level_info.dart:100:28)
#7 new AdaptyPurchaserInfo.fromJson. (package:adapty_flutter/models/adapty_purchaser_info.dart:30:156)
#8 MapMixin.map (dart:collection/maps.dart:170:28)
#9 new AdaptyPurchaserInfo.fromJson (package:adapty_flutter/models/adapty_purchaser_info.dart:30:100)
#10 new MakePurchaseResult.fromJson (package:adapty_flutter/results/make_purchase_result.dart:15:85)
#11 Adapty.makePurchase (package:adapty_flutter/adapty_flutter.dart:86:31)

Adapty.purchaserInfoUpdateStream not getting renew events

According to the docs at https://docs.adapty.io/docs/flutter-subscription-status section "Listening for subscription status updates" is seems that you should get subscription events (such as a renew event) via Adapty.purchaserInfoUpdateStream.listen((purchaserInfo)

But looking at the code, the only time anything is put on that stream _purchaserInfoUpdateController is when you explicitly call Adapty.getPurchaserInfo(). As it only adds to that stream in _handleIncomingMethodCall

I can also see that a background call to getPurchaserInfo() seems to happen every 1 minute in the background, but that doesn't update the purchaserInfoUpdateStream either... At least it doesn't for iOS test subscriptions that renew every 5 minutes.

2021-11-18 19:30:17.057-0800 [Adapty v1.16.3(1)] - INFO.
Calling now: getPurchaserInfo(forceUpdate:_:)

The Adapty.getPurchaserInfo() returns a Future with the current state, so it seems that Adapty.purchaserInfoUpdateStream should return new states as they happen. Do I have this wrong?

I could potentially also poll every minute (by calling Adapty.getPurchaserInfo()) for the current state... which seems redundant since you're already doing that.

Update Native Adapty Dependencies

Hi,

This plugin uses native iOS and Android SDK, but very old ones. Could you update native dependencies to latest ones?

For example;
Adapty Flutter 1.0.2 plugin is using Native Adapty iOS 1.16.10. Actually there is 1.17.7 is available for Native iOS. We are following nearly 10 versions behind.

Thanks,

Android get paywalls bug

E/flutter ( 8702): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: type 'Null' is not a subtype of type 'String'
E/flutter ( 8702): #0 new AdaptyProduct.fromMap (package:adapty_flutter/models/adapty_product.dart:98:24)
E/flutter ( 8702): #1 new AdaptyPaywall.fromMap. (package:adapty_flutter/models/adapty_paywall.dart:43:138)
E/flutter ( 8702): #2 MappedListIterable.elementAt (dart:_internal/iterable.dart:411:31)
E/flutter ( 8702): #3 ListIterator.moveNext (dart:_internal/iterable.dart:340:26)
E/flutter ( 8702): #4 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:188:27)
E/flutter ( 8702): #5 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
E/flutter ( 8702): #6 new List.of (dart:core-patch/array_patch.dart:50:28)
E/flutter ( 8702): #7 ListIterable.toList (dart:_internal/iterable.dart:211:44)
E/flutter ( 8702): #8 new AdaptyPaywall.fromMap (package:adapty_flutter/models/adapty_paywall.dart:43:153)
E/flutter ( 8702): #9 new GetPaywallsResult.fromMap. (package:adapty_flutter/results/get_paywalls_result.dart:10:105)
E/flutter ( 8702): #10 MappedListIterable.elementAt (dart:_internal/iterable.dart:411:31)
E/flutter ( 8702): #11 ListIterator.moveNext (dart:_internal/iterable.dart:340:26)
E/flutter ( 8702): #12 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:188:27)
E/flutter ( 8702): #13 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
E/flutter ( 8702): #14 new List.of (dart:core-patch/array_patch.dart:50:28)
E/flutter ( 8702): #15 ListIterable.toList (dart:_internal/iterable.dart:211:44)
E/flutter ( 8702): #16 new GetPaywallsResult.fromMap (package:adapty_flutter/results/get_paywalls_result.dart:10:117)
E/flutter ( 8702): #17 Adapty.getPaywalls (package:adapty_flutter/adapty_flutter.dart:62:30)

Product model crash (iOS)

Crashed: com.apple.main-thread
0 libswiftFoundation.dylib 0x103542f04 static Locale.unconditionallyBridgeFromObjectiveC(:) + 4421201668
1 Adapty 0x1008e5198 $s6Adapty12ProductModelC02skB0So9SKProductCSgvW + 480
2 Adapty 0x1008d1c38 $s6Adapty10IAPManagerC12paymentQueue_21shouldAddStorePayment3forSbSo09SKPaymentD0C_So0J0CSo9SKProductCtFTf4dnnn_n + 604
3 Adapty 0x1008cf80c $s6Adapty10IAPManagerC12paymentQueue_21shouldAddStorePayment3forSbSo09SKPaymentD0C_So0J0CSo9SKProductCtFTo + 96
4 StoreKit 0x196628d6c __NotifyObserverAboutPendingAppStorePayments + 160
5 CoreFoundation 0x182584680 CFArrayApplyFunction + 80
6 StoreKit 0x196628c60 -[SKPaymentQueue _notifyObserversAboutPurchaseIntentsForProducts:] + 352
7 StoreKit 0x196627638 -[SKPaymentQueue _sendAppStorePendingPaymentsRequestForMessage:] + 192
8 StoreKit 0x196628378 __44-[SKPaymentQueue _handleMessage:connection:]block_invoke + 168
9 libdispatch.dylib 0x181fb0aa0 dispatch_call_block_and_release + 24
10 libdispatch.dylib 0x181fb0a60 dispatch_client_callout + 16
11 libdispatch.dylib 0x181fbd65c dispatch_main_queue_callback_4CF$VARIANT$mp + 1012
12 CoreFoundation 0x182667070 CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE + 12
13 CoreFoundation 0x182664bc8 __CFRunLoopRun + 2272
14 CoreFoundation 0x182584da8 CFRunLoopRunSpecific + 552
15 GraphicsServices 0x184569020 GSEventRunModal + 100
16 UIKit 0x18c5a1758 UIApplicationMain + 236
17 libswiftUIKit.dylib 0x10379d468 UIApplicationMain(
:
:
:
:) + 3912
18 Runner 0x1005199d0 main + 4370700752 (NotificationsAppDelegate.swift:4370700752)
19 libdyld.dylib 0x182015fc0 start + 4

PushHandler not working with target 31

E/MethodChannel#flutter.adapty.com/adapty(19824): java.lang.IllegalArgumentException: dev.optimist.worddaily: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
E/MethodChannel#flutter.adapty.com/adapty(19824): Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
E/MethodChannel#flutter.adapty.com/adapty(19824): at android.app.PendingIntent.checkFlags(PendingIntent.java:375)
E/MethodChannel#flutter.adapty.com/adapty(19824): at android.app.PendingIntent.getActivityAsUser(PendingIntent.java:458)
E/MethodChannel#flutter.adapty.com/adapty(19824): at android.app.PendingIntent.getActivity(PendingIntent.java:444)
E/MethodChannel#flutter.adapty.com/adapty(19824): at android.app.PendingIntent.getActivity(PendingIntent.java:408)
E/MethodChannel#flutter.adapty.com/adapty(19824): at com.adapty.push.AdaptyPushHandler.createPendingIntent(AdaptyPushHandler.kt:73)
E/MethodChannel#flutter.adapty.com/adapty(19824): at com.adapty.push.AdaptyPushHandler.buildNotification(AdaptyPushHandler.kt:61)
E/MethodChannel#flutter.adapty.com/adapty(19824): at com.adapty.push.AdaptyPushHandler.handleNotification(AdaptyPushHandler.kt:40)
E/MethodChannel#flutter.adapty.com/adapty(19824): at com.adapty.flutter.AdaptyFlutterPlugin.handlePushReceived(AdaptyFlutterPlugin.kt:355)
E/MethodChannel#flutter.adapty.com/adapty(19824): at com.adapty.flutter.AdaptyFlutterPlugin.onMethodCall(AdaptyFlutterPlugin.kt:87)
E/MethodChannel#flutter.adapty.com/adapty(19824): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/MethodChannel#flutter.adapty.com/adapty(19824): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:84)
E/MethodChannel#flutter.adapty.com/adapty(19824): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:869)
E/MethodChannel#flutter.adapty.com/adapty(19824): at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#flutter.adapty.com/adapty(19824): at android.os.MessageQueue.next(MessageQueue.java:335)
E/MethodChannel#flutter.adapty.com/adapty(19824): at android.os.Looper.loopOnce(Looper.java:161)
E/MethodChannel#flutter.adapty.com/adapty(19824): at android.os.Looper.loop(Looper.java:288)
E/MethodChannel#flutter.adapty.com/adapty(19824): at android.app.ActivityThread.main(ActivityThread.java:7838)
E/MethodChannel#flutter.adapty.com/adapty(19824): at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#flutter.adapty.com/adapty(19824): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/MethodChannel#flutter.adapty.com/adapty(19824): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

Android build fails with Type inference failed

Android is unable to build on Flutter 2.2.0

Running Gradle task 'assembleDevRelease'...                     
e: /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/adapty_flutter-1.0.0/android/src/main/kotlin/com/adapty/flutter/AdaptyFlutterPlugin.kt: (162, 89): Type inference failed: Not enough information to infer parameter R in inline fun <T, R> T.let(block: (T) -> R): R
Please specify it explicitly.
e: /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/adapty_flutter-1.0.0/android/src/main/kotlin/com/adapty/flutter/AdaptyFlutterPlugin.kt: (162, 101): Unresolved reference: logShowPaywall
e: /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/adapty_flutter-1.0.0/android/src/main/kotlin/com/adapty/flutter/AdaptyFlutterPlugin.kt: (174, 113): Unresolved reference: from
FAILURE: Build failed with an exception.

Adapty calls to AWS every 30 seconds lead to error 400: The security token included in the request is invalid.

We are using Adapty Flutter plugin as follows:

  adapty_flutter:  '1.0.10'

When running in debug mode on Android with Adapty.setLogLevel(adaptyDebug(appData.objects["adaptyDebug"]));, we see in the console approximately every 30 seconds calls made by Adapty to AWS ending up in error:

D/Adapty_v1.9.0(11531): POST https://kinesis.us-east-1.amazonaws.com/ Body: {"Records":[{"Data":"XXX","PartitionKey":"XXX"},{"Data":"XXX","PartitionKey":"XXX"},{"Data":"XXX","PartitionKey":"XXX"},{"Data":"XXX","PartitionKey":"XXX"},{"Data":"XXX","PartitionKey":"XXX"},{"Data":"XXX","PartitionKey":"XXX"},{"Data":"XXX","PartitionKey":"XXX"},{"Data":"XXX","PartitionKey":"XXX"},{"Data":"XXX
I/System.out(11531): (HTTPLog)-Static: isSBSettingEnabled false
I/System.out(11531): (HTTPLog)-Static: isSBSettingEnabled false
E/Adapty_v1.9.0(11531): Request is unsuccessful. https://kinesis.us-east-1.amazonaws.com/ Code: 400, Response: {"__type":"UnrecognizedClientException","message":"The security token included in the request is invalid."}

Some strings above have been replaced by XXX.

While this doesn't seem to affect the app behavior, we were wondering:

  1. Whether there was a way to avoid those calls?
  2. Whether those calls are necessary?
  3. Whether there is a way to get a "valid security token" for those calls?

We placed some breakpoints on the various calls from the app to Adapty features and nothing seems to cause those calls except the normal use of Adapty.

We were able to answer our first question with this line:

        Adapty.setExternalAnalyticsEnabled(false);

Android update attribution "Reply already submitted" crash

E/AndroidRuntime(20367): java.lang.IllegalStateException: Reply already submitted
E/AndroidRuntime(20367): at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:139)
E/AndroidRuntime(20367): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:238)
E/AndroidRuntime(20367): at com.adapty.flutter.AdaptyFlutterPlugin.emptyResultOrError(AdaptyFlutterPlugin.kt:331)
E/AndroidRuntime(20367): at com.adapty.flutter.AdaptyFlutterPlugin.access$emptyResultOrError(AdaptyFlutterPlugin.kt:33)
E/AndroidRuntime(20367): at com.adapty.flutter.AdaptyFlutterPlugin$handleUpdateAttribution$1$2.invoke(AdaptyFlutterPlugin.kt:238)
E/AndroidRuntime(20367): at com.adapty.flutter.AdaptyFlutterPlugin$handleUpdateAttribution$1$2.invoke(AdaptyFlutterPlugin.kt:33)
E/AndroidRuntime(20367): at com.adapty.Adapty$Companion$updateAttribution$1$1.success(Adapty.kt:640)
E/AndroidRuntime(20367): at com.adapty.api.ApiClient$success$myRunnable$1.run(ApiClient.kt:320)
E/AndroidRuntime(20367): at android.os.Handler.handleCallback(Handler.java:938)
E/AndroidRuntime(20367): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(20367): at android.os.Looper.loop(Looper.java:223)
E/AndroidRuntime(20367): at android.app.ActivityThread.main(ActivityThread.java:7656)
E/AndroidRuntime(20367): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(20367): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
E/AndroidRuntime(20367): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

Why does the user have to sign in with his apple id when first installing an app using Adapty?

It kind of affects the UX of the app I am developing. When you open my app, the first screen is a sign in screen with email+password, apple id, facebook or google account.
Now, after adding the adapty SDK and calling Adapty.activate(), a popup opens where the user has to sign in with his apple id.
I hope you understand that it affects the UX negatively. How can I avoid that?

Don't work when build APK or Bundle

Все работает прекрасно внутри IDE. Все работает прекрасно для iOS. Для андроид делал тестовые подписки на реальном устройстве находясь внутри IDE (Android Studio, Flutter)
photo_2022-02-06_22-00-48

Как только генерю APK или Bundle все перестает работать!!!
попытка сделать Adapty.activate(); дает  error code 0

Сравнил свой и ваш AndroidManifest.xml, сделал правки в MainActivity.kt как в вашем экзампл на гите, скопировал весь ваш экзампл и запустил со своими ключами в
IMG_0254
андроидМанифесте... результат на скриншоте

Прошу помочь найти причину!

Sandbox testing failes

Apple review team throws an issue like this:
When validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple’s test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code "Sandbox receipt used in production," you should validate against the test environment instead.

In code I use final MakePurchaseResult makePurchaseResult = await Adapty.makePurchase(product); and then grant access if the user has 'premium' level. However, in Sandbox this works only the first time. The second time I want to buy a subscription, Adapty doesn't throw any errors and just skip my make purchase method with no feedback:
[Adapty v1.12.7(1)] - INFO.
-Calling now: makePurchase(product:offerId:completion:)
[Adapty v1.12.7(1)] - INFO.
Calling now: extendedValidateReceipt(_:variationId:vendorProductId:transactionId:originalPrice:discountPrice:currencyCode:regionCode:promotionalOfferId:unit:numberOfUnits:paymentMode:completion:)
[Adapty v1.12.7(1)] - INFO.
Updating local purchaserInfo: Optional(nonSubscriptions: [:], subscriptions: ["subscription_m": vendorProductId: subscription_m, unsubscribedAt: 2021-07-27 15:42:25 +0000, isRefund: false, expiresAt: 2021-07-27 15:42:25 +0000, willRenew: false, isInGracePeriod: false, store: app_store, activatedAt: 2021-07-27 15:15:27 +0000, isSandbox: true, cancellationReason: voluntarily_cancelled, billingIssueDetectedAt: 2021-07-27 15:42:25 +0000, vendorOriginalTransactionId: 1000000849031977, renewedAt: 2021-07-27 15:37:25 +0000, vendorTransactionId: 1000000849044325, isActive: false, isLifetime: false], accessLevels: ["premium": vendorProductId: subscription_m, unsubscribedAt: 2021-07-27 15:42:25 +0000, isRefund: false, expiresAt: 2021-07-27 15:42:25 +0000, willRenew: false, isInGracePeriod: false, store: app_store, id: premium, activatedAt: 2021-07-27 15:15:27 +0000, renewedAt: 2021-07-27 15:37:25 +0000, cancellationReason: voluntarily_cancelled, billingIssueDetectedAt: 2021-07-27 15:42:25 +0000, isActive: false, isLifetime: false]), with profileId: Optional("13bd0222-f6eb-437a-817e-d38d66bd124e"), customerUserId: nil
[Adapty v1.12.7(1)] - INFO.
Successfully purchased product: subscription_m

Then checking 'premium' level - active premium? false

How to deal with this trouble?? we need to sent to AppStore an app, but purchases don't work

Product model period crash (Android)

java.lang.IllegalArgumentException:
at java.lang.Enum.valueOf (Enum.java:258)
at com.adapty.api.entity.paywalls.ProductModel$PeriodUnit.valueOf (ProductModel.java:2)
at com.adapty.api.entity.paywalls.ProductModel$ProductSubscriptionPeriodModel.getUnit (ProductModel.java:15)
at com.adapty.flutter.models.ProductSubscriptionPeriodFlutterModel$Companion.from (ProductSubscriptionPeriodFlutterModel.java:7)
at com.adapty.flutter.models.ProductFlutterModel$Companion.from (ProductFlutterModel.java:101)
at com.adapty.flutter.models.PaywallFlutterModel$Companion.from (PaywallFlutterModel.java:88)
at com.adapty.flutter.AdaptyFlutterPlugin$handleGetPaywalls$1.invoke (AdaptyFlutterPlugin.java:101)
at com.adapty.flutter.AdaptyFlutterPlugin$handleGetPaywalls$1.invoke (AdaptyFlutterPlugin.java:6)
at com.adapty.Adapty$Companion$getPaywallsInQueue$1$onResult$2.onResult (Adapty.java:171)
at com.adapty.purchase.InAppPurchasesInfo.iterator (InAppPurchasesInfo.java:13)
at com.adapty.purchase.InAppPurchasesInfo.access$iterator (InAppPurchasesInfo.java)
at com.adapty.purchase.InAppPurchasesInfo$querySkuDetailsSubs$1$1$1.run (InAppPurchasesInfo.java:6)
at android.os.Handler.handleCallback (Handler.java:873)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:214)
at android.app.ActivityThread.main (ActivityThread.java:7078)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:964)

Error on building for Android

After adding the SDK I get this error while trying to launch my app:

e: /Users/guillaume/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/adapty_flutter-1.0.3/android/src/main/kotlin/com/adapty/flutter/AdaptyFlutterPlugin.kt: (239, 42): Expecting an argument
e: /Users/guillaume/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/adapty_flutter-1.0.3/android/src/main/kotlin/com/adapty/flutter/AdaptyFlutterPlugin.kt: (207, 63): Unresolved reference: from
e: /Users/guillaume/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/adapty_flutter-1.0.3/android/src/main/kotlin/com/adapty/flutter/AdaptyFlutterPlugin.kt: (489, 60): Unresolved reference: from

How can I solve this? Thanks.

flutter: App User ID not being linked with Adapty ID on Production environment

Hi there!

We are experiencing some kind of issue, where our internal App User ID is not linked with yours Adapty ID on Production environment. But seems to be woking fine on Sandbox.

attributes

These users are not being tracked by our analytics systems, so we can not know whenever user has subscription or not. We are using Firebase Authentication and identifying users on auth state changes stream.

flutter doctor -v
[✓] Flutter (Channel stable, 2.8.1, on macOS 12.0.1 21A559 darwin-arm, locale ru-RU)
    • Flutter version 2.8.1 at /Users/alex/Developer/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 77d935af4d (12 days ago), 2021-12-16 08:37:33 -0800
    • Engine revision 890a5fca2e
    • Dart version 2.15.1

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/alex/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • ANDROID_HOME = /Users/alex/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2020.3)
    • 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.10+0-b96-7249189)

[✓] VS Code (version 1.63.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.29.0

[✓] Connected device (2 available)
    • iPhone 13 Pro я (mobile) • 00000000-0000000000000000 • ios            • iOS 15.1.1 19B81
    • Chrome (web)             • chrome                    • web-javascript • Google Chrome 96.0.4664.110

• No issues found!
flutter pub deps --no-dev
Dart SDK 2.15.1
Flutter SDK 2.8.1
vsmrk_user 1.1.117+126
|-- adapty_flutter 1.0.9
|   '-- flutter...
|-- agora_rtc_engine 4.0.7
|   |-- flutter...
|   |-- flutter_web_plugins 0.0.0
|   |   |-- characters...
|   |   |-- collection...
|   |   |-- flutter...
|   |   |-- js...
|   |   |-- meta...
|   |   |-- typed_data...
|   |   '-- vector_math...
|   '-- json_annotation...
|-- agora_rtm 1.0.1
|   '-- flutter...
|-- app_tracking_transparency 2.0.2+1
|   '-- flutter...
|-- auto_size_text 3.0.0
|   '-- flutter...
|-- badges 2.0.2
|   '-- flutter...
|-- cached_network_image 3.2.0
|   |-- cached_network_image_platform_interface 1.0.0
|   |   |-- flutter...
|   |   '-- flutter_cache_manager...
|   |-- cached_network_image_web 1.0.1
|   |   |-- cached_network_image_platform_interface...
|   |   |-- flutter...
|   |   '-- flutter_cache_manager...
|   |-- flutter...
|   |-- flutter_cache_manager 3.3.0
|   |   |-- clock...
|   |   |-- collection...
|   |   |-- file...
|   |   |-- flutter...
|   |   |-- http...
|   |   |-- path...
|   |   |-- path_provider 2.0.8
|   |   |   |-- flutter...
|   |   |   |-- path_provider_android 2.0.11
|   |   |   |   |-- flutter...
|   |   |   |   '-- path_provider_platform_interface...
|   |   |   |-- path_provider_ios 2.0.7
|   |   |   |   |-- flutter...
|   |   |   |   '-- path_provider_platform_interface...
|   |   |   |-- path_provider_linux...
|   |   |   |-- path_provider_macos 2.0.4
|   |   |   |   |-- flutter...
|   |   |   |   |-- meta...
|   |   |   |   '-- path_provider_platform_interface...
|   |   |   |-- path_provider_platform_interface...
|   |   |   '-- path_provider_windows...
|   |   |-- pedantic 1.11.1
|   |   |-- rxdart 0.27.3
|   |   |-- sqflite 2.0.1
|   |   |   |-- flutter...
|   |   |   |-- path...
|   |   |   '-- sqflite_common 2.1.0
|   |   |       |-- meta...
|   |   |       |-- path...
|   |   |       '-- synchronized 3.0.0
|   |   '-- uuid...
|   '-- octo_image 1.0.1
|       |-- flutter...
|       '-- flutter_blurhash 0.6.0
|           |-- flutter...
|           |-- meta...
|           '-- pedantic...
|-- chewie 1.2.2
|   |-- cupertino_icons 1.0.4
|   |-- flutter...
|   |-- provider...
|   |-- video_player...
|   '-- wakelock...
|-- cloud_firestore 3.1.5
|   |-- cloud_firestore_platform_interface 5.4.10
|   |   |-- collection...
|   |   |-- firebase_core...
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   |-- cloud_firestore_web 2.6.5
|   |   |-- cloud_firestore_platform_interface...
|   |   |-- collection...
|   |   |-- firebase_core...
|   |   |-- firebase_core_web...
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   '-- js...
|   |-- collection...
|   |-- firebase_core...
|   |-- firebase_core_platform_interface 4.2.3
|   |   |-- collection...
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   |-- flutter...
|   '-- meta...
|-- cloud_functions 3.2.4
|   |-- cloud_functions_platform_interface 5.0.19
|   |   |-- firebase_core...
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   |-- cloud_functions_web 4.2.5
|   |   |-- cloud_functions_platform_interface...
|   |   |-- firebase_core...
|   |   |-- firebase_core_web...
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   '-- js...
|   |-- firebase_core...
|   |-- firebase_core_platform_interface...
|   '-- flutter...
|-- crypto 3.0.1
|   |-- collection...
|   '-- typed_data...
|-- device_info 2.0.3
|   |-- device_info_platform_interface 2.0.1
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface 2.0.2
|   |       '-- meta...
|   '-- flutter...
|-- dio 4.0.4
|   |-- http_parser 4.0.0
|   |   |-- charcode 1.3.1
|   |   |-- collection...
|   |   |-- source_span 1.8.1
|   |   |   |-- collection...
|   |   |   |-- path...
|   |   |   '-- term_glyph 1.2.0
|   |   |-- string_scanner 1.1.0
|   |   |   |-- charcode...
|   |   |   '-- source_span...
|   |   '-- typed_data...
|   '-- path...
|-- dotted_border 2.0.0+2
|   |-- flutter...
|   '-- path_drawing 1.0.0
|       |-- flutter...
|       |-- meta...
|       |-- path_parsing 1.0.0
|       |   |-- meta...
|       |   '-- vector_math...
|       '-- vector_math...
|-- facebook_app_events 0.14.7
|   '-- flutter...
|-- firebase_analytics 9.0.4
|   |-- firebase_analytics_platform_interface 3.0.3
|   |   |-- firebase_core...
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   |-- firebase_analytics_web 0.4.0+4
|   |   |-- firebase_analytics_platform_interface...
|   |   |-- firebase_core...
|   |   |-- firebase_core_web...
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   '-- js...
|   |-- firebase_core...
|   |-- firebase_core_platform_interface...
|   '-- flutter...
|-- firebase_auth 3.3.4
|   |-- firebase_auth_platform_interface 6.1.9
|   |   |-- firebase_core...
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   |-- firebase_auth_web 3.3.5
|   |   |-- firebase_auth_platform_interface...
|   |   |-- firebase_core...
|   |   |-- firebase_core_web...
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   |-- http_parser...
|   |   |-- intl...
|   |   |-- js...
|   |   '-- meta...
|   |-- firebase_core...
|   |-- firebase_core_platform_interface...
|   |-- flutter...
|   '-- meta...
|-- firebase_core 1.10.6
|   |-- firebase_core_platform_interface...
|   |-- firebase_core_web 1.5.3
|   |   |-- firebase_core_platform_interface...
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   |-- js...
|   |   '-- meta...
|   |-- flutter...
|   '-- meta...
|-- firebase_database 9.0.4
|   |-- firebase_core...
|   |-- firebase_core_platform_interface...
|   |-- firebase_database_platform_interface 0.2.0+3
|   |   |-- collection...
|   |   |-- firebase_core...
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   |-- firebase_database_web 0.2.0+3
|   |   |-- firebase_core...
|   |   |-- firebase_core_web...
|   |   |-- firebase_database_platform_interface...
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   '-- js...
|   '-- flutter...
|-- firebase_in_app_messaging 0.6.0+5
|   |-- firebase_core...
|   |-- firebase_core_platform_interface...
|   |-- firebase_in_app_messaging_platform_interface 0.2.0+5
|   |   |-- firebase_core...
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   |-- flutter...
|   '-- meta...
|-- firebase_messaging 11.2.4
|   |-- firebase_core...
|   |-- firebase_core_platform_interface...
|   |-- firebase_messaging_platform_interface 3.1.4
|   |   |-- firebase_core...
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   |-- firebase_messaging_web 2.2.5
|   |   |-- firebase_core...
|   |   |-- firebase_core_web...
|   |   |-- firebase_messaging_platform_interface...
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   |-- js...
|   |   '-- meta...
|   |-- flutter...
|   '-- meta...
|-- firebase_storage 10.2.4
|   |-- firebase_core...
|   |-- firebase_core_platform_interface...
|   |-- firebase_storage_platform_interface 4.0.11
|   |   |-- collection...
|   |   |-- firebase_core...
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   |-- firebase_storage_web 3.2.5
|   |   |-- async...
|   |   |-- firebase_core...
|   |   |-- firebase_core_web...
|   |   |-- firebase_storage_platform_interface...
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   |-- http...
|   |   |-- js...
|   |   '-- meta...
|   '-- flutter...
|-- flutter 0.0.0
|   |-- characters 1.2.0
|   |-- collection 1.15.0
|   |-- meta 1.7.0
|   |-- sky_engine 0.0.99
|   |-- typed_data 1.3.0
|   |   '-- collection...
|   '-- vector_math 2.1.1
|-- flutter_bloc 8.0.0
|   |-- bloc 8.0.1
|   |   '-- meta...
|   |-- flutter...
|   '-- provider...
|-- flutter_datetime_picker 1.5.1
|   '-- flutter...
|-- flutter_dotenv 5.0.2
|   '-- flutter...
|-- flutter_facebook_auth 3.5.7
|   |-- flutter...
|   |-- flutter_facebook_auth_platform_interface 2.7.1
|   |   |-- flutter...
|   |   '-- plugin_platform_interface...
|   '-- flutter_facebook_auth_web 2.6.0+2
|       |-- flutter...
|       |-- flutter_facebook_auth_platform_interface...
|       |-- flutter_web_plugins...
|       '-- js...
|-- flutter_html 2.2.1
|   |-- chewie...
|   |-- chewie_audio 1.2.0
|   |   |-- cupertino_icons...
|   |   |-- flutter...
|   |   '-- video_player...
|   |-- collection...
|   |-- csslib 0.17.1
|   |   '-- source_span...
|   |-- flutter...
|   |-- flutter_layout_grid 1.0.3
|   |   |-- collection...
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- quiver...
|   |-- flutter_math_fork 0.6.0
|   |   |-- collection...
|   |   |-- flutter...
|   |   |-- flutter_svg...
|   |   |-- meta...
|   |   |-- provider...
|   |   '-- tuple...
|   |-- flutter_svg...
|   |-- html 0.15.0
|   |   |-- csslib...
|   |   '-- source_span...
|   |-- numerus 1.1.1
|   |-- video_player...
|   '-- webview_flutter 2.8.0
|       |-- flutter...
|       |-- webview_flutter_android 2.8.2
|       |   |-- flutter...
|       |   '-- webview_flutter_platform_interface...
|       |-- webview_flutter_platform_interface 1.8.0
|       |   |-- flutter...
|       |   '-- plugin_platform_interface...
|       '-- webview_flutter_wkwebview 2.7.1
|           |-- flutter...
|           '-- webview_flutter_platform_interface...
|-- flutter_linkify 5.0.2
|   |-- flutter...
|   '-- linkify 4.1.0
|-- flutter_local_notifications 9.1.5
|   |-- clock...
|   |-- flutter...
|   |-- flutter_local_notifications_linux 0.4.0
|   |   |-- dbus 0.6.6
|   |   |   |-- args 2.3.0
|   |   |   |-- ffi...
|   |   |   |-- meta...
|   |   |   '-- xml...
|   |   |-- flutter...
|   |   |-- flutter_local_notifications_platform_interface...
|   |   |-- path...
|   |   '-- xdg_directories 0.2.0
|   |       |-- meta...
|   |       |-- path...
|   |       '-- process 4.2.4
|   |           |-- file...
|   |           |-- path...
|   |           '-- platform...
|   |-- flutter_local_notifications_platform_interface 5.0.0
|   |   |-- flutter...
|   |   '-- plugin_platform_interface...
|   '-- timezone 0.8.0
|       '-- path...
|-- flutter_localizations 0.0.0
|   |-- characters...
|   |-- clock 1.1.0
|   |-- collection...
|   |-- flutter...
|   |-- intl...
|   |-- meta...
|   |-- path 1.8.0
|   |-- typed_data...
|   '-- vector_math...
|-- flutter_map 0.14.0
|   |-- async...
|   |-- collection...
|   |-- flutter...
|   |-- http 0.13.4
|   |   |-- async...
|   |   |-- http_parser...
|   |   |-- meta...
|   |   '-- path...
|   |-- intl...
|   |-- latlong2 0.8.1
|   |   '-- intl...
|   |-- meta...
|   |-- positioned_tap_detector_2 1.0.4
|   |   '-- flutter...
|   |-- proj4dart 2.0.0
|   |   |-- meta...
|   |   |-- mgrs_dart 2.0.0
|   |   |   '-- unicode 0.3.1
|   |   |       '-- lists 1.0.1
|   |   |           '-- meta...
|   |   '-- wkt_parser 2.0.0
|   |-- transparent_image 2.0.0
|   |-- tuple 2.0.0
|   |   '-- quiver...
|   '-- vector_math...
|-- flutter_native_timezone 2.0.0
|   |-- flutter...
|   |-- flutter_web_plugins...
|   '-- js 0.6.3
|-- flutter_rating_bar 4.0.0
|   '-- flutter...
|-- flutter_sticky_header 0.6.0
|   |-- flutter...
|   '-- value_layout_builder 0.3.1
|       '-- flutter...
|-- flutter_svg 1.0.0
|   |-- flutter...
|   |-- meta...
|   |-- path_drawing...
|   |-- vector_math...
|   '-- xml 5.3.1
|       |-- collection...
|       |-- meta...
|       '-- petitparser 4.4.0
|           '-- meta...
|-- freezed_annotation 1.1.0
|   |-- collection...
|   |-- json_annotation...
|   '-- meta...
|-- get_it 7.2.0
|   |-- async 2.8.2
|   |   |-- collection...
|   |   '-- meta...
|   '-- collection...
|-- google_sign_in 5.2.1
|   |-- flutter...
|   |-- google_sign_in_platform_interface 2.1.0
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- quiver 3.0.1+1
|   |       '-- matcher 0.12.11
|   |           '-- stack_trace...
|   |-- google_sign_in_web 0.10.0+3
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   |-- google_sign_in_platform_interface...
|   |   |-- js...
|   |   '-- meta...
|   '-- meta...
|-- image_picker 0.8.4+4
|   |-- flutter...
|   |-- flutter_plugin_android_lifecycle 2.0.5
|   |   '-- flutter...
|   |-- image_picker_for_web 2.1.4
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   |-- image_picker_platform_interface...
|   |   '-- meta...
|   '-- image_picker_platform_interface 2.4.1
|       |-- cross_file 0.3.2
|       |   |-- flutter...
|       |   |-- js...
|       |   '-- meta...
|       |-- flutter...
|       |-- http...
|       |-- meta...
|       '-- plugin_platform_interface...
|-- intl 0.17.0
|   |-- clock...
|   '-- path...
|-- json_annotation 4.4.0
|   '-- meta...
|-- mask_text_input_formatter 2.0.0
|   '-- flutter...
|-- modal_bottom_sheet 2.0.0
|   '-- flutter...
|-- package_info 2.0.2
|   '-- flutter...
|-- permission_handler 8.3.0
|   |-- flutter...
|   |-- meta...
|   '-- permission_handler_platform_interface 3.7.0
|       |-- flutter...
|       |-- meta...
|       '-- plugin_platform_interface...
|-- provider 6.0.1
|   |-- collection...
|   |-- flutter...
|   '-- nested 1.0.0
|       '-- flutter...
|-- pull_to_refresh 2.0.0
|   '-- flutter...
|-- retrofit 3.0.1
|   |-- dio...
|   '-- meta...
|-- sensors_plus 1.2.1
|   |-- flutter...
|   |-- sensors_plus_platform_interface 1.1.0
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   '-- sensors_plus_web 1.1.0
|       |-- flutter...
|       |-- flutter_web_plugins...
|       '-- sensors_plus_platform_interface...
|-- sentry_flutter 6.2.2
|   |-- flutter...
|   |-- flutter_web_plugins...
|   |-- package_info_plus...
|   '-- sentry 6.2.2
|       |-- http...
|       |-- meta...
|       |-- stack_trace 1.10.0
|       |   '-- path...
|       '-- uuid 3.0.5
|           '-- crypto...
|-- share 2.0.4
|   |-- flutter...
|   |-- meta...
|   '-- mime 1.0.1
|-- shared_preferences 2.0.11
|   |-- flutter...
|   |-- meta...
|   |-- shared_preferences_android 2.0.9
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- shared_preferences_platform_interface...
|   |-- shared_preferences_ios 2.0.8
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- shared_preferences_platform_interface...
|   |-- shared_preferences_linux 2.0.3
|   |   |-- file 6.1.2
|   |   |   |-- meta...
|   |   |   '-- path...
|   |   |-- flutter...
|   |   |-- meta...
|   |   |-- path...
|   |   |-- path_provider_linux 2.1.4
|   |   |   |-- ffi...
|   |   |   |-- flutter...
|   |   |   |-- meta...
|   |   |   |-- path...
|   |   |   |-- path_provider_platform_interface...
|   |   |   '-- xdg_directories...
|   |   '-- shared_preferences_platform_interface...
|   |-- shared_preferences_macos 2.0.2
|   |   |-- flutter...
|   |   '-- shared_preferences_platform_interface...
|   |-- shared_preferences_platform_interface 2.0.0
|   |   '-- flutter...
|   |-- shared_preferences_web 2.0.2
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   |-- meta...
|   |   '-- shared_preferences_platform_interface...
|   '-- shared_preferences_windows 2.0.3
|       |-- file...
|       |-- flutter...
|       |-- meta...
|       |-- path...
|       |-- path_provider_platform_interface 2.0.1
|       |   |-- flutter...
|       |   |-- meta...
|       |   |-- platform 3.1.0
|       |   '-- plugin_platform_interface...
|       |-- path_provider_windows 2.0.4
|       |   |-- ffi...
|       |   |-- flutter...
|       |   |-- meta...
|       |   |-- path...
|       |   |-- path_provider_platform_interface...
|       |   '-- win32...
|       '-- shared_preferences_platform_interface...
|-- shimmer 2.0.0
|   '-- flutter...
|-- sign_in_with_apple 3.3.0
|   |-- flutter...
|   |-- meta...
|   |-- sign_in_with_apple_platform_interface 1.0.0
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- plugin_platform_interface...
|   '-- sign_in_with_apple_web 1.0.1
|       |-- flutter...
|       |-- flutter_web_plugins...
|       |-- js...
|       '-- sign_in_with_apple_platform_interface...
|-- sliding_up_panel 2.0.0+1
|   '-- flutter...
|-- smooth_page_indicator 1.0.0+2
|   '-- flutter...
|-- store_redirect 2.0.0
|   '-- flutter...
|-- stream_transform 2.0.0
|-- url_launcher 6.0.17
|   |-- flutter...
|   |-- meta...
|   |-- url_launcher_android 6.0.13
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- url_launcher_platform_interface...
|   |-- url_launcher_ios 6.0.13
|   |   |-- flutter...
|   |   |-- meta...
|   |   '-- url_launcher_platform_interface...
|   |-- url_launcher_linux 2.0.2
|   |   '-- flutter...
|   |-- url_launcher_macos 2.0.2
|   |   '-- flutter...
|   |-- url_launcher_platform_interface 2.0.4
|   |   |-- flutter...
|   |   '-- plugin_platform_interface...
|   |-- url_launcher_web 2.0.5
|   |   |-- flutter...
|   |   |-- flutter_web_plugins...
|   |   |-- meta...
|   |   '-- url_launcher_platform_interface...
|   '-- url_launcher_windows 2.0.2
|       '-- flutter...
|-- version 2.0.0
|-- video_player 2.2.10
|   |-- flutter...
|   |-- html...
|   |-- meta...
|   |-- video_player_platform_interface 5.0.0
|   |   |-- flutter...
|   |   '-- plugin_platform_interface...
|   '-- video_player_web 2.0.5
|       |-- flutter...
|       |-- flutter_web_plugins...
|       |-- meta...
|       |-- pedantic...
|       '-- video_player_platform_interface...
'-- vsmrk_core 0.0.2
  |-- agora_rtc_engine...
  |-- agora_rtm...
  |-- cached_network_image...
  |-- cloud_firestore...
  |-- cloud_functions...
  |-- device_info...
  |-- dio...
  |-- firebase_auth...
  |-- firebase_core...
  |-- firebase_database...
  |-- firebase_messaging...
  |-- firebase_remote_config 1.0.3
  |   |-- firebase_core...
  |   |-- firebase_core_platform_interface...
  |   |-- firebase_remote_config_platform_interface 1.0.3
  |   |   |-- firebase_core...
  |   |   |-- flutter...
  |   |   |-- meta...
  |   |   '-- plugin_platform_interface...
  |   |-- firebase_remote_config_web 1.0.3
  |   |   |-- firebase_core...
  |   |   |-- firebase_core_web...
  |   |   |-- firebase_remote_config_platform_interface...
  |   |   |-- flutter...
  |   |   |-- flutter_web_plugins...
  |   |   '-- js...
  |   '-- flutter...
  |-- firebase_storage...
  |-- flutter...
  |-- flutter_bloc...
  |-- flutter_dotenv...
  |-- flutter_libphonenumber 1.2.1
  |   '-- flutter...
  |-- flutter_local_notifications...
  |-- flutter_native_timezone...
  |-- flutter_secure_storage 5.0.2
  |   |-- flutter...
  |   |-- flutter_secure_storage_linux 1.1.0
  |   |   |-- flutter...
  |   |   '-- flutter_secure_storage_platform_interface...
  |   |-- flutter_secure_storage_macos 1.1.0
  |   |   |-- flutter...
  |   |   '-- flutter_secure_storage_platform_interface...
  |   |-- flutter_secure_storage_platform_interface 1.0.0
  |   |   |-- flutter...
  |   |   '-- plugin_platform_interface...
  |   |-- flutter_secure_storage_web 1.0.2
  |   |   |-- flutter...
  |   |   |-- flutter_secure_storage_platform_interface...
  |   |   |-- flutter_web_plugins...
  |   |   '-- js...
  |   |-- flutter_secure_storage_windows 1.1.2
  |   |   |-- flutter...
  |   |   '-- flutter_secure_storage_platform_interface...
  |   '-- meta...
  |-- flutter_svg...
  |-- freezed_annotation...
  |-- get_it...
  |-- image_picker...
  |-- intl...
  |-- modal_bottom_sheet...
  |-- package_info_plus 1.3.0
  |   |-- flutter...
  |   |-- package_info_plus_linux 1.0.3
  |   |   |-- flutter...
  |   |   |-- package_info_plus_platform_interface...
  |   |   '-- path...
  |   |-- package_info_plus_macos 1.3.0
  |   |   '-- flutter...
  |   |-- package_info_plus_platform_interface 1.0.2
  |   |   |-- flutter...
  |   |   |-- meta...
  |   |   '-- plugin_platform_interface...
  |   |-- package_info_plus_web 1.0.4
  |   |   |-- flutter...
  |   |   |-- flutter_web_plugins...
  |   |   |-- http...
  |   |   |-- meta...
  |   |   '-- package_info_plus_platform_interface...
  |   '-- package_info_plus_windows 1.0.4
  |       |-- ffi 1.1.2
  |       |-- flutter...
  |       |-- package_info_plus_platform_interface...
  |       '-- win32 2.3.3
  |           '-- ffi...
  |-- permission_handler...
  |-- photo_view 0.13.0
  |   '-- flutter...
  |-- retrofit...
  |-- sentry_flutter...
  |-- shimmer...
  '-- wakelock 0.5.6
      |-- flutter...
      |-- meta...
      |-- wakelock_macos 0.4.0
      |   |-- flutter...
      |   |-- flutter_web_plugins...
      |   '-- wakelock_platform_interface...
      |-- wakelock_platform_interface 0.3.0
      |   |-- flutter...
      |   '-- meta...
      |-- wakelock_web 0.4.0
      |   |-- flutter...
      |   |-- flutter_web_plugins...
      |   |-- js...
      |   '-- wakelock_platform_interface...
      '-- wakelock_windows 0.2.0
          |-- flutter...
          |-- wakelock_platform_interface...
          '-- win32...

adapty appsflyer integration not working

Hello Adapty! we integrated a service 2 months ago and added AppsFlyer as integration. However, the event list is empty!

Adapty package has only updateAttribution and we provided it like this:
appsflyer.appOpenAttributionStream.listen((event) async { logInitialSource(event); Adapty.updateAttribution(event, source: AdaptyAttributionNetwork.appsflyer, networkUserId: await appsflyer.getAppsFlyerUID()); });

But the list is empty, and your docs says that there should be events
Снимок экрана 2021-08-19 в 10 15 05

here https://docs.adapty.io/docs/event-feed you show logging subscriptions to appsflyer
image

Help please!

Android Adapty.makePurchase() does not return

Hello,

My sandbox Flutter app in-app purchases work fine with Adapty on iOS but on Android, the Adapty.makePurchase() call never returns on the following device:
Xiaomi Redmi Note 10
Android 11

Here is my doctor:

flutter doctor -v
[✓] Flutter (Channel stable, 2.5.3, on macOS 12.1 21C52 darwin-arm, locale en-CH)
    • Flutter version 2.5.3 at /Users/XXX/FlutterDev/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 18116933e7 (4 months ago), 2021-10-15 10:46:35 -0700
    • Engine revision d3ea636dc5
    • Dart version 2.14.4

[✓] Android toolchain - develop for Android devices (Android SDK version 32.0.0)
    • Android SDK at /Users/XXX/Library/Android/sdk
    • Platform android-32, build-tools 32.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 13.2.1, Build version 13C100
    • CocoaPods version 1.11.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2020.3)
    • 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.10+0-b96-7249189)

[✓] Connected device (2 available)
    • Chrome (web)      • chrome      • web-javascript • Google Chrome 98.0.4758.102

• No issues found!

Here are the logs I get before the app hangs on Adapty.makePurchase():

I/[Adapty 0.9.3 93](29412): 2022-02-19 21:50:35.166+0100  - Response success 5 - INFO
I/[Adapty 0.9.3 93](29412): 2022-02-19 21:50:39.375+0100  - Response https://kinesis.us-east-1.amazonaws.com/: {"FailedRecordCount":0,"Records":[{"SequenceNumber":"49612976497545499553447725026730722812664153682028265522","ShardId":"shardId-000000000003"}]}
I/[Adapty 0.9.3 93](29412):  - INFO

However, I was able to purchase with the following device but only once:
Samsung A037F
Android 11

After the first attempt and subscription cancellation from the play store, the device gets the same problem: Adapty.makePurchase() doesn't return.

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.