Adobe I/O Runtime to notify Launch property publish

This blog post describes how you can use the adobe provided resources to set up notification via Email, Slack, etc. when an adobe launch property gets published to production. I am going to provide step by step guide to achieve this.

Currently, Adobe Launch doesn’t notify users/admin group whenever a build goes to production on a launch property. Therefore, it becomes challenging for an admin to know when a build goes to production and who pushed the build to the production. Even though Adobe Launch provides a user interface to view the list of changes that happen on the adobe launch of the organization, it is a bit cumbersome to navigate through it. 

Why do you need this type of Notification? 

  • Create a strong governance process  while working with multiple stakeholders
  •  Improve transparency in the team regarding changes to production
Final Outcome as a Slack Notification

Workflow using Adobe I/O Runtime and Launch

Step-1: Request Adobe Runtime I/O access from the adobe representative or you can click on the “Apply Now” button from here. Also, You should make sure that you have system admin privilege to access the AEP Launch API.

Effort-> This is the simplest step.No coding required

Step-2: Once, you have access to Runtime then follow the steps to set that up and start creating an API to listen to an incoming JSON response.

You can name the API whatever, but here is the sample API URL- <a rel="noreferrer noopener" href="https://runtime.adobe.io/apis/https://runtime.adobe.io/apis/<client-namespace>/launch/build-notification

client-namespace will be the value that you will receive from the adobe during the setup.

Pro Tip: Stay focus and just follow the instruction to set up i/o on your machine. Look at the examples from GitHub to create an API. You are going to write some code!

Step-3: You should be creating a new project on console.adobe.io using AEP Launch API and follow the instruction mention here to set up your Postman with Adobe Launch API.

Pro Tip: This is a straight forward step. You need to follow the instruction from the GitHub. No Coding is required.

Step-4: In this step, we are going to create a callback to listen to an event that is happening on my launch web property. You can follow the instructions mentioned at the Adobe Launch Callback Section.

While creating the back, I am going to use the event – “environment.updated” and my runtime API created in Step-2. Below is the screenshot from the Postman for your reference.

You can grab your launch property id from the Home URL of your launch property. The one with the bold characters is your property id.

https://experience.adobe.com/#/@<Login Company Name>/launch/companies/Some ID/properties/PRc00cec00f1000ce1b0040c310a2340c8/overview

When you will hit the api to create callback then you should be able to see JSON response on your right pane which should indicate that callback is created.

Pro Tip: Following the instruction will make you feel better. You are getting there. No coding is required.

Step-5: Now, The callback is created. Go to your Adobe Launch Property and make a build on your development environment. As soon as you start a build then your runtime will start receiving the response in the JSON format. Your runtime I/O logs will start pilling up with “environment.updated” event when you proceed from dev environment to production environment.

Pro Tip: Look at the console of your runtime set up to see if you have got some JSON response. Add print statements in your code if you have not done so.

Step-6: At this point, majority of our work is done. We have to write some additional code to make sure that we are capturing the JSON response in which environment mentioned is “Production”. We are going to ignore all of those events which are coming to runtime i/o wheneve Dev/Stag environments get update.

Effort-> Coding is required.

Step-7: In this step, You will be creating an incoming message webhook on slack. You can follow the instruction from here to create a webhook.

Once you create the webhook then it would look like-

https://hooks.slack.com/services/<some value>

Pro Tip: Don’t distribute the app. Giving a meaningful name to the Bot and customizing with an icon will look good. No coding is required.

Step-8: Let’s come back to adobe runtime I/O. We have to ensure that the format of payload which is to be sent to Slack should match. Hence, we have to adjust the structure of incoming JSON response which we will be sent to slack.

You can format the payload as per your requirement and can adjust the value coming from the launch event.

Effort-> Coding is required

Once you complete the code then deploy the code on Adobe runtime I/O. Then, go to you to adobe launch property and publish a build to the production. You should be able to see a new notification using your slack Bot.

Great! So now you have set up notification Bot in slack whenever anybody publishes a build to production.

