adaptyteam / adaptysdk-flutter Goto Github PK
View Code? Open in Web Editor NEWSDK for growing mobile in-app purchases
Home Page: https://docs.adapty.io/docs/quickstart
License: MIT License
SDK for growing mobile in-app purchases
Home Page: https://docs.adapty.io/docs/quickstart
License: MIT License
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?
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)
Environment:
flutter: 3.0.5
iOS: 15.5
Adapty/Adapty.swift:369: Fatal error: [Adapty] In order to properly measure performance of the paywalls, you need to use products from paywalls. https://docs.adapty.io/docs/ios-displaying-products#showcase
Crashing on call:
final result = await Adapty.makePurchase(product);
How manual purchase is related to paywalls? Is there a workaround?
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
Is this package still maintained? Will null-safety be integrated?
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
How can i get profile data from adapty?
How can i get custom attribute data from adapty set by "AdaptyProfileParameterBuilder"?
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.
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
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:
<?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>
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.
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?
Adapty.activate()
). => New blank user (User A) is created in the console1234
i.e. Adapty.identify("1234")
. => Previous blank user (User A) is now linked to user via customerId 1234Adapty.logout()
=> New blank user (User B) is created in the consoleAdapty.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.
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)
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?)
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
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.
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);
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
.
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)
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();
}
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());
}
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
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
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
Compilation error. See log for more details
im using adapty_flutter: ^0.3.4
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."
[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)
On iOS an error when trying to make a pending purchase:
type 'Future<dynamic>' is not a subtype of type 'FutureOr<String>' in type cast
#0 Adapty.makeDeferredPurchase (package:adapty_flutter/adapty_flutter.dart:211)
#1 AdaptyPurchaseService.makeDeferredPurchase (package:word_daily/services/purchase/adapty_purchase_service.dart:376)
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.
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,
I m showing in iOS
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)
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
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)
localizedDescirption, vendorProductId are present, but price is null.
Everything works fine in debug
Edit 1: subscriptionPeriod is also null.
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.
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:
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);
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)
In android products introductoryOfferEligibility
and promotionalOfferEligibility
are always false.
Even if it is a new user. Although, if you click on the payment, the native screen will show that the discount applies. Does it look like some kind of bug or are the checks not working for android?
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?
Все работает прекрасно внутри IDE. Все работает прекрасно для iOS. Для андроид делал тестовые подписки на реальном устройстве находясь внутри IDE (Android Studio, Flutter)
Как только генерю APK или Bundle все перестает работать!!!
попытка сделать Adapty.activate(); дает error code 0
Сравнил свой и ваш AndroidManifest.xml, сделал правки в MainActivity.kt как в вашем экзампл на гите, скопировал весь ваш экзампл и запустил со своими ключами в
андроидМанифесте... результат на скриншоте
Прошу помочь найти причину!
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
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)
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.
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.
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 (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!
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...
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
here https://docs.adapty.io/docs/event-feed you show logging subscriptions to appsflyer
Help please!
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.