Thursday, September 11, 2014

Developing a Simple Android Wear Application: Part 1

This post will walk through the steps involved in creating a simple Android Wear application. I will be using the Balloon Pop Android app as the code example.

In order to get started you need to have already completed the following steps:
  1. Download the Android SDK
  2. Configure a Wearable device or Emulator
  3. Install the latest platforms and tools (either ADT/Gradle)

image 1: main app layout
The application is comprised of two modules: app and wear.

The app portion is primarily required in order to deploy the application on Google Play.  It simply contains one Activity with a basic layout that notifies the user of the fact that it is a wearable application. (see image 1) 

The most important part of the module is that it includes the wear app as a dependency, this way the wearable app will be automatically installed when the main application is installed. You can read more about your packaging options here.

The wear portion contains the activities and game logic that run on the actual wearable device.  It uses the wearable support library in order to take advantage of two UI components: the BoxInsetLayout and the WearableListView.

The BoxInsetLayout is very useful for supporting both rectangular and circular devices because it allows you to define boundaries for its elements.  We use it for the "Addition" and "Subtraction" views so that all three balloons are displayed in the viewable area.


Part 2 will cover the WearableListView provided in the support library. This post was based on the Balloon Pop Android application available on Google Play.

Thursday, September 4, 2014

Balloon Pop for Wear: Our First Wearable App

We recently released our first application for Android Wear: Balloon Pop for Wear.  We are very excited to be among the first developers to make something designed for wearable devices that kids can enjoy playing!

Balloon Pop is a math and counting game that currently features three modes of play: Counting, Addition, and Subtraction.

In the "Counting" mode you are presented with a number of balloons that you have to *POP*, when you get it right you move on.

In the "Addition" mode you are presented with a simple addition math problem. Then you have a choice of 3 possible answers. *POP* the balloon to see if you are right.

In the "Subtraction" mode you are presented with a simple subtraction math problem. Then you have a choice of 3 possible answers. *POP* the balloon to see if you are right.

Each mode has nice graphics and vibration features to reinforce when your child gets the answers right!

This game is **AD-FREE**, so please give it a try and leave us some feedback. We are interested in knowing what other modes you would like to see in the future.

Tuesday, February 11, 2014

Budding Baby Promo Video Created

We recently created a promo video for Budding Baby.  It highlights the different features of the application and was done using iMovie.  Enjoy!


Tuesday, December 24, 2013

Google's AdMob Refunded Several Payments


Over the past few days we have had some weird experiences with Google's AdMob.  They refunded several hundred dollars worth of payments that we made for marketing campaigns; and then today they reversed some of those same payments.  The only thing I could find online about this issue was in a forum:

http://forums.makingmoneywithandroid.com/advertising-networks/4032-admob-refunded-all-my-payments.html

Has anyone else had this same issue?  I can't find any contact information for them either.  Sounds like a major screw up to me :-(

Monday, December 2, 2013

Sivart Technology's Word Crank is Approved for Google Play for Education

We were recently notified by Google, that our word game, Word Crank, has successfully passed review and is approved for inclusion in Google Play for Education!

What is Google Play for Education?  "Google Play for Education is a destination where schools can find great, teacher-approved, educational apps and videos on Play Store. Teachers can filter content by subject matter, grade and other criteria." -- Google

We are so excited to have this opportunity and look forward to seeing what results!

Wednesday, July 31, 2013

Google Play Games App Overview


Last Wednesday, Google released the Google Play Games App.  According to Google:  "[it's] is the easiest way for you to discover new games, track achievements and scores, and play with friends around the world."

What I really enjoy about the app is the ability to easily see all of the games that I currently have installed that include the Game Play Services.  Previously you basically had to just look at the developer's release notes to find out if they had incorporated Game Services.

Furthermore, the release of this app is definitely an opportunity for developers who may have been sitting on the fence on whether they should give the Game Services a try.  You essentially get free exposure for your game by integrating with Google's service.  This could also really drive engagement, as each game the user plays is displayed prominently with a badge showing the current number of achievements they have won.

The interface is very simple and clean.  You have several pathways to discovering new games and new people for your Google+ circles.  Have you downloaded the new Google Play Games app yet?  What are your first impressions? Leave comments below.

Wednesday, June 19, 2013

[Android Tips]: Play Store 'staged rollouts' with Google Analytics

Recently the Google Play Store has added the ability for developers to release a new version of their application's apk progressively by means of staged rollouts.  According to Google this allows you to "get feedback on your new app or app update early in its development and make sure your users are happy with the results."  With the release of the latest version of Word Crank, our flagship game, we decided to take advantage of this new feature.

Staged Rollouts