What is next?

  1. You may want to go back and think about what if I have multiple teams working with Multiple launch properties and you would like to publish the notification in a separate slack channel?
  2. You may want to use an email client such as Adobe Campaign to send an email to Adobe Launch admin members about the build.
  3. You may want to use the adobe runtime I/O to execute any Launch API as well such as creating callback.

I have created this service with the help of one of my colleagues. Feel free to drop a comment or feedback about this post.

Adobe Mobile App Analytics – Attach data using Launch Rules

Happy New Year! to all readers as this is my first post of 2020 and I am very excited to discuss something really amazing which got released lately and it is available for all clients who are using AEP Mobile App SDKs.

Last February, I wrote the post regarding the launch of new AEP SDKs. After a year, I must say that the product has changed a lot and so many interesting things came up.

Most of the clients usually forget to add context data on certain cases and it becomes challenging for a business to get that data any time soon. Some of the common scenarios which I have faced are-

  1. Missed to add certain context data key-value pairs on a page or on an event call.
  2. To Ask developers adding methods from adobe to capture data like- mid, SDK version, advertiser ID, Push ID, Visitor Identifier, etc.
  3. To Enrich the existing server calls  data with location-related information
  4. To add parameters to target retrieve location

There may be other scenarios as well based on other solutions such as campaign.

To deal with such scenarios, a new functionality “attach data to SDK events” has come up in the latest release of the AEP SDKs. You can now attach any additional data using JSON payload to the analytics call- trackState or trackAction. Attach data to SDK events feature is helpful

  1. To add any missing data in a server call or target retrieve location call
  2. Leverage the data elements which are available out of the box

Limitation

This feature can’t remove/update any existing metadata from the app but can only add to the existing. The JSON payload format is very strict so if you don’t follow the structure then data may not get “attached”.

Implementation Steps

Let’s take an example of attaching 3 context data across all page load-

  1. MID
  2. SDK version
  3. Event type

for #1 and #2- we have to use custom methods to retrieve the data and send it to each call and for #3-  you can’t get that in a method

Step:1- Create 3 Data elements for each metadata

Step:2- Create a rule and let’s select event as trackState or trackAction

Step:3- Select action as attach Data and then use the following JSON payload

{
“contextdata”: {
“busapp.ecid”: “{%%ECID%%}”,
“busapp.adIDs”: “{%%Advertiser ID%%}”,
“busapp.dayofweek”: “{%%Day of week%%}”,
“busapp.eventType”: “{%%Event Type%%}”,
“busapp.sdkversion”: “{%%SDK Version%%}”
}
}

Step:4- Create a new library and push the build to production and test the context data. It should look like as follows-

As I mentioned earlier this feature can be used for multiple scenarios such as you might have missed product string on product detail page then you can use this feature.

Project Griffon – Tool to Validate Data Collection from Mobile App

project griffon

Image Courtesy: Adobe

The gif explains a very creative way to validate the data collected from Experience Cloud Platform SDKs.

If you have used the Adobe Mobile SDKs to track the user experience then you must be aware of the major pain points to validate the collected data. Most of the time, I have used Charles Proxy tool to validate the tags and other data points.

Here are some of the challenges I’ve faced while using the Charles Proxy Tool:

  1. Charles Certificate didn’t work as expected on my device after I completed the setup
  2. Certain Android devices didn’t support “https call” without an additional code
  3. There were dependencies in the team to validate the tags as not all had a proxy set up on the phone
  4. My company network policy didn’t allow for proxy set up on my device to use Charles on the wifi network

In this post, I talk about Adobe’s new product- Project Griffon, which is for digital marketers and QA engineers. Also, I will focus on the analytics tags, target calls, and audience manager data from the mobile app after integrating the AEP SDKs.

Before you use this product, Here are some things to know: 

  • The product works only with the Latest Mobile SDKs. It is not compatible with SDK 4.x
  • The product is available only for iOS currently and Android will be available soon
  • The Project Griffon is still in beta stage

Let’s get started on how we can use this product. Below I outline the process that will eliminate any pain points for the user. If you don’t have access to the Beta you can request for the required access from this URL. 

Step-1: If you are using the Adobe Experience Platform SDKs, follow the steps mentioned at this Link to set things up on your mobile app.

