John
John

Reputation: 124

How can I track an APK install

I'm trying to track an APK install. When a user lands on the downloadpage (not the store), he is coming from a specific source. When user clicks on download, the APK will be installed. After it's installed, I need to map the install to the source the user was coming from before installing. Is there any good way to do this?

My plan so far: Save the user IP and screen resolutions on the download page to a database. After install, pass IP and screen resolution to the server and map with the row in the database. Is this a good way of doing this?

Hope you guys can help me.

Upvotes: 3

Views: 2627

Answers (2)

luttu android
luttu android

Reputation: 1461

I have prepared a BroadcastReceiver class :

public class newPackageReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("DEBUG"," test for application install/uninstall");
    }

}

In the main activity, I first register a new receiver object, then instanciate button for application install.

public void onCreate(Bundle savedInstanceState) {
...
IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_PACKAGE_ADDED);
        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
        filter.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED);
        filter.addAction(Intent.ACTION_PACKAGE_INSTALL);
        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
        filter.addAction(Intent.ACTION_PACKAGE_RESTARTED);

        receiver = new newPackageReceiver();
        registerReceiver(receiver, filter);
        ...

dlButton.setText(R.string.dl_button);
dlButton.setOnClickListener(new AppliDownloadOnClickListener(this ));   


@Override
public void onDestroy(){
     unregisterReceiver(receiver);
     super.onDestroy();
}

Upvotes: 0

Piyush Agarwal
Piyush Agarwal

Reputation: 25858

You just need to write a BroadcastReceiver for this which can receive the PACKAGE_ADDED and PACKAGE_INSTALL Intent:

InstallBroadcastReceiver.Class

public class InstallBroadcastReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
  String action = intent.getAction();
  if(action.equals(Intent.ACTION_PACKAGE_ADDED)
    ||action.equals(Intent.ACTION_PACKAGE_INSTALL)){
    notifyServerForApplicationInstall(context, intent);

    }
   }

  private void notifyServerForApplicationInstall(Context context,Intent intent){

    //send the data to your server here
  }
}

Register the receiver in AndroidManifest file

    <receiver
        android:name=".InstallBroadcastReceiver"
        android:exported="false" 
        <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <data android:scheme="package" />
        </intent-filter>
    </receiver>

Don't forget to give this permissions in manifest :

<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>

Upvotes: 1

Related Questions