We released version 1.5.0 of our application to 20% of users initially and then monitored the results in Google Analytics.  In order to distinguish the engagement of the users on the latest version of the app from the others, we created two new custom segments in our primary Dashboard view.  The first segment included all users with version 1.5.0 of the application and the other segment included all other versions of the application.

Custom Segments

 

Once these segments were created we monitored the statistics for a few days and then gradually increased the percentage of rollout to 100%.  This is an extremely useful tool in making sure your new release increases user engagement and the desired traffic goals of your application.

Have you tried staged rollouts?  Leave a comment below.

Monday, June 10, 2013

[Android Tips]: Getting users to +1 your app

In order to improve your application's ranking in the Google Play store, you should get users to +1 your app.  You can do this using GooglePlayServices and the PlusOneButton Android UI element.  Here is a simple layout file that includes the plus one button:

[code]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dip"
android:background="@android:color/black" >

<com.google.android.gms.plus.PlusOneButton
xmlns:plus="http://schemas.android.com/apk/lib/com.google.android.gms.plus"
android:id="@+id/plus_one_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
plus:size="tall"
plus:annotation="inline" />

</LinearLayout>
[/code]

It creates the following User Interface Component:
google_plus_button_layout

 

 

Then in your MainActivity's onResume method you can check to see if the layout is visible and then initialize the button:

[code]
@Override
protected void onResume() {
super.onResume();

if (plusLayout.getVisibility() == View.VISIBLE) {
// Refresh the state of the +1 button each time the activity receives focus.
mPlusOneButton.initialize(mPlusClient, APP_URL, PLUS_ONE_REQUEST_CODE);
}

}

[/code]

 

The APP_URL is the link to your app on the Google Play Store

The PLUS_ONE_REQUEST_CODE is any integer value >= 0

Building on the AppRater code base, you can modify it to set a flag when you want to show the plus_button_layout to the user, similar to the following:

[code]

public class AppRater {
private final static int DAYS_UNTIL_PROMPT = 1;
private final static int LAUNCHES_UNTIL_PROMPT = 4;

public static void app_launched(Context mContext) {
SharedPreferences prefs = mContext.getSharedPreferences(PreferenceConstants.PREFERENCE_NAME, Activity.MODE_PRIVATE);
if (prefs.getBoolean(PreferenceConstants.PREFERENCE_SHOW_PLUS, false)) { return ; }

SharedPreferences.Editor editor = prefs.edit();

// Increment launch counter
long launch_count = prefs.getLong("launch_count", 0) + 1;
editor.putLong("launch_count", launch_count);

// Get date of first launch
Long date_firstLaunch = prefs.getLong("date_firstlaunch", 0);
if (date_firstLaunch == 0) {
date_firstLaunch = System.currentTimeMillis();
editor.putLong("date_firstlaunch", date_firstLaunch);
}

// Wait at least n days before opening
if (launch_count >= LAUNCHES_UNTIL_PROMPT) {
if (System.currentTimeMillis() >= date_firstLaunch +
(DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)) {
editor.putBoolean(PreferenceConstants.PREFERENCE_SHOW_PLUS, true);
editor.commit();
return ;
}
}

editor.commit();
}

}

[/code]



*** Download our first game: Word Crank today for free: Available on iOS and Android***

Saturday, May 4, 2013

[Android Tips]: Uploading Images to a Remote Web Service

upload

In order to upload images to a web service that requires a Multipart request, the below code will create the file part object and include it as part of the MultiPartRequest entity. I store this method in a separate class and call it statically from within an AsyncTask.  This type of functionality is particularly useful for when you want to upload a user's profile photo and store it on your remote file system.

The following Apache libraries are required:

  • commons-codec.jar (version used: 1.3)

  • commons-httpclient.jar (version used: 3.0-rc4)

  • commons-logging.jar


[code language="java"]
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;

static boolean doImageUpload(final byte[] imageData, String fileName) throws Exception {
String responseString = null;

PostMethod method = new PostMethod(<remote url>);
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(100000);

FilePart photo = new FilePart("file-data", new ByteArrayPartSource(fileName, imageData));
photo.setContentType("image/jpeg");
photo.setCharSet(null);

Part[] parts = {photo};
method.setRequestEntity(new MultipartRequestEntity(parts, method.getParams()));
client.executeMethod(method);

responseString = method.getResponseBodyAsString();
method.releaseConnection();

if (responseString.equals(<successful response>)) {
return true;
} else {
return false;
}
}
[/code]

Have you done this a different way?  Leave a comment below.

*** Download our first game: Word Crank today for free: Available on iOS and Android***

Friday, April 26, 2013

The Social Media Stats