Here are a few things to remember during your set up.

  • While validating your production version of the App, You may create a deep link with a unique flag and then trigger the below API- ACPGriffonBridge.startSession(url)
  • On your QA/Dev version of the app, call the Disconnect API programmatically- ACPGriffon.endSession(). However, This may not be required on Production where you can disconnect via interface itself.

Install the updated app on your iOS device before you go to the next step.

Step-2: Go to griffon.adobe.com and create a new session.The only information required to launch the app in testing mode is to fill the deep link URL:

Note: Above screenshot shows the dialog window to create a new session

The base URL will be available in your Xcode project at- Info -> URL Types

The Base URL would look like- learnomics://

After you click “Next” then it will create a session and you can launch the session based on the URL or QR code.

Note: Above screenshot shows the device status and QR code to launch the App. 

Step-3: Once you are connected, You will see “device status changes to “Connected” and then you can start receiving the events on the dashboard.

As you can see that there are many “event” types which may or may not be relevant to you.

The following event type might be relevant for you-

  1. LifecycleStart: To view lifecycle data
  2. AnalyticsTrack: To view the Analytics screen view and click view data
  3. AnalyticsResponse: To view the server side response
  4. Configuration Response Event: To view JSON config data

As you in the below screenshot, I have filtered with an event “AnalyticsTrack”. You should look for this event to validate your data coming from trackState and trackAction.

Note: The above screenshot shows Analytics calls from the mobile app

You can also view your JSON configuration file as a payload for the event -” Configuration Response Event”.

Note: The above screenshot shows the JSON config data from the payload

One of the most important features of Project Griffon is the ability to send custom events using the below API-

ACPGriffon.sendEvent(customeventName)

This feature is great for the developer to see if the correct payload is being sent or not whenever an action is being performed. There are many practical use cases of this feature. I wonder days won’t be too far if You can use the project griffon independently to see the request and response. Unfortunately, the product is not available to the open source community at this time. 

This is just a beginning and I am hoping that things will improve from here onwards.  The product is still in Beta and there is enough scope of improvement. (I can read your mind on that front so hang in there for some time).

Please feel free to comment on the post if you need any assistance to set up the Project Griffon.

Future of Mobile App Analytics from Adobe

Pic Courtesy: openxcell

There is no doubt that most of us are moving toward mobile app from the website for daily browsing activities such as shopping, Video call, watching videos etc. The usage of mobile data has soared in the last few years in developing countries like India, Indonesia, Brazil etc. due to the availability of cheap smartphones and lowest ever data tariff.

I am pasting a histogram which shows the rise in traffic from mobile devices such as Tablet and smartphones.

Most of the companies are looking forward to tapping a huge potential to acquire new customers using available options to re-targeting and acquire new users. More than 90% of Facebook’s revenue came from Ads on its Mobile App. Hence, It’s important to understand how well your marketing spending is paying off to bring more users to the mobile App.

In the last few years, Few challenges which I have faced while working on Mobile App Analytics are-

  1. How can the client control the tracking of the app effectively?
  2. How can we reduce the time of implementation of analytics or any 3rd party SDKs on the Mobile App?
  3. How can we bring the data sharing approach using a single SDK on the mobile app?

While some of the existing products such as Tealium For Mobile and Google Tag Manager with Firebase do solve these challenges but not so in an efficient manner. Hence, the core issues still stand with the developer rather than the team who manages the analytics or any other 3rd Party SDKs.

Last September, Adobe Launched an updated version of the Mobile SDKs. Its official name is Adobe Experience Platform SDKs. The SDKs has been developed considering the ease of implementation of any 3rd party or any Adobe solutions. let me discuss how we can solve these three challenges using Adobe Experience Platform SDKs.

First, The new SDKs allows you to manage the App Configuration using Adobe Launch. This really helps the analytics team to manage any hiccups around the App settings while launching the app to play store or App Store. Moreover, It saves the time of the development team which is really important. Below is the screenshot of User Interface to edit the settings of Adobe analytics:-

