Android Open Source - javocsoft-toolbox Custom Campaign Tracking Receiver






From Project

Back to project page javocsoft-toolbox.

License

The source code is released under:

GNU General Public License

If you think the Android project javocsoft-toolbox listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2010-2014 - JavocSoft - Javier Gonzalez Serrano
 * http://javocsoft.es/proyectos/code-libs/android/javocsoft-toolbox-android-library
 * //  w w  w.j a  va  2 s .c  om
 * This file is part of JavocSoft Android Toolbox library.
 *
 * JavocSoft Android Toolbox library is free software: you can redistribute it 
 * and/or modify it under the terms of the GNU General Public License as 
 * published by the Free Software Foundation, either version 3 of the License, 
 * or (at your option) any later version.
 *
 * JavocSoft Android Toolbox library is distributed in the hope that it will be 
 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General 
 * Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with JavocSoft Android Toolbox library.  If not, see 
 * <http://www.gnu.org/licenses/>.
 * 
 */
package es.javocsoft.android.lib.toolbox.analytics;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;

import com.google.android.gms.analytics.CampaignTrackingReceiver;

import es.javocsoft.android.lib.toolbox.gcm.NotificationModule;

/**
 * This is a custom Google Analytics Tracking receiver for INSTALL_REFERRER
 * intents. The purpose of this custom receiver is:
 *
 *  - Catch the campaign data before it is delivered to GA Campaign
 *    Tracking receiver.
 *  - Forward the intent to Google Analytics Tracking receiver for
 *    normal behaviour.
 *
 *  The campaign URL can be made using the URL:
 *
 *      https://developers.google.com/analytics/devguides/collection/android/v4/campaigns?hl=es#google-play-url-builder
 *
 *      ...an example (the URL in the "referrer" url parameter is url encoded):
 *
 *      https://play.google.com/store/apps/details?id=es.javocsoft.basetest
 *                     &referrer=utm_source%3Dfacebook
 *                               %26utm_medium%3Dbanner
 *                               %26utm_content%3Dbanner1
 *                               %26utm_campaign%3DcampaignOne
 *
 *      The receiver can be test by using the ADN command:
 *
 *          adb shell am broadcast
 *                  -a com.android.vending.INSTALL_REFERRER
 *                  -n es.javocsoft.basetestapp/es.javocsoft.basetestapp.CustomCampaignTrackingReceiver
 *                  --es "referrer" "utm_source%3Dfacebook%26utm_medium%3Dbanner%26utm_content%3Dbanner1%26utm_campaign%3DcampaignOne"
 *
 *      ..if the test goes well an output like this should be seen:
 *
 *          Broadcasting: Intent { act=com.android.vending.INSTALL_REFERRER cmp=es.javocsoft.basetestapp/.CustomCampaignTrackingReceiver (has extras) }
 *          Broadcast completed: result=0
 *
 *  @author JavocSoft 2014
 *   @since  2014    
 */
public class CustomCampaignTrackingReceiver extends BroadcastReceiver {

  
  public static OnProcessCampaignDataCallback onCampaignInfoReceivedCallback;
  
  public static final String NO_CAMPAIGN_INFO = "NONE";
  
  
    @Override
    public void onReceive(Context context, Intent intent) {

        // Pass the intent to other receivers.
        Uri uri = intent.getData();

        //Get the received Referrarl info
        CampaignInfo info = new CampaignInfo();
        if (uri != null) {
            Log.i("MeasureInstall", "URI:" + uri.getPath());
            if(uri.getQueryParameter("utm_source") != null) {
                // Use campaign parameters if available.
                info.setInstallReferral(uri.getPath());
            } else if (uri.getQueryParameter("referrer") != null) {
                info.setInstallReferral(uri.getQueryParameter("referrer"));
            }else{
                info.setInstallReferral(NO_CAMPAIGN_INFO + ". Not a valid URI parameter. Only 'utm_source' or 'referral' are accepted.");
            }
        }else{
            //We do not have an URI, we try to get the parameter from the extras
            String referralInfo = intent.getStringExtra("referrer");
            if(referralInfo!=null){
              Log.i("MeasureInstall", "Referral Info:" + referralInfo);
                info.setInstallReferral(referralInfo);                
            }else {
                info.setInstallReferral(NO_CAMPAIGN_INFO + ". No URI in the intent data.");
                Log.i("MeasureInstall", "No URI.");
            }
        }

        //Do something if the user specifies.
        if(onCampaignInfoReceivedCallback!=null) {
          Log.i("Analytics Campaign Module", "User specified an action for received Campaign information.");
        
          onCampaignInfoReceivedCallback.setCampaignData(info);
        Thread tAck = new Thread(onCampaignInfoReceivedCallback);
        tAck.start();
        }
        
        // When you're done, pass the intent to the Google Analytics receiver.
        new CampaignTrackingReceiver().onReceive(context, intent);
    }
    
    
    
