I have successfully integrated urban airship push notification to my android application. I ran into an issue here, that is the apID becomes null with the very first launch and then with the second launch, apId comes correctly.
This is how I grab the apId:
String apid = PushManager.shared().getAPID();
This is the class that I have used:
public class MyApplication extends Application {
    public static SharedPreferences PREFS_TOKEN;
    public static final String PREFERENCE = "UrbanAirship";
    public static String tokenKey;
       @Override
       public void onCreate(){
           AirshipConfigOptions options = AirshipConfigOptions.loadDefaultOptions(this);
           UAirship.takeOff(this, options);
           PushManager.enablePush();
           Logger.logLevel = Log.VERBOSE;
            // use CustomPushNotificationBuilder to specify a custom layout
            CustomPushNotificationBuilder nb = new CustomPushNotificationBuilder();
            nb.statusBarIconDrawableId = R.drawable.paw;// custom status bar icon
            nb.layout = R.layout.notification;
            nb.layoutIconDrawableId = R.drawable.paw;// custom layout icon
            nb.layoutIconId = R.id.icon;
            nb.layoutSubjectId = R.id.subject;
            nb.layoutMessageId = R.id.message;
            // customize the sound played when a push is received
            // nb.soundUri =
            // Uri.parse("android.resource://"+this.getPackageName()+"/"
            // +R.raw.cat);
            String apid = PushManager.shared().getAPID();
            Logger.info("My Application onCreate - App APID: " + apid);
            PREFS_TOKEN = this.getSharedPreferences(PREFERENCE,
                    Context.MODE_PRIVATE);
            Editor edit = PREFS_TOKEN.edit();
            if (apid != null && apid != "") {
                edit.putString(PREFERENCE, apid);
                edit.commit();
            } else {
                edit.putString(PREFERENCE, apid);
                edit.commit();
            }
            tokenKey = PREFS_TOKEN.getString(PREFERENCE, "");
            System.out.println("---------- - App APID: " + tokenKey);
            PushManager.shared().setNotificationBuilder(nb);
            PushManager.shared().setIntentReceiver(IntentReceiver.class);
       }
    }
I also have an IntentReceiver class. Any help is appreciated.
I found out that the reason is a delay, to get the apId, it takes some time, therefore, in your IntentReceiver class, you have to wait for `PushManager.ACTION_REGISTRATION_FINISHED to fire. From there, you can get the apId:
if (action.equals(PushManager.ACTION_REGISTRATION_FINISHED)) {
            Log.i(logTag,"Registration complete. APID:" + intent.getStringExtra(PushManager.EXTRA_APID)+ ". Valid: "+ intent.getBooleanExtra( PushManager.EXTRA_REGISTRATION_VALID, false));
            // Notify any app-specific listeners
            String apid = PushManager.shared().getAPID();
            Intent launch = new Intent(UAirship.getPackageName()+ APID_UPDATED_ACTION_SUFFIX);
            UAirship.shared().getApplicationContext().sendBroadcast(launch);
        }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With