Second, Using extensions with the new SDKs helps the client to reduce the implementation time of several 3rd Party SDKs. There would be less effort from the development team to initialize the app and also it will save many APIs calls. Currently, There is no provision to trigger beacon using new SDKs remotely. I believe that this would be sorted out sooner than later by the Adobe team. This would add more flexibility to implement Adobe solution. The team is also planning to provide support to React Native App in the future. Below is the available extension on the Mobile App-

Third, Clients can create Rules on Adobe Launch to enable cross-solution implementation. These rules can trigger actions that can be extended to adobe and 3rd party SDKs.

By reading so far, you must have got an idea about the new Mobile App SDKs and some of its advantages.

If you are looking to get started with the new SDK then read the below useful resources-

A New beginning With Adobe Launch

After working for almost 6 years on two different TMS of adobe, It’s time for a change now.  Adobe announced a next-generation TMS last summit and now, in few days, Adobe Launch will be available for all customers. Some of the other Tag managers are far ahead in this race. But it’s never late in the game of technology.

I have been working or you can say playing around with the Adobe Launch for almost 7 months now. Since then, The product has evolved a lot and have added great confidence from the customers who are really excited to use TMS from Adobe.

The Adobe Launch has been developed on Adobe Cloud Platform and provides more flexibility than DTM. In this post, I am going to highlight few key features of Adobe Launch-

  • Launch APIs – It is possible to write some code and do exactly what could be possible from the User Interface. This means that developer can work on these open API to implement Adobe solutions.

You can learn how to use these APIs at –https://developer.adobelaunch.com/api/    It is possible to create a rule, data element, adapter and any other actions.

  • Deploying Marketing tags on SPAs– The Adobe launch has been developed to ensure that marketer can use the Tag Manager on SPAs in a seamless way. The launch gives the flexibility of firing tags based on the Order Number, clear the variables on condition, loading the Launch library in a sync way etc.
  • Building Extensions- Adobe now gives you the capability to build your own extension. It’s like building your own App and pushing to the play store or App Store. It’s really exciting. Consider a use case, where your internal team is building a chat based support system and you would like to use Adobe target to show custom content based on the segments. Currently, This will take a lot of effort to do so but building an extension and to use along with Target would be fairly a less time-consuming approach. Adobe Launch gives a marketplace for 3rd Party to build/manage extensions with the support of Adobe. You can read about how to get started with Extension from the following link- https://developer.adobelaunch.com/guides/extensions/

There are tons of other features which give more power to the developer as well as a digital marketer.

You can go the following document link to learn more about Adobe Launch-

Click to access launch.pdf

Also, Feel free to go through the below training video to learn some basics on Adobe Launch-

Let DTM listens your JSON responses!!

jsonIt is more than over an year ago when I used to work for a retail client and my job was to create robust data layer for analytics on W3C standard while considering the ease of development. It was really getting tedious to give instruction to their development team to pull the response and then pass the key-value pair in our data layer on the page. It was a heck of task to complete all the variables. Now, I wonder what if we could have wisely used the tag management system (at most of the places) at that time to build our data elements.

In the web development, It is very common to read the response from the server and most of the UI developers read these response to show some beautiful messages and creatives on client side. As an analytics consultant, I have seen many times consultant suggesting client to add a direct call rule on call back function. Most of the developers hate analytics folks and I mean it. They literally say why are “you” making my job tough? This is just a sneak pick of the hustle.

Coming to the point, My idea here is to use the JSON response which comes through and use our basic coding skills to capture the response in DTM data elements.

For example- I have an API which gives me a response code 200 OK after successful Sign In along with User information data.

Dummy API url- http://test.com/account/signin?profileid=abhishek

AND Successful JSON response as-

{ “login”:  [{     “response code” : “200”,     “profileid” : “6545455”,      “region” :  “bihar” }]}

Using 3rd part Non-sequential script, we can capture the profile details and pass in to data element.

jQuery(document).ajaxComplete(function(event ,xhr, settings){
if(settings.url.indexOf(‘account/signin’)> -1){
var profile = xhr.responseJSON;
if(profile) { _satellite.setVar(“xyz”, profile.profileid)
         }
    }
});

The above code will get you the profileid in a data element. Now, You can use this data element across all the platform- Adobe Target, Adobe audience manager etc.

