Brief steps to integrate onesignal to flutter apps

Step 01 - Add onesignal package to pubspec.yaml

onesignal_flutter: ^2.6.1


Step 02 - Add the following code to the Line 01 of app > build.gradle file

//Need to put this in the headline for onesignal plugin

buildscript {

    repositories {

        // ...

        maven { url 'https://plugins.gradle.org/m2/' } // Gradle Plugin Portal

    }

    dependencies {

        // ...

        // OneSignal-Gradle-Plugin

        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.6, 0.99.99]'

    }

}

apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'


Step 03 - Add the following lines to after the activity tag of app > src > main > AndroidManifest.xml file

        <intent-filter android:label="@string/app_name" android:autoVerify="true">

            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />

            <category android:name="android.intent.category.BROWSABLE" />

            <!-- Accepts URIs that begin with YOUR_SCHEME://YOUR_HOST -->

            <data

                    android:scheme="thinkyar"

                    android:host="open" />

        </intent-filter>


Step 04 - Call the following function inside the initialise code of your flutter script

Future<void> _initPlatformState() async {

    OneSignal.shared.setLogLevel(OSLogLevel.verbose, OSLogLevel.none);

    OneSignal.shared.setRequiresUserPrivacyConsent(_requireConsent);


    var settings = {OSiOSSettings.autoPrompt: false, OSiOSSettings.promptBeforeOpeningPushUrl: true};


    OneSignal.shared.setNotificationReceivedHandler((OSNotification notification) {

      _debugLabelString = "Received notification: \n${notification.jsonRepresentation().replaceAll("\\n", "\n")}";

    });


    OneSignal.shared.setNotificationOpenedHandler((OSNotificationOpenedResult result) {

      _debugLabelString = "Opened notification: \n${result.notification.jsonRepresentation().replaceAll("\\n", "\n")}";

    });


    OneSignal.shared.setInAppMessageClickedHandler((OSInAppMessageAction action) {

      _debugLabelString = "In App Message Clicked: \n${action.jsonRepresentation().replaceAll("\\n", "\n")}";

    });


    OneSignal.shared.setSubscriptionObserver((OSSubscriptionStateChanges changes) {

      print("SUBSCRIPTION STATE CHANGED: ${changes.jsonRepresentation()}");

    });


    OneSignal.shared.setPermissionObserver((OSPermissionStateChanges changes) {

      print("PERMISSION STATE CHANGED: ${changes.jsonRepresentation()}");

    });


    OneSignal.shared.setEmailSubscriptionObserver((OSEmailSubscriptionStateChanges changes) {

      print("EMAIL SUBSCRIPTION STATE CHANGED ${changes.jsonRepresentation()}");

    });


    await OneSignal.shared.init(_oneSignalAppID, iOSSettings: settings);

    OneSignal.shared.setInFocusDisplayType(OSNotificationDisplayType.notification);


    bool requiresConsent = await OneSignal.shared.requiresUserPrivacyConsent();

    _enableConsentButton = requiresConsent;


    if(GlobalVariables.player != null) {

      await Future.delayed(Duration(seconds: 2));

      sendTags('name', GlobalVariables.player.name);

      OneSignal.shared.setExternalUserId(GlobalVariables.player.myId);


      var status = await OneSignal.shared.getPermissionSubscriptionState();

      var oneSignalId = status.subscriptionStatus.userId;

      //Set one signal id to the player

      if(GlobalVariables.player.oneSignalId != oneSignalId)

        PRPlayer.updateOneSignalId(oneSignalId);

    }


//    OneSignal.shared.setSubscription((enable))

//    OneSignal.shared.getTags()


  }

  void sendTags(String key, String value) {

    print("Sending tags");

    OneSignal.shared.sendTag(key, value).then((response) {

      print("Successfully sent tags with response: $response");

    }).catchError((error) {

      print("Encountered an error sending tags: $error");

    });

  }


Publishing for iOS

1 - Create a new distribution profile for one signal extension.

2 - Make sure the version of one signal profile and main application is the same


Comments

Popular posts from this blog

Publishing Flutter app

Solving flutter web app CORS policy

Flutter app crashing without any logs when building in debug mode.