com_tapp_so_adjust 1.0.3 copy "com_tapp_so_adjust: ^1.0.3" to clipboard
com_tapp_so_adjust: ^1.0.3 copied to clipboard

A Flutter plugin providing unified access to the Tapp SDK on Android and iOS, featuring deferred deep-link handling, affiliate URL generation, event tracking, and full Adjust analytics integration.

example/lib/main.dart

import 'dart:async';
import 'dart:io' show Platform;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:com_tapp_so_adjust/com_tapp_so_adjust.dart';

void main() => runApp(const MyApp());

class MyApp extends StatefulWidget {
  const MyApp({super.key});
  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _sdk = ComTappSoAdjust();

  StreamSubscription<DeferredDeepLinkData>? _deferredSub;
  StreamSubscription<FailResolveData>? _failSub;
  StreamSubscription<String?>? _testListener;

  // —— Core SDK state
  String _version = '…';
  String _should = '…';
  String _url = '…';
  String _evt = '…';
  String _tappEvt = '…';
  String _link = '…';
  String _orig = '…';
  String _cfg = '…';

  String _testMsg = '…';

  // —— Deferred‐link events
  String _deferred = '…';
  String _fail = '…';

  // —— Adjust integration state
  String _adjustEnableResult = '…';
  String _adjustDisableResult = '…';
  String _adjustIsEnabledResult = '…';
  String _adjustGdprResult = '…';
  String _referrerResult = '…';
  String _pushTokenResult = '…';
  String _trackAdRevenueResult = '…';
  String _thirdPartyResult = '…';
  String _measurementResult = '…';
  String _addCallbackResult = '…';
  String _addPartnerResult = '…';
  String _removeCallbackResult = '…';
  String _removePartnerResult = '…';
  String _removeAllCallbacks = '…';
  String _removeAllPartners = '…';
  String _adidResult = '…';
  String _idfaResult = '…';
  String _gAdIdResult = '…';
  String _amzAdIdResult = '…';
  String _sdkVersionResult = '…';
  String _installReferrerResult = '…';
  String _onResumeResult = '…';
  String _onPauseResult = '…';
  String _verifyAppResult = '…';
  String _verifyPlayResult = '…';
  String _trackPlayResult = '…';
  String _trackAppResult = '…';
  String _convertResult = '…';
  String _reqAuthResult = '…';
  String _authStatusResult = '…';
  String _skanResult = '…';

  @override
  void initState() {
    super.initState();
    _initializeSdk();

    _deferredSub = _sdk.onDeferredDeepLink.listen((data) {
      if (!mounted) return;
      setState(() {
        _deferred = '''
        URL: ${data.tappUrl}
        influencer: ${data.influencer}
        firstSession: ${data.isFirstSession}
        extraData: ${data.data}
        ''';
      });
    });
    _failSub = _sdk.onFailResolvingUrl.listen((err) {
      if (!mounted) return;
      setState(() {
        _fail = 'url=${err.url}\nerror=${err.error}';
      });
    });
    // Test listener
    _testListener = _sdk.onTestListener.listen((msg) {
      if (!mounted) return;
      setState(() => _testMsg = msg ?? 'null');
    });
  }

  @override
  void dispose() {
    _deferredSub?.cancel();
    _failSub?.cancel();
    _testListener?.cancel();
    super.dispose();
  }

  Future<void> _showUnsupported(String method) async {
    debugPrint('[${Platform.operatingSystem}] "$method" is not supported.');
  }

  Future<void> _initializeSdk() async {
    try {
      await _sdk.start(
        authToken: 'authToken',
        env: EnvironmentType.SANDBOX,
        tappToken: 'tappToken',
      );
    } on PlatformException {
      // ignore
    }
    await _getVersion();
    await _checkShouldProcess();
  }

  //–– Core handlers ––

  Future<void> _getVersion() async {
    final v = await _sdk.getPlatformVersion();
    if (!mounted) return;
    setState(() => _version = v ?? 'Unknown');
  }

