GitHub release
Integration guide

Changelog:

  • getInstallationCustomProperties()
  • getAccessToken()
  • Fixed user switching
  • Support many more notification formats and options:
    • BigText style
    • BigPicture style
    • Inbox style
    • Small icon
    • Large icon
    • Action buttons
    • Sound
    • Color
    • Default / no / custom vibration pattern
    • Default / no / custom led lighting pattern and color
    • HTML styling everywhere (fonts, colors, sizes, italic, bold, superscript, etc.)
    • Sub text
    • Info / number
    • Group
    • Sort key
    • Local only (do not appear on watch)
    • Only alert once (do not alert when updating a notification)
    • Timestamp / chronometer / no timestamping
    • Visibility
    • Progress
    • Ticker
    • Persons
    • Category
    • Ongoing (notification cannot be cleared until another update clears this flag)
  • Ship 100 material icons for your notification action buttons and small icons (Android does not permit dynamically loading such resource, they have to be bundled within the application)
  • Use expansible text format by default so longer text is properly fully displayed
  • Avoid system picker with HTTP deep-links if the application handles them directly
  • Removed a few HTTP requests
  • Upgrade some Android libraries

GitHub release
Integration guide

Changelog:

  • Update to Google Play Services GCM 8.4.0 for better push token renewal
  • Fix use of reflection without matching Proguard rules
  • Reduce number of network calls in case of push token renewal and application update
  • Report device country and currency
  • Permit auto dropping a notification received in foreground
  • Support omitting notification reception event
  • Fix small mistake in influenced app open measurement
  • Do not show data notifications that mimic an alert
  • Fix OpenUDID setup
  • Deprecate WonderPushBroadcastReceiver

Upgrading:

If you use a custom BroadcastReceiver for Handling your own notifications, as previously advised in the guide, please check your setup, and migrate to a GcmListenerService like advised from now on.

GitHub release
Integration guide

Changelog:

  • Distribute as a cocoa pod
  • Easier AppDelegate integration
  • Renamed manual AppDelegate integration method names
  • Permit auto dropping/opening a notification received in foreground
  • Do not simulate system alert for data notifications received in foreground
  • Report device country and currency
  • Handle updateInstallation button action
  • Handle "at notification click" actions
  • Do not simulate system alert for data notifications received in foreground
  • Report aps-environment entitlement to distinguish development from production
  • Regroup individual app open/close into sessions, like on the other platforms
  • Improve notification reception reporting using the remote-notification background execution mode
  • Fix from notification and influenced app open reporting
  • Fix notification reaction event reporting
  • Miscellaneous fixes

Upgrading

There are 3 new points that requires your attention:

  • We now use CocoaPods to ease the installation of the WonderPush SDK.
  • The integration is also facilitated in your AppDelegate, you won't have to implement methods just to call the WonderPushSDK.
  • You should add the remote-notification background execution mode for better statistics tracking.

I don't use CocoaPods yet

Don't worry it's easy. Install it using the following command:

sudo gem install cocoapods

