App hangs when install from play store via referrer

522 Views Asked by At

I have an android application in play store. after installing it from referrer url and opens directly from play store, it hangs and apaplication crashes, something like doing to much work on UI thread,I have two broadcast receivers in my manifest for INSTALL_REFERRER one is for Analytic purpose and another is for setting some alarm. for analytic purpose I'm extracting utm source, medium, campaign id... it is very light weighted operation but still I am doing it on an IntentService,

Code

 @Override
 protected void onHandleIntent(Intent intent) {
        getUtmValuesAndSave(UtmCreateService.this, intent);
 }

private void getUtmValuesAndSave(Context context, Intent intent) {

        String referrer = intent.getStringExtra(Constants.UTM_REFERRER);

        String source = getSourceFromReferrer(referrer);

        saveSourceInPreference(context, source);
}

private static String getSourceFromReferrer(String referrer) {

        StringBuilder sourceBuilder = new StringBuilder();
        String source = null;

        try {
            referrer = URLDecoder.decode(referrer, "UTF-8");
            String[] utms = referrer.split("&");

                String utm = getUtmValue(utms, Constants.UTM_SOURCE);
                sourceBuilder.append(Constants.UTM_SOURCE).append("=").append(utm).append("&");
                utm = getUtmValue(utms, Constants.UTM_CAMPAIGN);
                sourceBuilder.append(Constants.UTM_CAMPAIGN).append("=").append(utm).append
                        ("&");
                utm = getUtmValue(utms, Constants.UTM_ANID);
                sourceBuilder.append(Constants.SERVER_UTM_ADGROUPID).append("=").append(utm);


        } catch (Exception e) {
            e.printStackTrace();
        }
        source = sourceBuilder.toString();
        return source;
    }

    /**
     * read utm value for the given key
     *
     * @param utms utm string array, contains all the utm fields
     * @param key  key
     * @return value of the key in utm
     */
    private static String getUtmValue(String[] utms, String key) {
        String utm = null;
        boolean foundUtm = false;

        for (String utm1 : utms) {
            utm = utm1;

            if (utm.contains(key)) {
                foundUtm = true;
                utm = utm.split("=")[1];
                break;
            }
        }

        if (!foundUtm) {
            utm = "Null";
        }
        return utm;
    }

** Manifest **

<receiver
    android:name=".receiver.AnalyticsReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

<receiver android:name=".receiver.AlarmStartReceiver"
          android:enabled="true"
          android:exported="true">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER"/>
    </intent-filter>
</receiver>

what could be the issue here ? if I install the app directly from play store (without referrer url, then it works fine). I have checked the logcat logs, and I saw the receiver calls multiple times

EDIT

I have tested app with this adb command adb shell am broadcast -a com.android.vending.INSTALL_REFERRER --es "referrer" "utm_source%3Dgoogle%26utm_medium%3Dcpc%26utm_term%3Dtest%2520fund%26utm_content%3Dnew%2520ad%26utm_campaign%3Dtest%26anid%3Dadmob; and I found it repeatedly calls INSTALL_REFERRER receiver.

UPDATE, Log when install from play store

MultipleInstallBroadcastReceiver.onReceive(MultipleInstallBroadcastReceiver.java:31)
02-27 17:11:46.840 21946-21946/my.package.name W/logd: Dropped 2
02-27 17:11:46.840 21946-21946/my.package.name E/art:     at my.package.name.receiver.CommonAnalyticsTrackingReceiver.onReceive(CommonAnalyticsTrackingReceiver.java:29)
02-27 17:11:46.840 21946-21946/my.package.name W/logd: Dropped 3
02-27 17:11:46.840 21946-21946/my.package.name E/art:     at my.package.name.receiver.CommonAnalyticsTrackingReceiver.onReceive(CommonAnalyticsTrackingReceiver.java:29)
02-27 17:11:46.840 21946-21946/my.package.name W/logd: Dropped 2
02-27 17:11:46.840 21946-21946/my.package.name E/art:     at com.appsflyer.MultipleInstallBroadcastReceiver.onReceive(MultipleInstallBroadcastReceiver.java:31)
02-27 17:11:46.840 21946-21946/my.package.name W/logd: Dropped 2
02-27 17:11:46.840 21946-21946/my.package.name E/art:     at my.package.name.receiver.CommonAnalyticsTrackingReceiver.onReceive(AnalyticsTrackingReceiver.java:29)
02-27 17:11:46.840 21946-21946/my.package.name W/logd: Dropped 3

this is the log when install from play store, it comes around 1000 times.

0

There are 0 best solutions below