  Future<void> _checkShouldProcess() async {
    final ok = await _sdk.shouldProcess('https://example.com');
    if (!mounted) return;
    setState(() => _should = ok.toString());
  }

  Future<void> _generateUrl() async {
    final u = await _sdk.generateUrl(
      influencer: 'influencer_flutter',
      adGroup: 'group',
      creative: 'creative',
      data: {'foo': 'bar'},
    );
    if (!mounted) return;
    setState(() => _url = u ?? 'error');
  }

  Future<void> _handleEvent() async {
    await _sdk.handleEvent('myEventToken');
    if (!mounted) return;
    setState(() => _evt = 'OK');
  }

  Future<void> _handleTappEvent() async {
    await _sdk.handleTappEvent(
      eventAction: EventAction.tapp_purchase,
    );
    if (!mounted) return;
    setState(() => _tappEvt = 'OK');
  }

  Future<void> _fetchLinkData() async {
    final link = await _sdk.fetchLinkData('https://example.com');
    if (!mounted) return;
    setState(() => _link = link?.toString() ?? 'null');
  }

  Future<void> _fetchOriginLinkData() async {
    final link = await _sdk.fetchOriginLinkData();
    if (!mounted) return;
    setState(() => _orig = link?.toString() ?? 'null');
  }

  Future<void> _getConfig() async {
    final cfg = await _sdk.getConfig();
    if (!mounted) return;
    setState(() => _cfg = cfg?.toString() ?? 'null');
  }

  //–– Adjust handlers ––

  Future<void> _onAdjustEnable() async {
    if (Platform.isIOS) {
      await _showUnsupported('adjustEnable');
      return;
    }
    await _sdk.adjustEnable();
    setState(() => _adjustEnableResult = 'OK');
  }

  Future<void> _onAdjustDisable() async {
    if (Platform.isIOS) {
      await _showUnsupported('adjustDisable');
      return;
    }
    await _sdk.adjustDisable();
    setState(() => _adjustDisableResult = 'OK');
  }

  Future<void> _onAdjustIsEnabled() async {
    if (Platform.isIOS) {
      await _showUnsupported('adjustIsEnabled');
      return;
    }
    final b = await _sdk.adjustIsEnabled();
    setState(() => _adjustIsEnabledResult = b.toString());
  }

  Future<void> _onAdjustGdprForgetMe() async {
    if (Platform.isIOS) {
      await _showUnsupported('adjustGdprForgetMe');
      return;
    }
    await _sdk.adjustGdprForgetMe();
    setState(() => _adjustGdprResult = 'OK');
  }