Very surprising information about which social media sites appeal to the various demographics.

Monday, March 18, 2013

Seems People Like Word Crank

Just a few quotes from some of our players:

[caption id="attachment_348" align="aligncenter" width="620"]user reviews of Word Crank User Reviews of Word Crank[/caption]

Tuesday, January 15, 2013

Creating An Elastic Beanstalk Application with AWS

In experimenting with new technologies and a possible server infrastructure for some of our future products, I came across the Elastic Beanstalk offering of Amazon AWS. Essentially, Elastic Beanstalk takes the guess work out of setting up a Cloud-based application environment.  According to Amazon,
"You simply upload your application, and AWS Elastic Beanstalk automatically handles the details of capacity provisioning, load balancing, scaling, and application health monitoring."

Elastic Beanstalk supports applications developed in Java, PHP, .NET, Python, and Ruby. To that end, I wanted to share through a series of screen shots how simple it is to get an application up and running.

Once you choose the type of application server that you want to use, in this case I chose Tomcat 7, you are presented with the following screen:

AWS Elastic Beanstalk 1

It takes a few minutes for your application stack to be created. I would recommend updating the notification settings to your personal email address.  If your application server becomes unhealthy or there are upcoming events that may affect your RDS instance, etc, you will be notified via email.  Next you just click on "Upload New Version" and fill out some very basic information, choose your war file and Amazon does the rest.

AWS Elastic Beanstalk 2

Within a few minutes you have your very own application deployed in the "Cloud"! For testing purposes I created a simple Hello World application using Spring MVC.

Hello_World_Beanstalk

Have you tried Elastic Beanstalk? Did it work for your needs? Leave comments below.

Wednesday, January 2, 2013

2012 Blog in Review

The WordPress.com stats helper monkeys prepared a 2012 annual report for this blog.



Here's an excerpt:
600 people reached the top of Mt. Everest in 2012. This blog got about 2,900 views in 2012. If every person who reached the top of Mt. Everest viewed this blog, it would have taken 5 years to get that many views.

Click here to see the complete report.

Monday, October 15, 2012

Why I love the new Google Developer Console

Today Google released the preview of their new Developer Console to everyone.  I love it!  Why you may ask.  Well as someone who checks the statistics and ratings everyday of several applications, it's much easier to read and navigate.  The layout and design of the tables is very clean, allowing one to quickly get an overview of the current state of each application.



The new design allows you to quickly move between the statistics, ratings, app description, and apk uploads.  Previously you had to navigate between tabs and do a lot of extra clicking to get to similar pieces of information.



Yes, the new layout is very refreshing and I look forward to the other features that Google has in store for us developers.  What do you think?  Leave comments/feedback.

Monday, October 8, 2012

Game Development: Using Google Analytics to track user flow

Recently we have begun to take advantage of the flow visualizations available from Google Analytics for analyzing user behavior in Word Crank.



What is a Flow Report?
"Flow Reports in Google Analytics illustrate the paths visitors take through your website...In one graphic, you can see how visitors enter, engage, and exit your site. " -- Google Analytics

One aspect of these diagrams that I especially appreciate is the ability to compare two different time frames and see how the user flow differs.  I really recommend this if you include a new feature in your application and want to see what impact it has on user behavior.

How to Compare Two Dates:

  1. Select Compare to Past

  2. Choose a second date range

  3. Choose similar time periods ( full months or weeks )




Happy flow reporting!

Monday, September 3, 2012

Being Amazon's Free App of the Day: The Results

On Monday, August 27th, 2012, Word Crank Elite was the Free App of the Day in the Amazon App Store.  We were very excited about being given the opportunity and promised to share the results (find out how this opportunity came about, here).  So overall, we feel that the promotion was a success.  We were able to increase our game's visibility in the App Store and received some valuable feedback.

 

Here are a few statistics from the past week which help highlight the impact on our traffic:








Aug. 27 - Sep. 2


Visits: 50,677

Unique Visitors: 14,201

Pageviews: 38,010

Pages / Visit: 0.75

Avg. Visit Duration: 00:11:17

Aug. 19 - Aug. 26


Visits: 1,508

Unique Visitors: 251

Pageviews: 1,169

Pages / Visit: 0.78

Avg. Visit Duration: 00:15:16

Based on the above table you can see that we had a huge influx of traffic; an increase of over 33x. We also saw an increase in the number of downloads of the free version of Word Crank, in the other app stores, Google Play and iOS.

What was unexpected to us was the number of negative comments related to the use of OpenFeint in the game.  On Google Play we have 4.4 stars, but on Amazon with so many people complaining about the use of OpenFeint we have only 2 stars.  That is unfortunate as we thought that OpenFeint was allowing users the ability to compete with friends and gain achievements.  From what we have been able to find online, there really is no basis for such negativity.  However, as OpenFeint was recently bought by GREE we were already considering alternative scoring solutions.

