|  |  |  | Migration guide | 
|  |  |  | =============== | 
|  |  |  |  | 
|  |  |  | Please refer to each individual version step when migrating to a newer SDK. .x release typically require a small update such as changed manifest definitions, while .x.x releases may rename or move a method or constant too. | 
|  |  |  |  | 
|  |  |  | The [main integration document](https://github.com/ezeeworld/B4S-Android/blob/master/README.md) always describes the most up-to-date integration requirements. | 
|  |  |  |  | 
|  |  |  | ## Upgrade to 1.5.4 | 
|  |  |  |  | 
|  |  |  | No changes required. | 
|  |  |  |  | 
|  |  |  | ## Upgrade to 1.5.2 | 
|  |  |  |  | 
|  |  |  | If multiple B4S apps are installed, the SDK will now automatically choose the most recent SDK version to scan for beacons. This requires additional intent filter definitions for the `MonitoringManager` service. Please ensure that it is defined as: | 
|  |  |  |  | 
|  |  |  | ```xml | 
|  |  |  | <service | 
|  |  |  | android:name="com.ezeeworld.b4s.android.sdk.monitor.MonitoringManager" | 
|  |  |  | android:exported="true" | 
|  |  |  | tools:ignore="ExportedService"> | 
|  |  |  | <intent-filter> | 
|  |  |  | <action android:name="com.ezeeworld.b4s.android.sdk.monitor.B4S_ENSURE_SCANNING" /> | 
|  |  |  | <action android:name="com.ezeeworld.b4s.android.sdk.monitor.B4S_QUERY_SCHEDULE" /> | 
|  |  |  | <action android:name="com.ezeeworld.b4s.android.sdk.monitor.B4S_SCHEDULE_RESULT" /> | 
|  |  |  | <action android:name="com.ezeeworld.b4s.android.sdk.monitor.B4S_QUERY_VERSION" /> | 
|  |  |  | <action android:name="com.ezeeworld.b4s.android.sdk.monitor.B4S_REPORT_VERSION" /> | 
|  |  |  | </intent-filter> | 
|  |  |  | </service> | 
|  |  |  | ``` | 
|  |  |  |  | 
|  |  |  | ## Upgrade to 1.5.0 | 
|  |  |  |  | 
|  |  |  | It is no longer necessary (nor should you) to extend from the `B4SNotificationActivity` or manage a `B4SNotificationPopup` manually. Please remove manual references to these class from your code. Not that, as part of this change, you DO have to supply your `Application` object to the `B4SSettings.init(Application, String)` method. | 
|  |  |  |  | 
|  |  |  | The deep linking intent extra field constants, such as `INTENT_TITLE` and `INTENT_ACTIONID`, were moved from the `MonitoringManager` to the `NotificationService` class. | 
|  |  |  |  | 
|  |  |  | The scanning service was updated for greater speed and reliability, especially on devices with poor Bluetooth hardware. The demo mode (which was exclusively used for testing) is deprecated so the `B4SSettings.setDemoMode(boolean)` was removed. | 
|  |  |  |  | 
|  |  |  | On Android 6.0 a new runtime permission system was introduced, and this is now natively supported. When the user has not (yet) given permissions for the `android.permission-group.LOCATION` group, the SDK will show a request pop-up. Note that no alerts (pop-ups) will be shown if location services or bluetooth are disabled, although this [may now be configured](https://github.com/ezeeworld/B4S-Android-SDK/blob/master/README.md#alert-for-requirements). | 
|  |  |  |  | 
|  |  |  | The `B4SSettings.storeCustomerFields()` method was slightly changed, as it is no longer needed to supply a location while a `userId` parameter was added. | 
|  |  |  |  | 
|  |  |  | ## Upgrade to 1.4.5 | 
|  |  |  |  | 
|  |  |  | [Push messaging support](https://github.com/ezeeworld/B4S-Android-SDK/blob/master/README.md#push-messaging) was added, for which a new `B4SSettings.setPushMessagingSenderId(String)` method was introduced. As part of the feature, the notification generation was moved and a new service declaration is required: | 
|  |  |  |  | 
|  |  |  | ```xml | 
|  |  |  | <service | 
|  |  |  | android:name="com.ezeeworld.b4s.android.sdk.notifications.NotificationService" | 
|  |  |  | android:exported="false" /> | 
|  |  |  | ``` | 
|  |  |  | For push messaging integration itself, please refer to the [full integration document](https://github.com/ezeeworld/B4S-Android-SDK/blob/master/README.md#configure-the-sdk). | 
|  |  |  |  |