===== Android Studio Integration Manual ====== === Notes === Please review the [[sdkoverview|SDK Overview]] for information on how the SDK connects the mobile app with the Campaign Manager. ** Android Studio v1.4.1** When this guide was created the process to import libraries in Android Studio had some bugs. Messangi is currently used as a local library, so the setup is a bit more tedious than it will be in future releases. === Downloads === * [[http://developer.android.com/sdk/index.html|Android Studio]] * [[http://ogangi.com/~jtorres/AndroidStudioGuide/messangisdk.aar|MessangiSDK]] === Configuration === == Create or Open Project in Android Studio == == Add Messangi Library == [[http://ogangi.com/~jtorres/AndroidStudioGuide/vid/addModule.mp4|Video]] - Download Messangi Library - Go to File > New > New Module - Select "Import JAR/AAR Package" then "next" - Click the button "..." next to the "file name" field. Select the file **messangiSDK.aar** from the directory you downloaded it and click “Finish” - Wait Gradle synchronize. == Add Dependencies == [[http://ogangi.com/~jtorres/AndroidStudioGuide/vid/addDependencies.mp4|Video]] - Go to “Open Module Settings” - Select the project and go to the tab “Dependencies” - If MessangiSDK is not a dependency, add it by clicking on “+”, select “module” and “MessangiSDK”. - Currently you have to manually add dependencies for MessangiSDK, the Gradle will not automatically add it. Go to “Gradle Scripts” > “build.gradle(Module:—projectName—)” - Add the lines below in the section dependencies before the line “compile project(‘:messangisdk’)” compile 'com.google.android.gms:play-services:8.1.0' compile 'org.altbeacon:android-beacon-library:2.3.5' compile 'commons-codec:commons-codec:1.10' compile 'com.google.code.gson:gson:2.3.1' == Manifest == 1. Open **AndroidManifest.xml** and add the following lines: Please note that you should have an **applicationId** in the gradle defaultConfig (this is added automatically in Android Studio) 2. If you are using a **broadcast receiver** to receive push notifications while your application is not running, you must register to receive the **com.ogangi.messangi.android.sdk.PUSH_NOTIFICATION** action (Optional) == Add Interaction with MessangiSDK == 1. Open **MainActivity.java** and add this imports **import** import com.ogangi.messangi.android.sdk.*; 2. Implement **MessangiListener** in **MainActivity**: public class MainActivity extends Activity implements MessangiListener { ... } 3. Once the initialization process has been completed the SDK will call the postInit() method of all the MessangiListeners that were registered. Use that method to complete your application’s launch process: @Override public void postInit() { runOnUiThread(new Runnable() { public void run() { // Initialize your application ... } }); } 4. Add this methods **onGeofenceUpdate**, **onBeaconUpdate** ,**updateFencesStatus**, **onLocationChange** and **pushReceived**, to interact with Messangi. @Override public void onLocationChange(Location location) { // Use this method to handle any change in location. } @Override public void updateFencesStatus(List geofences, int geofenceEvent, Location location) { // Use this method to handle any changes in the Geofences status. This is an // informational method that can be used to update any maps or other views // showing the geofences. The location parameter contains the triger location } @Override public void pushReceived(MessageVO messageVO) { // This method will be called every time the user receives a push notification // via Messangi. // Use this method to display the content of the notification. } @Override public void onGeofenceUpdate(String type, String geoFenceID) { // This method will be called every time the user receive a Geofence // create, update or delete event. // NOT when arrive a Notification of geofence Enter or Exit . } @Override public void onBeaconUpdate(String type, String beaconID) { // This method will be called every time the user receive a Beacon // create, update or delete event. // NOT when arrive a Notification of beacon Enter or Exit . } == Configure Messangi SDK == 1. Modify the method **onCreate**, adding **Messangi** credentials. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Messangi Credentials Messangi.getInstance().setAppName(**App Name**); Messangi.getInstance().setClientId(**Client ID**); Messangi.getInstance().setApiClientPrivateKey(**Private Key**); // GCM Credentials Messangi.getInstance().setGcmApiKey(**Google Cloud Messaging API Key**); Messangi.getInstance().setGcmProjectId(**Project ID**); // Subscription manager Messangi.getInstance().setSubscriptionURL(**SubscriptionURL**); Messangi.getInstance().setSubscriptionInstanceId(**SubscriptionInstanceId**); Messangi.getInstance().init(this); Messangi.getInstance().addMessangiListener(this); Messangi.getInstance().registerDialog(this, this); //Rest of your code //.. } Add the parameters provided by Ogangi: **App Name**, **Client ID** and **Private Key**. To receive push notifications, you must also add **Google Cloud Messaging API Key** and **Project ID**, if you use Subscription List then you should also add **SubscriptionURL** and **SubscriptionInstanceId**. Messangi can take care of the entire registration process calling **Messangi.getInstance().registerDialog(this, this)**, if you want to manage your own login window then do not add that line. 2. (Optional) Use the Android Lifecycle **onStart**, **onResume** and **onPause** to handle MessangiService @Override protected void onStart() { super.onStart(); Messangi.getInstance().init(this); } @Override protected void onPause() { Messangi.getInstance().unBindService(); super.onPause(); } @Override protected void onResume() { super.onResume(); Messangi.getInstance().bindService(); } You could invoke the **startService**, **unbindService** and **bindService** methods elsewhere, but we recommend these. === logEvent Facility === Events can be generated in the Analytics platform via the logEvent facility. You only need to provide the EVENT_TYPE and EXTRA_INFO. Please refer to [[Data Structure]], [[Events]], [[Location]], [[Aggregation]] and [[Dashboard]] for more information: \\ \\ Messangi.getInstance().logEvent(this, "EVENT_TYPE", "EXTRA_INFO"); Please refer to [[Analytics Overview]] for more information on events and dashboards. === Version === Version of the guide 1.0