Friday, December 9, 2016

Adobe Analytics Implementation and Lifecycle

Adobe Analytics Implementation and Lifecycle


Get the SDK
Requires iOS 6 or later

  • ADBMobile.h: The Objective-C header file used for iOS AppMeasurement.
  • ADBMobileConfig.json: SDK configuration file customized for your app.
  • AdobeMobileLibrary.a: A bitcode-enabled fat binary containing the library builds for iOS devices (armv7, armv7s, arm64) and simulators (i386, x86_64). Should be linked when target is intended for an iOS app.
  • AdobeMobileLibrary_Extension.a: A bitcode-enabled fat binary containing the library builds for iOS devices (armv7, armv7s, arm64) and simulators (i386, x86_64). Should be linked when target is intended for an iOS extension.
  • AdobeMobileLibrary_Watch.a: A bitcode-enabled fat binary containing the library builds for Apple Watch devices (armv7k) and simulators (i386, x86_64). Should be linked when target is intended for an Apple Watch (watchOS 2) extension app.
  • AdobeMobileLibrary_TV.a: A bitcode-enabled fat binary containing the library builds for new Apple TV devices (arm64) and simulator (x86_64). Should be linked when target is intended for an Apple TV (tvOS) app.

Note: If you download the SDK outside of the Adobe Mobile services UI, the ADBMobileConfig.json must be manually configured. If you are new to Analytics and the mobile SDK, we highly recommend using the steps in Before You Start to set up a development report suite and download a pre-populated version of the configuration file. Configuration is not difficult, but it can be a source of frustration when you are getting started.
Add the SDK and Config File to your Project

  • SystemConfiguration.framework
  • libsqlite3.0.tbd
  • AdobeMobileLibrary.a
  • SystemConfiguration.framework
  • libsqlite3.0.tbd
  • AdobeMobileLibrary_Extension.a
  • libsqlite3.0.tbd
  • AdobeMobileLibrary_Watch.a
  • SystemConfiguration.framework
  • libsqlite3.0.tbd
  • AdobeMobileLibrary_TV.a

Warning: Linking more than one AdobeMobileLibrary*.a file in the same target will result in inability to build or unexpected behaviors.
  1. Confirm that your app builds without unexpected errors.

Implement Lifecycle Metrics
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[ADBMobile collectLifecycleData];
    return YES;
}
Important: Any data passed to the SDK via collectLifecycleDataWithAdditionalData: will be persisted in NSUserDefaults by the SDK. The SDK will strip out any values in the NSDictionary parameter that are not of type NSString or NSNumber.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSMutableDictionary *contextData = [NSMutableDictionary dictionary];
[contextData setObject:@"Game" forKey:@"myapp.category"];
[ADBMobile collectLifecycleDataWithAdditionalData:contextData];
    return YES;
}


Information to help you implement the iOS library and collect lifecyle metrics (launches, upgrades, sessions, engaged users, and so on).
This section contains the following information:
Complete the steps in Before You Start to set up a development report suite and download a pre-populated version of the configuration file.
After unzipping the [Your_App_Name_]AdobeMobileLibrary-4.*-iOS.zip download file, you'll have the following software components:
  1. Launch the Xcode IDE and open your app.
  2. Drag the AdobeMobileLibrary folder and drop it under your project in the Project Navigator view.
  3. Ensure that the "Copy Items if Needed" checkbox is checked, the "Create Groups" radio button is selected, and none of the boxes in "Add to Target" is selected, then click Finish.
  4. Select ADBMobileConfig.json in your Project Navigator view, and in the File Inspector view, add it to any targets in your project that will use the Adobe SDK.
  5. Click on your app in the Project Navigator view, then select your targets and link the required frameworks and libraries in the Linked Frameworks and Libraries section on the General tab.
    • iOS App Targets
    • iOS Extension Target
    • Apple Watch (watchOS 2) Target
    • Apple TV (tvOS) Target
After you enable lifecycle, each time your app is launched, a single hit is sent to measure launches, upgrades, sessions, engaged users, and many other Lifecycle Metrics.
Add a collectLifecycleData/collectLifecycleDataWithAdditionalData call in application:didFinishLaunchingWithOptions:
Including Additional Data with Lifecycle Calls
To include additional data with lifecycle metric calls, use collectLifecycleDataWithAdditionalData:
Additional context data values that are sent with collectLifecycleDataWithAdditionalData must be mapped to custom variables in Adobe Mobile services:
Other Lifecycle Metrics are collected automatically.

Thursday, December 1, 2016

iOS Push Notifications in C# with Moon-APNS

The library is called Moon-APNS and it can be downloaded from here.
This is the first version of the library, but It has been tested under pressure and on a production version of an application so feel safe to plug it to you application. Moon-APNS can be used in any .net application web or windows based.
Moon-APNS is benefiting from new Apple Push Notification structure, called Enhanced Push Notification. Which enables the library to receive feedback on each notification sent to apple server asynchronously, you may say we can receive that response with apple feedback service, but unfortunately if you send a payload to apple server with wrong format, broken or missing device tokens apple will terminate the connection straight away and it’s really hard to figure out which one was the faulty payload when you are sending them one after each other because it takes up to 2 seconds for the connection to be closed. Using Enhanced push notification you can sign each payload with a unique identifier and even better you can set TTL on each payload so apple know how long they should try to deliver the push notification before it expires. Moon-APNS will send payloads and receive feedback asynchronously and will re connect and resume sending the queue in case of any errors. All device tokens of rejected payloads will return as a list when the queue is sent and feedback is received from apple with error code sent by apple so you will know why the payload was rejected.
In Moon-APNS I’m using free and open source NLog library to log all events happening behind the scene which makes it really easy to debug the application while you are on production and you can’t attach a debugger.
Sending Apple push notification has never been so easy with Moon-APNS you will need less than 10 lines of code to send push notification and receive the feedback.
Ok enough talking I think it’s time for some coding.
1) You should generate your payloads:
1: var payload1 = new NotificationPayload("DeviceToken","Hello !",1,"default");
1: payload1.AddCustom("CustomKey", "CustomValue");
1: var notificationList = new List {payload1, payload2, payload3};
1: var push = new PushNotification(false, "P12File location","password");
1: var rejected = push.SendToApple(notificationList);
Feel free to add custom parameters to your payload as bellow:
2) Moon-APNS accepts a list of payloads, so I will add my payloads to a List:
3) create an instance of Moon-APNS push notification class, and pass true or false for using sandbox, location of your p12 file, and password for thep12 file if you have one and blank string if you don’t have one.
4) Create a list for your feedback, returned from library which will contain rejected payloads list.
5) Saved best for last call SendToApple method and pass list of your payload.
Is that all? Well yes it is! So if we ignore lines for generating payloads I can say we are sending push notification ad receiving feedback in 2 lines of code. Everything you need to do is handled by Moon-APNS library for you so you can have more time to consider on your application logic.