So what were our major takeaways?

  • we should allow users the ability to choose which game level they wanted to start with, 3, 4, or 5 letter words (this will be included in version 1.3.5)

  • we should start the difficulty level at "Bonkers" (this will be included in version 1.3.5)

  • we should move away from use of OpenFeint (TBD)


We will share some additional statistics within the next few weeks, as the impact of these types of promotions can have lasting effects.

Sunday, August 26, 2012

Becoming Amazon's Free App of the Day

Word Crank Elite is Amazon's Free App of the Day for Monday, August 27th, 2012! So how did this come about?  First, we made an awesome game;-), next we received an email from Amazon:
"We noticed your app Word Crank Elite v 1.3.0 and think it is an interesting candidate for our Free App of the Day promotion."

Ok great, so what happens next?  We agreed to the terms as stated in the email and then we waited. We eventually heard from someone on the Free App of the Day (FAOTD) Team, and were notified that our application had passed all testing; however, they wanted us to reconsider how we were integrated with OpenFeint.

Apparently, other apps had received 1-star ratings by having the OpenFeint pop-up as soon as the application was loaded.  In order to work around, this we removed the default configuration and allowed users to choose if they wanted to use OpenFeint when they click the "SCORES" button.  Once that was done, we resubmitted the new version of the application and waited again.

This past Friday we received notice that our game would be featured on Monday, August 27th.  After which I personally ran through my house and kissed everyone!  We are very excited to have been given this opportunity and will report on the results in another week. So stay tuned!

Wednesday, August 8, 2012

Gimmie AR

You’re moving to a new place and are concerned that your furniture won’t fit.  That king size sleigh bed that you purchased and just can’t live without now seems to eclipse the space of your bedroom that reminds you more of a dorm minus the smell of stale pizza.

Instead of going for your measuring tape while crying inside over leaving behind a bed the size of your first car, you whip out your phone confident that if it’s physically possible, you’ll bring all your items.

With a simple scan of your mobile device around your room you’re able to take accurate measurements, place furniture, and get a 3D rendering of what your room will look like with all of your actual furniture.

In the nutshell, this illustrates what augmented reality is.

[caption id="attachment_297" align="alignright" width="150"] An example of Augmented Reality[/caption]

For the analytical mind, it can be defined as a live, direct or indirect, view of a physical, real-world environment whose elements are augmented by computer-generated sensory input such as sound, video, graphics or GPS data.

The abridged version - a view of reality (what you see) modified (augmented) by computer generation.

Augmented Reality “AR” has been around for years although many aren’t acquainted with its application.  Hollywood has been using the technology in the creation of countless movies.  What use to take millions of dollars and months of work can now be done with a computer and just a few minutes!

You may not be familiar with augmented reality but you’ve probably heard of its counterpart, virtual reality.  Difference being virtual reality replaces what you actually see, while augmented reality enhances it.  This technology will change how we view the entire world. 

Envision a world where a surgeon has at their disposal their patient’s vital signs and full medical records.

Or a navigation system that goes beyond providing just directions but gives information on weather, terrain and even traffic patterns all on your windshield.

No longer will your business card only encompass your contact information, but now can include a 3D reproduction of your product or even a video of services offered.

AR is not some gimmicky technology like “flying cars of the future” but is already being implemented by some of the top companies in the world.

Phones with the Android and IOS operating systems already contain applications that feature AR in a more embryonic version.

We have truly only scratched the surface of what may be the next revolution in technology.

Using Twitter Search Results for #babies

Our newest project Budding Baby, includes a tab with Twitter comments from the public that contains this hashtag, #babies. Not surprisingly, when you perform a generic Twitter search about babies almost anything could come back and does.  For instance, I just performed a search using the following:

[code]http://search.twitter.com/search.json?q=%23babies[/code]

Here is one of the many results:
"U will *neva knw until *dere* is a tragedy..eii so old people also cry *lyk* #babies"

Now that's not quite what we were going for, and that tweet really isn't very positive either.  So what can we do?

Twitter to the rescue...the Search API allows you to append an extra parameter to your query to filter out negative tweets. Wonderful!  So if I run the query again, this time using the "smiley face" parameter, I get much happier tweets.

Here is the new search query:

[code]http://search.twitter.com/search.json?q=%23babies%20:)[/code]

Much happier results:
"baby love. :) #babies #cute #love #life #motherhood http://t.co/mnhrqmlL"

Have you worked with the Twitter Search API?  Leave comments below.