The other use case to capture the JSON response is to fire the page load rule. You can write some custom code.

Hope this is helpful for all folks. Feel free to add your thoughts/comments here.

 

Power your mobile games using Adobe Analytics

In this era of Smartphones, Everybody loves to play video games. If you are traveling to office in the morning or Even if you are getting bored due to jibber-jabber of your girl friend. Video games are real stress buster and a way to boost your morale whenever you feel down. No kidding though.I tried playing FIFA and  have beaten real madrid many times.!!

realracing2

Most of the mobile games come free of  cost with restriction on playing levels and people choose to download free games. Most of the these games run ads to earn lot of money from the free version. Company like Zinga has invested alot to understand the behaviour of gamers. You can read this article about how Zinga has excelled on analysis of it’s gamer.

There are not so many mature analytics tools in the market using which you can track mobile games. Marketers have many options such as- Google analytics, flurry, Gamesanalytics, Mixpanel, Adobe Analytics etc. You can track virtually everything using few free tools. So, Why a game company should invest in paid analytics tools like- Adobe Analytics? That’s right. After reading this article, think twice before you chose your analytics tool to track your mobile games.

I am listing following key metrics related to mobile games on which a product manager should focus during planning phase-

  • Total Unique users of the game
  • Daily Unique users of the game
  • Repeat users of the game
  • Average session length per user
  • Average user acquisition cost
  • User experience rating
  • Return Frequency of the user
  • Revenue generation from the ads of the game

If you are keeping these above KPIs in your mind then you are almost ready to roll. Adobe analytics can power most of these KPI very peacefully without lot of customisation.These KPIs can be tracked by just plugging the AA SDK and some minor tweaks in the code.Marketers can run custom campaign by tracking “Time Since Last Use” value in AA to passive users of the app.

For marketers, It is key to let users play the mobile game. Some time, we get frustrated if we don’t clear few levels and we stop playing the game. At this point, marketer should run few In-app messaging campaign or Push Notification campaign to encourage users to play the game by providing some bounty or coupon code.

Adobe analytics provides easy way to track clicks on the ads using postback URL tracking. This help marketers to understand the ad performance. Marketers can get the data from appfigures and appflyers in to adobe analytics using simple integration wizard.

Marketers can change the experience of the mobile games using Adobe Target which comes with lot of features. Adobe also provides AMO to run your ads on mobile apps. So It is combine power of Adobe Analytics, Adobe Target and Adobe Media Optimiser.

bg-mobile-services-overview-diagram-940x364

Feel free to reach out to learnomics@outlook.com to know more about mobile games analytics using Adobe analytics and other available tools from adobe.

BrownPacket- Medicine Delivery App

12400960_1519936748306860_6500975368818649435_n

This post is dedicated to BrownPacket– A medicine delivery app in India. BrownPacket is a mobile app using which you can order your prescription medicines/products and get it delivered with in 60 minutes.Currently, Brownpacket’s team has started the operation in bangalore and limited to certain areas- Koramangala, Ejipura and Domlur.

The app has been designed in a way that people have to go through a limited steps to order medicines/products easily.

12799013_1531904723776729_3422827741350107156_n

You need to click the prescription from the app. The App has easy workflow to provide the medicines which ordered via the app.

If you looking to order medicines from your prescriptions then follow the steps-

  • Click and crop the prescriptions
  • Confirm the delivery address- as we have 3 choices for address
  • Review and submit the order and get it delivered with in 60 minutes.
Note- Your prescription must have doctors details on it and clicked clearly so that store manager can read it easily.

If you need any non-prescription medicines/products then follow the below steps-

  • Write the medicines/products name on a paper
  • Click and crop the paper.
  • Confirm the delivery address- as we have 3 choices for addresses.
  • Review and submit the order and get it delivered with in 60 minutes.

Please wait till 15 march and BrownPacket will have most of the medicines to select and to purchase without any hassle.

BrownPacket App will be launched in other parts of bangalore in phases so wait for few more weeks.

Deep Link Tracking on Mobile App using Adobe Analytics

What is Deep Linking in Mobile app?

