Взлет городского дирижабля необходимо объявить до того, как поделится (только для Kit Kat)

Я пытаюсь научиться использовать городской дирижабль для отправки push-уведомлений, и для этого я создал очень простое фиктивное приложение, которое его использует.

Приложение имеет собственный автопилот и собственную фабрику уведомлений для тестирования некоторых функций. Все это отлично работает на андроидах с версиями API> 19.

Однако для устройств с версией 19 (самая низкая, которую мне нужно поддерживать) автопилот никогда не инициализируется, и поэтому всякий раз, когда я пытаюсь получить доступ к UAutopilot.shared()..., приложение вылетает с ошибкой.

взлет должен быть объявлен до того, как поделится

Даже вызов Autopilot.autoTakeoff(application) не решает эту проблему.

Основная деятельность:

public class MainActivity extends AppCompatActivity{

    TextView mTextView;
    Button mButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.text);
        mButton = (Button)findViewById(R.id.button2);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mTextView.setText(UAirship.shared().getPushManager().getChannelId());
            }
        });
    }
}

Пользовательский автопилот:

class CustomAutopilot extends Autopilot {

@Override
public void onAirshipReady(UAirship airship) {
    Logger.info("onAirshipReady");
    airship.getPushManager().setUserNotificationsEnabled(true);
    airship.getPushManager().setNotificationFactory(new CustomNotificationFactory(UAirship.getApplicationContext()));
}

@Nullable
@Override
public AirshipConfigOptions createAirshipConfigOptions(@NonNull Context context) {
    Logger.info("setting airship config options");
    AirshipConfigOptions options = new AirshipConfigOptions.Builder()
            .setDevelopmentAppKey("xxxxxxxxxxx")
            .setDevelopmentAppSecret("xxxxxxxxxxx")
            .setDevelopmentLogLevel(Log.DEBUG)

            .setInProduction(false)

            .setGcmSender("232973289571")

            .setNotificationIcon(R.drawable.icon)
            .setNotificationAccentColor(Color.rgb(0, 72, 51))
            .build();
        return options;
    }
}

CustomNotificationFactory:

public class CustomNotificationFactory extends NotificationFactory {
    public CustomNotificationFactory(@NonNull Context context) {
        super(context);
    }

    @Nullable
    @Override
    public Notification createNotification(@NonNull PushMessage message, int notificationId) {
        NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(getContext())
                .setContentTitle("altered " + message.getTitle())
                .setContentText(message.getAlert())
                .setSmallIcon(message.getIcon(getContext(), R.drawable.icon))
                .setColor(Color.rgb(212, 45, 198))
                .setVibrate(new long[]{100, 50, 100, 200, 100, 50, 100})
                .setPriority(Notification.PRIORITY_MAX);

        return builder.build();

    }
}

person ricardo silva    schedule 04.07.2017    source источник
comment
Пожалуйста, удалите свои ключи/секреты из этого поста.   -  person ralepinski    schedule 18.07.2017
comment
Не могли бы вы опубликовать свой полный манифест, полный класс Autopilot и файл build.gradle? И ваш класс приложения, если применимо.   -  person ralepinski    schedule 19.07.2017


Ответы (1)


Вы регистрируете автопилот в своем манифесте?

В записи приложения:

    <!-- Autopilot calls takeOff without the need to override the Application -->
    <meta-data
        android:name="com.urbanairship.autopilot"
        android:value="your.package.here.CustomAutopilot"/>
person ralepinski    schedule 13.07.2017
comment
Я делаю это, да. Я обнаружил, что по какой-то причине, если у меня нет файла airshipconfig.properties, он портит кит-кат, и автопилот вообще не работает. Итак, что я сделал, так это создал этот файл, а затем использовал свой собственный автопилот, чтобы переопределить то, что мне нужно. - person ricardo silva; 14.07.2017
comment
Похоже, у вас неправильный ввод метаданных. Убедитесь, что он находится внутри раздела приложения манифеста, а значение — это имя вашего пакета + имя класса. Пакет классов должен быть вверху файла. - person ralepinski; 18.07.2017
comment
Этого не может быть по двум причинам: он отлично работает в других версиях API, отличных от 19; если я создам файл airshipconfig.properties, даже если я перезапишу все в своем пользовательском автопилоте, он будет работать во всех версиях, включая API 19. - person ricardo silva; 18.07.2017
comment
У меня есть эта ошибка после изменения имени пакета приложения. забыл обновить пакет в ‹значении метаданных ‹мета-данных android:name=com.urbanairship.autopilot android:value=your.package.here.CustomAutopilot/› - person Abdul Basit Rishi; 21.01.2020