  Future<void> _onAdjustSetReferrer() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustSetReferrer');
      return;
    }
    await _sdk.adjustSetReferrer('referrer');
    setState(() => _referrerResult = 'OK');
  }

  Future<void> _onAdjustSetPushToken() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustSetPushToken');
      return;
    }
    await _sdk.adjustSetPushToken('pushToken');
    setState(() => _pushTokenResult = 'OK');
  }

  Future<void> _onAdjustTrackAdRevenue() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustTrackAdRevenue');
      return;
    }
    await _sdk.adjustTrackAdRevenue(
      AdjustTrackAdRevenueType(
        source: 'source',
        revenue: 9.99,
        currency: 'USD',
      ),
    );
    setState(() => _trackAdRevenueResult = 'OK');
  }

  Future<void> _onAdjustTrackThirdPartySharing() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustTrackThirdPartySharing');
      return;
    }
    await _sdk.adjustTrackThirdPartySharing(true);
    setState(() => _thirdPartyResult = 'OK');
  }

  Future<void> _onAdjustTrackMeasurementConsent() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustTrackMeasurementConsent');
      return;
    }
    await _sdk.adjustTrackMeasurementConsent(false);
    setState(() => _measurementResult = 'OK');
  }

  Future<void> _onAdjustAddGlobalCallbackParameter() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustAddGlobalCallbackParameter');
      return;
    }
    await _sdk.adjustAddGlobalCallbackParameter('key', 'value');
    setState(() => _addCallbackResult = 'OK');
  }

  Future<void> _onAdjustAddGlobalPartnerParameter() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustAddGlobalPartnerParameter');
      return;
    }
    await _sdk.adjustAddGlobalPartnerParameter('key', 'value');
    setState(() => _addPartnerResult = 'OK');
  }

  Future<void> _onAdjustRemoveGlobalCallbackParameter() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustRemoveGlobalCallbackParameter');
      return;
    }
    await _sdk.adjustRemoveGlobalCallbackParameter('key');
    setState(() => _removeCallbackResult = 'OK');
  }

  Future<void> _onAdjustRemoveGlobalPartnerParameter() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustRemoveGlobalPartnerParameter');
      return;
    }
    await _sdk.adjustRemoveGlobalPartnerParameter('key');
    setState(() => _removePartnerResult = 'OK');
  }

  Future<void> _onAdjustRemoveGlobalCallbackParameters() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustRemoveGlobalCallbackParameters');
      return;
    }
    await _sdk.adjustRemoveGlobalCallbackParameters();
    setState(() => _removeAllCallbacks = 'OK');
  }

  Future<void> _onAdjustRemoveGlobalPartnerParameters() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustRemoveGlobalPartnerParameters');
      return;
    }
    await _sdk.adjustRemoveGlobalPartnerParameters();
    setState(() => _removeAllPartners = 'OK');
  }

  Future<void> _onAdjustGetAdid() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustGetAdid');
      return;
    }
    final s = await _sdk.adjustGetAdid();
    setState(() => _adidResult = s ?? 'null');
  }

  Future<void> _onAdjustGetIdfa() async {
    if (!Platform.isIOS) {
      await _showUnsupported('adjustGetIdfa');
      return;
    }
    final s = await _sdk.adjustGetIdfa();
    setState(() => _idfaResult = s ?? 'null');
  }

  Future<void> _onAdjustGetGoogleAdId() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustGetGoogleAdId');
      return;
    }
    final s = await _sdk.adjustGetGoogleAdId();
    setState(() => _gAdIdResult = s ?? 'null');
  }

  Future<void> _onAdjustGetAmazonAdId() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustGetAmazonAdId');
      return;
    }
    final s = await _sdk.adjustGetAmazonAdId();
    setState(() => _amzAdIdResult = s ?? 'null');
  }

  Future<void> _onAdjustGetSdkVersion() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustGetSdkVersion');
      return;
    }
    final s = await _sdk.adjustGetSdkVersion();
    setState(() => _sdkVersionResult = s ?? 'null');
  }

  Future<void> _onAdjustGetGooglePlayInstallReferrer() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustGetGooglePlayInstallReferrer');
      return;
    }
    final s = await _sdk.adjustGetGooglePlayInstallReferrer();
    setState(() => _installReferrerResult = s ?? 'null');
  }

  Future<void> _onAdjustOnResume() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustOnResume');
      return;
    }
    await _sdk.adjustOnResume();
    setState(() => _onResumeResult = 'OK');
  }

  Future<void> _onAdjustOnPause() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustOnPause');
      return;
    }
    await _sdk.adjustOnPause();
    setState(() => _onPauseResult = 'OK');
  }

  Future<void> _onAdjustVerifyAppStorePurchase() async {
    if (!Platform.isIOS) {
      await _showUnsupported('adjustVerifyAppStorePurchase');
      return;
    }
    final res = await _sdk.adjustVerifyAppStorePurchase(
      transactionId: 'tx',
      productId: 'pid',
    );
    setState(() => _verifyAppResult = res.toString());
  }

  Future<void> _onAdjustVerifyPlayStorePurchase() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustVerifyPlayStorePurchase');
      return;
    }
    final res = await _sdk.adjustVerifyAndTrackPlayStorePurchase(
      eventToken: 'eventToken',
    );
    setState(() => _verifyPlayResult = res.toString());
  }

  Future<void> _onAdjustTrackPlayStoreSubscription() async {
    if (!Platform.isAndroid) {
      await _showUnsupported('adjustTrackPlayStoreSubscription');
      return;
    }
    await _sdk.adjustTrackPlayStoreSubscription(
      PlayStoreSubscription(
        price: 1.23,
        currency: 'USD',
        sku: 'sku',
        orderId: 'o',
        signature: 'sig',
        purchaseToken: 'token',
        purchaseTime: DateTime.now().millisecondsSinceEpoch,
      ),
    );
    setState(() => _trackPlayResult = 'OK');
  }

  Future<void> _onAdjustTrackAppStoreSubscription() async {
    if (!Platform.isIOS) {
      await _showUnsupported('adjustTrackAppStoreSubscription');
      return;
    }
    await _sdk.adjustTrackAppStoreSubscription(
      AppStoreSubscription(
        price: 1.23,
        currency: 'USD',
        transactionId: 'txId',
      ),
    );
    setState(() => _trackAppResult = 'OK');
  }

  Future<void> _onAdjustConvert() async {
    if (!Platform.isIOS) {
      await _showUnsupported('adjustConvert');
      return;
    }
    final s = await _sdk.adjustConvert('https://univ.link', 'myScheme');
    setState(() => _convertResult = s ?? 'null');
  }

  Future<void> _onAdjustRequestAppTrackingAuthorization() async {
    if (!Platform.isIOS) {
      await _showUnsupported('adjustRequestAppTrackingAuthorization');
      return;
    }
    final i = await _sdk.adjustRequestAppTrackingAuthorization();
    setState(() => _reqAuthResult = i.toString());
  }

  Future<void> _onAdjustAppTrackingAuthorizationStatus() async {
    if (!Platform.isIOS) {
      await _showUnsupported('adjustAppTrackingAuthorizationStatus');
      return;
    }
    final i = await _sdk.adjustAppTrackingAuthorizationStatus();
    setState(() => _authStatusResult = i.toString());
  }

  Future<void> _onAdjustUpdateSkanConversionValue() async {
    if (!Platform.isIOS) {
      await _showUnsupported('adjustUpdateSkanConversionValue');
      return;
    }
    await _sdk.adjustUpdateSkanConversionValue(
      UpdateSkanConversionValueType(
        value: 1,
        coarseValue: 'medium',
        lockWindow: 0,
      ),
    );
    setState(() => _skanResult = 'OK');
  }

  Future<void> _simulateTestEvent() async {
    await _sdk.simulateTestEvent();
  }

  Widget _buildButton(String label, VoidCallback onTap, String value) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        ElevatedButton(onPressed: onTap, child: Text(label)),
        const SizedBox(height: 6),
        Text(value),
        const Divider(),
      ],
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Tapp SDK Example')),
        body: SingleChildScrollView(
          padding: const EdgeInsets.all(16),
          child: Column(children: [
            // Core
            _buildButton('Get Platform Version', _getVersion, _version),
            _buildButton('Should Process URL', _checkShouldProcess, _should),
            _buildButton('Generate URL', _generateUrl, _url),
            _buildButton('Handle Event', _handleEvent, _evt),
            _buildButton('Handle Tapp Event', _handleTappEvent, _tappEvt),
            _buildButton('Fetch Link Data', _fetchLinkData, _link),
            _buildButton('Fetch Origin Link Data', _fetchOriginLinkData, _orig),
            _buildButton('Get Config', _getConfig, _cfg),

            // Deferred
            const SizedBox(height: 16),
            const Text('Deferred Link Events',
                style: TextStyle(fontWeight: FontWeight.bold)),
            Text('Received:\n$_deferred'),
            Text('Fail Resolve:\n$_fail'),
            const Divider(),
            // Test Simulation
            const SizedBox(height: 16),
            _buildButton('Simulate Test Event', _simulateTestEvent, _testMsg),
            // Adjust
            _buildButton('adjustEnable', _onAdjustEnable, _adjustEnableResult),
            _buildButton(
                'adjustDisable', _onAdjustDisable, _adjustDisableResult),
            _buildButton(
                'adjustIsEnabled', _onAdjustIsEnabled, _adjustIsEnabledResult),
            _buildButton(
                'adjustGdprForgetMe', _onAdjustGdprForgetMe, _adjustGdprResult),
            _buildButton(
                'adjustSetReferrer', _onAdjustSetReferrer, _referrerResult),
            _buildButton(
                'adjustSetPushToken', _onAdjustSetPushToken, _pushTokenResult),
            _buildButton('adjustTrackAdRevenue', _onAdjustTrackAdRevenue,
                _trackAdRevenueResult),
            _buildButton('adjustTrackThirdPartySharing',
                _onAdjustTrackThirdPartySharing, _thirdPartyResult),
            _buildButton('adjustTrackMeasurementConsent',
                _onAdjustTrackMeasurementConsent, _measurementResult),
            _buildButton('adjustAddGlobalCallbackParameter',
                _onAdjustAddGlobalCallbackParameter, _addCallbackResult),
            _buildButton('adjustAddGlobalPartnerParameter',
                _onAdjustAddGlobalPartnerParameter, _addPartnerResult),
            _buildButton('adjustRemoveGlobalCallbackParameter',
                _onAdjustRemoveGlobalCallbackParameter, _removeCallbackResult),
            _buildButton('adjustRemoveGlobalPartnerParameter',
                _onAdjustRemoveGlobalPartnerParameter, _removePartnerResult),
            _buildButton('adjustRemoveGlobalCallbackParameters',
                _onAdjustRemoveGlobalCallbackParameters, _removeAllCallbacks),
            _buildButton('adjustRemoveGlobalPartnerParameters',
                _onAdjustRemoveGlobalPartnerParameters, _removeAllPartners),
            _buildButton('adjustGetAdid', _onAdjustGetAdid, _adidResult),
            _buildButton('adjustGetIdfa', _onAdjustGetIdfa, _idfaResult),
            _buildButton(
                'adjustGetGoogleAdId', _onAdjustGetGoogleAdId, _gAdIdResult),
            _buildButton(
                'adjustGetAmazonAdId', _onAdjustGetAmazonAdId, _amzAdIdResult),
            _buildButton('adjustGetSdkVersion', _onAdjustGetSdkVersion,
                _sdkVersionResult),
            _buildButton('adjustGetGooglePlayInstallReferrer',
                _onAdjustGetGooglePlayInstallReferrer, _installReferrerResult),
            _buildButton('adjustOnResume', _onAdjustOnResume, _onResumeResult),
            _buildButton('adjustOnPause', _onAdjustOnPause, _onPauseResult),
            _buildButton('adjustVerifyAppStorePurchase',
                _onAdjustVerifyAppStorePurchase, _verifyAppResult),
            _buildButton('adjustVerifyPlayStorePurchase',
                _onAdjustVerifyPlayStorePurchase, _verifyPlayResult),
            _buildButton('adjustTrackPlayStoreSubscription',
                _onAdjustTrackPlayStoreSubscription, _trackPlayResult),
            _buildButton('adjustTrackAppStoreSubscription',
                _onAdjustTrackAppStoreSubscription, _trackAppResult),
            _buildButton('adjustConvert', _onAdjustConvert, _convertResult),
            _buildButton('adjustRequestAppTrackingAuthorization',
                _onAdjustRequestAppTrackingAuthorization, _reqAuthResult),
            _buildButton('adjustAppTrackingAuthorizationStatus',
                _onAdjustAppTrackingAuthorizationStatus, _authStatusResult),
            _buildButton('adjustUpdateSkanConversionValue',
                _onAdjustUpdateSkanConversionValue, _skanResult),
          ]),
        ),
      ),
    );
  }
}
1
likes
135
points
12
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin providing unified access to the Tapp SDK on Android and iOS, featuring deferred deep-link handling, affiliate URL generation, event tracking, and full Adjust analytics integration.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_localizations, plugin_platform_interface

More

Packages that depend on com_tapp_so_adjust

Packages that implement com_tapp_so_adjust