Deep linking is the use of a hyperlink that links to a specific, generally searchable or indexed, piece of web content on a website. In case of mobile app, Deep linking consists of using a uniform resource identifier that links to a specific location within a mobile app rather than launching the app. Deferred Deep Linking allows users to deep link to content even if the app isn’t already installed.(source- wikipedia)

Example- TestApp://menshoes/123456

Why do we need Deep Linking?

Many companies encourage users to view the content from search engine/email marketing or social media platform in the Mobile app rather than creating an another of web browser view. Recently, I got an email from Instagram as-

instagram

When I clicked “Open in App” button then this picture opened in my Instagram app instead of requesting me to log in again on a mobile web browser. It is a challenge for marketers to “bucket” a user in an appropriate “retention channel”. Spending money in marketing of the products on mobile app are tricky. So, It is important to track the “acquisition” of such users.

How It Works ?

deep-link-1

When user redirects to app-store in case they don’t have app installed on the mobile then that type of link is termed as deferred links. It will allow user to download the app on their mobile.

Track Deep Links on Mobile App

Follow the steps below to track deep link urls using adobe analytics:

  1. To enable deep linking, go to the Xcode project. In the URL Types section, click on the + button, and then add an identifier and a URL scheme. Ensure that the identifier and URL scheme you select are unique. Take note of the URL scheme you enter, as this is how iOS knows to open a link in your app.
  2. Tag all your campaigns that redirects to Mobile App. Use the URL scheme from the step-1. Just try the scheme on your browser to confirm that the deep link is working- “your-url-scheme://”
  3. Handling the opening URL- Ask your developer to override appropriate method. In case of launch, need to override appdelegate. Add (key,value) context data with source name along with trackAction call.
  4. Map that context data using processing rule to an eVar.

For more details on approach and custom code, feel free to reach out to learnomics@outlook.com

How to use SiteCatalyst Plugins in Mobile App

4AFC55FF-C098-4F71-9D5B-0A895D28BF75_mw1024_s_n

These days, I am writing very often but not publishing those articles. Most of the articles are in the draft folder and i am trying to give finishing touch to all. Ideas and thoughts,for me, come instantly. Sometimes, even after spending hours on work, i have to say to myself- “this is not working” and i get up and take a break. Last week i got an email from one of my colleague from previous employer saying that Can we use sitecatalyst plugins in My Mobile App? I read it again and i replied yes, we can use few of them but not all them.

It is evident that Mobile app doesn’t support cookies so there must be some other workaround to do so. These workarounds are very close to the implementation of sitecatalyst plugins. Let’s take a look on few plugins which are very often in use-

1. getNewRepeat– This plugin is used to capture new vs. repeat visitor based on a cookie and you can set the expiry of that cookie in one of the parameter of this function. In your mobile app, launches are similar to sessions which is again closely related to visit. Developer can see “Launches” as a context data in a Network packet sniffer tool.

sitecatesnap

Assign a variable for New vs. Repeat visitor, and then write a processing rule having following condition-

if(Launches==1)

set eVarX= propX=new;

else  set eVarX= propX=repeat;

You can use this eVar similar to the one in website and can be used for attribution and segmentation as well.

2. DaysSinceLastVisit-  This plugin is used to identify how often visitors visit my site on daily basis and very useful to understand the behaviour of return visitors. In your mobile app, When user launches the app for the 2nd time then there is a context data- “DaysSinceLastUse”. You can map this context data in to an eVar or Prop to capture that data. The data will be in numeric format.

sitecat2

For the first launch, you may need to set some custom value like “First use” so that you can easily differentiate between “Zero” and “First use”.

3. getTimeParting-  This is one of the most popular plugins among clients. They can create segments based on days/type of days/ hours etc. and can analyse the data more deeply. In mobile App, Adobe provides Two out of box context data-

sitecatesnap

“DayOfWeek” and “HourofDay”. You can capture these values and use classification rule builder to get more valuable report out of it.

Hope this is helpful for new mobile app analyst to get the right data from adobe analytics mobile services SDK. Feel free to reach out to me if you have any queries at learnomics@outlook.com.

*Adobe Analytics logo is a copyright of Adobe Systems.