# Changelog

**PushLinkAndroid-5.6.0.jar 2024.07.22**

* Now it works on Android 12, 13, and 14 \[Build.VERSION.SDK\_INT <= 34]. It requires new permission `<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />` in AndroidManifest.xml
* The NINJA strategy was removed
* [Fixed Path Traversal Vulnerability](https://support.google.com/faqs/answer/7496913)
* Pushlink.hasPengingUpdate with wrong spelling was removed.

**PushLinkAndroid-5.5.3.jar 2018.05.19**

* Now it works on Android 8 (Oreo) \[Build.VERSION.SDK\_INT <= 26]. It requires new permission `<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />` in AndroidManifest.xml

**PushLinkAndroid-5.5.2.jar 2016.11.11**

* Now it works on Android 7 (Nougat) \[Build.VERSION.SDK\_INT <= 24]. It requires `<provider android:name="com.pushlink.android.FileProvider" android:authorities="your.package.name" android:exported="true" />` in AndroidManifest.xml
* Now pushlink cleanup old downloaded apks.
* The new CUSTOM strategy is available. ([**NINJA is deprecated**](https://pushlink.gitbook.io/docs/strategies#background)**)**

**PushLinkAndroid-5.5.0.jar 2016.04.18**

* Fixed ninja NPE when using broadcast receiver

**PushLinkAndroid-5.4.5.jar 2016.03.13**

* Ninja fallback. (If the broadcast receiver is not present, it uses the classic ninja.)
* Commons network exceptions are now in debug level in logcat

**PushLinkAndroid-5.4.4.jar 2016.03.01**

* ~~Ninja now works in Android 5 or higher. Its requires the `<receiver android:name="com.pushlink.android.NinjaReceiver" />` in AndroidManifest.xml~~
  * **Wrong judgment. Ninja does not work in** [**Android 5**](https://pushlink.gitbook.io/docs/strategies#background)**.**
* `Ninja.setExtraShellCommand()` deprecated in favor of `Pushlink.setBeforeNinjaTaskShellCommand()`
* Available from Maven and Gradle by jitpack

**PushLinkAndroid-5.4.2.jar 2015.12.03**

* Bugfix: `Pushlink.hasPendingUpdate()` does not ignore the idle status anymore (Pushlink.idle method)

**PushLinkAndroid-5.4.1.jar 2015.11.25**

* Now Ninja is working in Android 64 bits
* Ninja does not execute the `export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/system/lib` command anymore
* New method `Ninja.setExtraShellCommand()` for custom workarounds
* Now Pushlink logs the entire stack trace. (No more clipping)

**PushLinkAndroid-5.4.0.jar 2015.09.30**

* Fixed critical bug when using android:process
* New api method `Pushlink.setMaxExceptionQueueSize()` (to avoid huge cache)

**PushLinkAndroid-5.3.0.jar 2015.04.02**

* Download resume. (Very welcome!)
* Bugfix that would send old exception assigned with wrong version label.
* Bugfix that in `Pushlink.addMetadata()` and `Pushlink.addExceptionMetadata()` when key == null. Not allowed anymore.
* Now it prevents sending the very same exception twice or more.
* Less data transfer when using the metadata api.
* Now `Pushlink.setCurrentActivity()` and `Pushlink.setCurrentStrategy()` are independent of the start method.
* Some timeout adjustments

**PushLinkAndroid-5.1.0.jar 2013.12.14**

* NINJA strategy improved. Now working on a large variety of devices.
* Now PushLink uses only the 443 port. Goodbye 6670 port.

**PushLinkAndroid-5.0.4.jar 2013.11.12**

* Download method improved to avoid memory overflow.
* Popup strategies no more play notification sound.
* Now popup strategies ask for launching the app even in ICS or later.

**PushLinkAndroid-5.0.3.jar 2013.07.31**

* Now it sends the last 200 lines of logcat. (no more 100)
* From now on exceptions have a handled/unhandled label
* New method `PushLink.addExceptionMetadata()`. This metadata is going to appear ONLY in the "Exceptions" tab of the web administration

**PushLinkAndroid-5.0.2.jar 2013.06.17**

* Important bug fix. PushLink.addMetadata wasn't working fine.
* TCP client improvement. It was aborting connections sometimes.
* Installation checking for duplicated ID's improved.
* Method name changed! `PushLink.setCurrentPopUpTarget()` is now `PushLink.setCurrentActivity()`.
* Now PushLink grabs screenshots for unhandled exceptions.

**PushLinkAndroid-5.0.1.jar 2013.02.21**

* Logging improvements
* Bugfix. Calling `PushLink.setCurrentStrategy()` before `PushLink.start()` had no effect.

**PushLinkAndroid-5.0.0.jar 2013.02.06**

* Package change. Now all classes are under "com.pushlink.android"
* Critical bug fix. The heartbeat was not working when the devices were sleeping.
* The Device ID is back. Now the user MUST set the device id. Now the web administration shows off-line installations again.
* Api change to support device ID: Now `PushLink.start()` has a brand new fourth parameter. The device ID.
* Method name changed from `PushLink.sendAsyncNotification()` to `PushLink.sendAsyncException()`.
* Pushlink now has two lightweight threads. They were named  "PushLink-PushListener" and "PushLink-Heartbeat".

**PushLinkAndroid-4.2.1.jar 2012.12.25**

* Huge logging improvements

**PushLinkAndroid-4.2.0.jar 2012.12.17**

* Critical bug fix. Low socket/connection timeout was killing some APK downloads.
* Now, exceptions are always sent lazily with a delivery guarantee. PushLink holds the exception (sqlite persistence) until it can be sent to the server. `PushLink.sendSyncException()` was removed.
* New method `PushLink.hasPengingUpdate()`. This method checks if there is a downloaded but not applied update. It also notifies the user again.
* Log messages improved

**PushLinkAndroid-4.1.1.jar 2012.11.12**

* `PushLink.sendExceptionNotification()` has changed to `PushLink.sendAsyncException()` and `PushLink.sendSyncException()`
* Fixed NPE when `Pushlink.setCurrentPopUpTarget()` called before `PushLink.start()`
* When popup strategies were configured before PushLink.start, the popup title would appear "Application" instead of the real application name. Fixed!
* Log messages improved

**PushLinkAndroid-4.1.0.jar 2012.09.26**

* Lighter. HttpClient code improvement. Fewer data transferred between server and client.

**PushLinkAndroid-4.0.0.jar 2012.09.14**

* Popups strategies now support screen rotation
* It is ready to show online installations in the web administration
* Fixed some minor bugs that could happen in push notification
* `PushLink.addGlobalInfo()` has changed to `PushLink.addMetadata()`

**PushLinkAndroid-3.1.3.jar 2012.07.27**

* Fixed an NPE that would appear in some cases
* Fixed some confusing log information

**PushLinkAndroid-3.1.2.jar 2012.06.06**

* API method `PushLink.idle(boolean)` added. Especially useful for NINJA strategy to update your app only when it is idle. See the usage in JAVADOC.
* Now it sends device coordinates if the GPS is enabled. This is sent only once when the app is started.

**PushLinkAndroid-3.1.1.jar 2012.05.04**

* Bug fixed. It could happen to receive several notifications to the same version in some specific situations.

**PushLinkAndroid-3.1.0.jar 2012.04.23**

* NINJA strategy has been created. Only for rooted devices. BETA!
* Logging improvements.

**PushLinkAndroid-3.0.0.jar 2012.04.20**

* Full redesign to support premium features.
* `PushLink.checkForUpdates()` in no longer available. There is no sense in using the new push architecture.
* `PushLink.start()` method has changed. Now it has only three parameters
* Notification now play standard device sound
* Automatic exception catch/send a notification is the default.
* Added two methods. `PushLink.disableExceptionNotification()` and `PushLink.enableExceptionNotification`

**PushLinkAndroid-2.0.4.jar 2012.03.07**

* `Push.addUserInfoForExceptionNotification()` is now `Push.addGlobalInfo`. This information is going to appear in all exception notifications sent.
* `Push.sendExceptionNotification(Throable)` was overloaded with `Push.sendExceptionNotification(Throwable, Map)`. Now it's possible to send more information about the exception context in Map.
* Professional JAVADOC added

**PushLinkAndroid-2.0.3.jar 2012.03.04**

* `Push.requestUpdateRightNow` is now P`ush.checkForUpdates`
* Now `Push.checkForUpdates()` does not block the thread anymore.
* `Push.checkForUpdates` bug fix. It was rushing the download but not the notification.

**PushLinkAndroid-2.0.2.jar 2012.02.20**

* Now if exceptionNotification is set to false and you call `PushLink.sendExceptionNotification()` it will not throw an exception anymore. It only will log: "You must start pushlink enabling exception notification before using PushLink.sendExceptionNotification or PushLink.addUserInfoForExceptionNotification. Check PushLink.start method exceptionNotification parameter."

**PushLinkAndroid-2.0.1.jar 2012.02.01**

* Exception notification now sends LogCat (Need READ\_LOGS permission)
* Exception notification now sends the whole stack trace
* Fixed some exception notification bugs

**PushLinkAndroid-2.0.0.jar 2012.01.20**

* API Redesigned. All of PushLink's methods are static.
* There is no method `Pushlink.stop()` anymore.
* Now we have exception notification! Receive emails when your app crashes.
* New API method `Pushlink.requestUpdateRightNow()` to rush version check.

**PushLinkAndroid-1.1.3.jar 2011.12.01**

* Now popups strategies work nicely with `PushLink.setCurrentPopUpTarget()`

**PushLinkAndroid-1.1.2.jar 2011.11.22**

* Fixed java.lang.NoClassDefFoundError: com.pushlink.android.SSLHandler when runnig on ADT emulator

**PushLinkAndroid-1.1.1.jar 2011.11.17**

* Pop Up strategy support
* i18n support

**PushLinkAndroid-1.1.0.jar 2011.11.03**

* SSL Support
* Internal storage bug fix

**PushLinkAndroid-1.0.0.jar 2011.10.28**

* Beta test


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.pushlink.com/changelog.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