    /**
     * This class allows to implement a class that can do something 
     * when the campaign data is received.
     * 
     * @author JavocSoft 2014.
     * @since 2014
     */
    public static abstract class OnProcessCampaignDataCallback extends Thread implements Runnable {
      
      private CampaignInfo campaignInfo;
      
      public OnProcessCampaignDataCallback() {}
      
      @Override
      public void run() {
        pre_task();
        task();
        post_task();
      }
            
      protected abstract void pre_task();
      protected abstract void task();
      protected abstract void post_task();
      
      public void setCampaignData(CampaignInfo campaignInfo) {
        this.campaignInfo = campaignInfo;
      }
      
      /**
       * Gets the campaign information.
       * 
       * @return
       */
      protected CampaignInfo getCampaignInfo() {
        return campaignInfo;
      }
      
      /**
       * Gets the context.
       * 
       * @return
       */
      protected Context getContext(){
        return NotificationModule.APPLICATION_CONTEXT;
      }
    }
}




Java Source Code List

es.javocsoft.android.lib.toolbox.ToolBox.java
es.javocsoft.android.lib.toolbox.ads.AdBase.java
es.javocsoft.android.lib.toolbox.ads.AdFragment.java
es.javocsoft.android.lib.toolbox.ads.AdInterstitial.java
es.javocsoft.android.lib.toolbox.ads.InterstitialAdsListener.java
es.javocsoft.android.lib.toolbox.analytics.CampaignInfo.java
es.javocsoft.android.lib.toolbox.analytics.CustomCampaignTrackingReceiver.java
es.javocsoft.android.lib.toolbox.encoding.Base64DecodingException.java
es.javocsoft.android.lib.toolbox.encoding.Base64.java
es.javocsoft.android.lib.toolbox.encoding.FileHelper.java
es.javocsoft.android.lib.toolbox.facebook.FacebookLoginFragment.java
es.javocsoft.android.lib.toolbox.facebook.FacebookShareFragment.java
es.javocsoft.android.lib.toolbox.facebook.FbTools.java
es.javocsoft.android.lib.toolbox.facebook.beans.AppRequestBean.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnAppRequestCancelledActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnAppRequestDeleteSuccessActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnAppRequestFailActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnAppRequestReceivedActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnAppRequestReceivedErrorActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnAppRequestSuccessActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnLoginActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnLogoutActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnShareCancelledActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnShareFailActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.callback.OnShareSuccessActionCallback.java
es.javocsoft.android.lib.toolbox.facebook.exception.FBException.java
es.javocsoft.android.lib.toolbox.facebook.exception.FBSessionException.java
es.javocsoft.android.lib.toolbox.gcm.EnvironmentType.java
es.javocsoft.android.lib.toolbox.gcm.NotificationModule.java
es.javocsoft.android.lib.toolbox.gcm.core.CustomGCMBroadcastReceiver.java
es.javocsoft.android.lib.toolbox.gcm.core.CustomNotificationReceiver.java
es.javocsoft.android.lib.toolbox.gcm.core.GCMIntentService.java
es.javocsoft.android.lib.toolbox.gcm.core.beans.GCMDeliveryResponse.java
es.javocsoft.android.lib.toolbox.gcm.core.beans.GCMDeliveryResultItem.java
es.javocsoft.android.lib.toolbox.gcm.core.beans.GCMMessage.java
es.javocsoft.android.lib.toolbox.gcm.exception.GCMException.java
es.javocsoft.android.lib.toolbox.gcm.send.GCMHttpDelivery.java
es.javocsoft.android.lib.toolbox.io.IOUtils.java
es.javocsoft.android.lib.toolbox.io.Unzipper.java
es.javocsoft.android.lib.toolbox.media.MediaScannerNotifier.java
es.javocsoft.android.lib.toolbox.net.HttpOperations.java
es.javocsoft.android.lib.toolbox.sms.cmt.CMTInfoHelper.java
es.javocsoft.android.lib.toolbox.sms.cmt.CMTShortNumberInformation.java
es.javocsoft.android.lib.toolbox.sms.observer.SMSObserver.java