You can read the complete installation guide here, but you normally won't need it.
(In some cases it can take 1-2 minutes before showing anything on the screen, just be patient, it's working real hard...)

Once CocoaPods is installed, you'll have to create a Podfile for your project.
You can give a try to the specially purposed command:

pod init

Or you can edit the Podfile file yourself so that it reads the following:

platform :ios, "7.0"

Then simply run:

pod install

This will edit your project to create a multi-project workspace so that each dependency builds as their respective developer planned them to build.

Finally, you will need to close your project in XCode, and open instead the newly created YourProject.xcworkspace file, as indicated in the command output.

You can continue with the next section.

Adding the WonderPush SDK as a CocoaPods dependency

Edit your Podfile to add the following line:

pod 'WonderPush', '~> 2.0'

Next run the following command to effectively download and incorporate WonderPush to your project:

pod install

You are now set to use the latest 1.2.x.x version. (You'll note that we dropped the v1 prefix, that denotes the API version to conform to semantic versioning.)
To perform a version update when a new one becomes available, you would simply run pod update.

AppDelegate changes

We now offer delegate chaining to permit the SDK to implement all the necessary methods without requiring you to do anything.
To use this technique, replace every call to made to WonderPush from your AppDelegate by the following code:

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [WonderPush setClientId:@"YOUR_CLIENT_ID" secret:@"YOUR_CLIENT_SECRET"];
    [WonderPush setupDelegateForApplication:application];
    return YES;
}

The key here is the +[WonderPush setupDelegateForApplication:] method call.

We placed it in the application:willFinishLaunchingWithOptions: method because this way the application:didFinishLaunchingWithOptions: can be properly intercepted.
Should you need to setup the delegate in the latter for any reason, make sure in addition to call the same-named method of the SDK yourself.

If you do not wish to use this automatic setup, you will have to implement each method of the UIApplicationDelegate protocol that have their matching function in the WonderPush SDK, and call the SDK in each of them.

The use of the automatic delegate setup does not prevent your implementations of the same-named methods from being called.
In fact our delegate makes sure that every message it receives is passed on to your delegate, whether it intercepted it for its own needs or not.

One caveat you may need to know: Our delegate implements the application:didReceiveRemoteNotification:fetchCompletionHandler: method, this means that the application:didReceiveRemoteNotification: of your delegate will no longer be called. You are asked to use the former instead. Here is the official documentation.

remote-notification background execution mode

This permits your app to receive silent or data-only notifications, as well as better report influenced application opens, by measuring the time between the reception of the notification and the following application open.
Although not mandatory, you are highly encouraged to add it to your app.

To add the remote-notification background execution mode, select your project in the Project navigator on the left, go to the Capabilities tab, switch Background Modes on, and check Remote notifications.
Here is the official guide to enabling background modes, and official documentation to the remote-notification background mode.

GitHub release
Integration guide

Changelog:

  • Switch to Android Studio. Deprecate Eclipse.
  • New easier integration (see below).
  • Fix issues when calling some functions from background thread.
  • Fix notification while application in foreground not being displayed as heads-up.
  • Use launcher icon in rich notifications, permit using another for the notification center.
  • Update targetSdk to 23
  • Update android-async-http to v1.4.9.
  • Include OpenUDID as source, not jar
  • Update OpenUDID to solve a SecurityException on some Samsung devices

Upgrading:

You can remove all the changes done to your AndroidManifest.xml.
They are now automatically added by the Android Manifest Merger, triggered when building you project using Gradle or Android Studio.
For a precise list of those changes, see the documentation of the previous version.

You must now include the WonderPush Android SDK as a gradle dependency as follows in your app/build.gradle:

// Include the SDK dependency
dependencies {
    compile 'com.wonderpush:wonderpush-android-sdk:1.2.0.0'
}

// Configure the few necessary parameters for the manifest merger
android {
    defaultConfig {
        manifestPlaceholders = [
                // Corresponds to [NOTIFICATION_ICON] in the previous manifest,
                // in the "notificationIcon" metadata of the WonderPushBroadcastReceiver.
                wonderpushNotificationIcon: '@mipmap/ic_launcher',
                // Corresponds to [YOUR_MAIN_ACTIVITY_CLASS] in the previous manifest,
                // in the "activityName" metadata of the WonderPushBroadcastReceiver.
                wonderpushDefaultActivity: '.MainActivity' // you can use a fully qualified class too here
        ]
    }
}

That's all!

If you performed some changes over the previously described in the documentation, or if you removed some changes however (like changing the BroadcastReceiver for handling your own notifications), you will need to instruct the manifest merger to merge them properly. Just refer to the new documentation for Android push notifications in such case.

GitHub release
Integration guide

Changelog:

  • Group calls to putInstallationUpdateProperties() - to reduce battery and bandwidth consumption
  • Fix NPE when opening notification without _wp.type - now also enforced server-side
  • Notification update using tag - notifications without campaign id no longer update one another