Wednesday, December 21, 2016

Introducing the ExifInterface Support Library

Posted by Ian Lake, Developer Advocate

With the release of the href="https://developer.android.com/topic/libraries/support-library/revisions.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#rev25-1-0">25.1.0 Support Library, there's a new entry in the family: the ExifInterface Support Library. With significant improvements introduced in Android 7.1 to the framework's href="https://developer.android.com/reference/android/media/ExifInterface.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog">ExifInterface, it only made sense to make those available to all API 9+ devices via the Support Library's ExifInterface.

The basics are still the same: the ability to read and write href="https://en.wikipedia.org/wiki/Exif?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog">Exif tags embedded within image files: now with 140 different attributes (almost 100 of them new to Android 7.1/this Support Library!) including information about the camera itself, the camera settings, orientation, and GPS coordinates.

Camera Apps: Writing Exif Attributes

For Camera apps, the writing is probably the most important - writing attributes is still limited to JPEG image files. Now, normally you wouldn't need to use this during the actual camera capturing itself - you'd instead be calling the Camera2 API href="https://developer.android.com/reference/android/hardware/camera2/CaptureRequest.Builder.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#set(android.hardware.camera2.CaptureRequest.Key%3CT%3D,%20T)">CaptureRequest.Builder.set() with href="https://developer.android.com/reference/android/hardware/camera2/CaptureRequest.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#JPEG_ORIENTATION">JPEG_ORIENTATION, href="https://developer.android.com/reference/android/hardware/camera2/CaptureRequest.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#JPEG_GPS_LOCATION">JPEG_GPS_LOCATION or the equivalents in the Camera1 href="https://developer.android.com/reference/android/hardware/Camera.Parameters.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog">Camera.Parameters. However, using ExifInterface allows you to make changes to the file after the fact (say, removing the location information on the user's request).

Reading Exif Attributes

For the rest of us though, reading those attributes is going to be our bread-and-butter; this is where we see the biggest improvements.

Firstly, you can read Exif data from JPEG and raw images (specifically, DNG, CR2, NEF, NRW, ARW, RW2, ORF, PEF, SRW and RAF files). Under the hood, this was a major restructuring, removing all native dependencies and building an extensive test suite to ensure that everything actually works.

For apps that receive images from other apps with a content:// URI (such as those sent by apps that href="https://developer.android.com/about/versions/nougat/android-7.0-changes.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#sharing-files">target API 24 or higher), ExifInterface now works directly off of an InputStream; this allows you to easily extract Exif information directly out of content:// URIs you receive without having to create a temporary file. class="prettyprint">Uri uri; // the URI you've received from the other app
InputStream in;
try {
in = getContentResolver().openInputStream(uri);
ExifInterface exifInterface = new ExifInterface(in);
// Now you can extract any Exif tag you want
// Assuming the image is a JPEG or supported raw format
} catch (IOException e) {
// Handle any errors
} finally {
if (in != null) {
try {
in.close();
} catch (IOException ignored) {}
}
}

Note: ExifInterface will not work with remote InputStreams, such as those returned from a href="https://developer.android.com/reference/java/net/HttpURLConnection.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog">HttpURLConnection. It is strongly recommended to only use them with content:// or file:// URIs.

For most attributes, you'd simply use the href="https://developer.android.com/reference/android/support/media/ExifInterface.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#getAttributeInt(java.lang.String,%20int)">getAttributeInt(), href="https://developer.android.com/reference/android/support/media/ExifInterface.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#getAttributeDouble(java.lang.String,%20double)">getAttributeDouble(), or href="https://developer.android.com/reference/android/support/media/ExifInterface.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#getAttribute(java.lang.String)">getAttribute() (for Strings) methods as appropriate.

One of the most important attributes when it comes to displaying images is the image orientation, stored in the aptly-named href="https://developer.android.com/reference/android/support/media/ExifInterface.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#TAG_ORIENTATION">TAG_ORIENTATION, which returns one of the ORIENTATION_ constants. To convert this to a rotation angle, you can post-process the value. class="prettyprint">int rotation = 0;
int orientation = exifInterface.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotation = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotation = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotation = 270;
break;
}

There are some helper methods to extract values from specific Exif tags. For location data, the href="https://developer.android.com/reference/android/support/media/ExifInterface.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#getLatLong(float[])">getLatLong() method gives you the latitude and longitude as floats and href="https://developer.android.com/reference/android/support/media/ExifInterface.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#getAltitude(double)">getAltitude() will give you the altitude in meters. Some images also embed a small thumbnail. You can check for its existence with href="https://developer.android.com/reference/android/support/media/ExifInterface.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#hasThumbnail()">hasThumbnail() and then extract the byte[] representation of the thumbnail with href="https://developer.android.com/reference/android/support/media/ExifInterface.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#getThumbnail()">getThumbnail() - perfect to pass to href="https://developer.android.com/reference/android/graphics/BitmapFactory.html?utm_campaign=android_launch_exifsupportlibrary_122116&utm_source=anddev&utm_medium=blog#decodeByteArray(byte[],%20int,%20int)">BitmapFactory.decodeByteArray().

Working with Exif: Everything is optional

One thing that is important to understand with Exif data is that there are no required tags: each and every tag is optional - some services even specifically strip Exif data. Therefore throughout your code, you should always handle cases where there is no Exif data, either due to no data for a specific attribute or an image format that doesn't support Exif data at all (say, the ubiquitous PNGs or WebP images).

Add the ExifInterface Support Library to your project with the following dependency:

class="prettyprint">compile "com.android.support:exifinterface:25.1.0"

But when an Exif attribute is exactly what you need to prevent a mis-rotated image in your app, the ExifInterface Support Library is just what you need to #BuildBetterApps

Tuesday, December 20, 2016

Get the guide to finding success in new markets on Google Play


Posted by Lily Sheringham, Developer Marketing at Google Play









With just a few clicks, you can publish an app to Google Play and access a
global audience of more than 1 billion 30 days active users. Finding success in
global markets means considering how each market differs, planning for high
quality localization, and tailoring your activity to the local audience. The new
Going
Global Playbook
provides best practices and tips, with advice from
developers who've successfully gone global.




This guide includes advice to help you plan your approach to going global,
prepare your app for new markets, take your app to market, and also include data
and insights for key countries and other useful resources.




This ebook joins others that we've recently published including The
Building for Billions Playbook
and The
News Publisher Playbook
. All of our ebooks are promoted in the Playbook for Developers app, which is
where you can stay up to date with all the news and best practices you need to
find success on Google Play.






How useful did you find this blogpost?






? ? ? ? ?



                                                       





Start building Actions on Google


Posted by Jason Douglas, PM Director for Actions on Google



The Google Assistant href="https://blog.google/products/assistant/personal-google-just-you/">brings
together all of the technology and smarts we've been building for years,
from the Knowledge Graph to Natural Language Processing. To be a truly
successful Assistant, it should be able to connect users across the apps and
services in their lives. This makes enabling an ecosystem where developers can
bring diverse and unique services to users through the Google Assistant really
important.



In October, we href="https://www.youtube.com/watch?v=q4y0KOeXViI&feature=youtu.be&t=1h16m8s">previewed
Actions on Google, the developer platform for the Google Assistant. href="https://developers.google.com/actions/?utm_campaign=product area_launch_actionsgoogle_120816&utm_source=gdev&utm_medium=blog">Actions on Google further
enhances the Assistant user experience by enabling you to bring your services to
the Assistant. Starting today, you can build Conversation Actions for Google
Home and request to
become an early access partner for upcoming platform features.



Conversation Actions for Google Home



Conversation Actions let you engage your users to deliver information, services,
and assistance. And the best part? It really is a conversation -- users won't
need to enable a skill or install an app, they can just ask to talk to your
action. For now, we've provided two developer samples of what's possible, just
say "Ok Google, talk to Number Genie " or try "Ok Google, talk to Eliza' for the
classic 1960s AI exercise.




You can get started today by visiting the href="https://developers.google.com/actions?utm_campaign=product area_launch_actionsgoogle_120816&utm_source=gdev&utm_medium=blog">Actions on Google website for
developers. To help create a smooth, straightforward development experience, we
worked with a number of
development partners
, including conversational interaction development tools
API.AI and Gupshup, analytics tools DashBot and VoiceLabs and consulting
companies such as Assist, Notify.IO, Witlingo and Spoken Layer. We also created
a collection of href="https://developers.google.com/actions/samples/?utm_campaign=product area_launch_actionsgoogle_120816&utm_source=gdev&utm_medium=blog">samples and voice user
interface (VUI) href="https://developers.google.com/actions/design/">resources or you can
check out the integrations from our href="http://support.google.com/assistant/?p=3p_developers">early access
partners as they roll out over the coming weeks.



Introduction to Conversation Actions by href="https://google.com/+WaynePiekarski">Wayne Piekarski


Coming soon: Actions for Pixel and Allo + Support for Purchases and
Bookings



Today is just the start, and we're excited to see what you build for the Google
Assistant. We'll continue to add more platform capabilities over time, including
the ability to make your integrations available across the various Assistant
surfaces like Pixel phones and Google Allo. We'll also enable support for
purchases and bookings as well as deeper Assistant integrations across
verticals. Developers who are interested in creating actions using these
upcoming features should href="https://assistant.google.com/developer/eap/">register for our early access
partner program and help shape the future of the platform.


Build, explore and let us know what you think about Actions on Google! And to say in the loop, be sure to sign up for our newsletter, join our Google+ community, and use the �actions-on-google� tag on StackOverflow.

Monday, December 19, 2016

Best practices to improve app engagement


Posted by Niko Schr�er, Business Development, Google Play




Driving installs is important to growing a user base, but it's not much use if
your app sits on users' devices and is rarely opened. In a competitive app
landscape, it's increasingly important to engage and retain users over the long
term to build a successful business. Users who are using your app more will have
a higher lifetime value and be more likely to share your app. Watch my Playtime
session below to hear about the tools and features other developers are using to
increase app engagement. You can also read the summary of my main tips below.










1. Build a high quality app to engage Android users


Building a high quality app is the foundation of a great user experience on
Android. The better your app's user experience is, the more engaged your users
will be. Optimizing for material
design
, for example, can significantly improve user engagement as well as
building for Android
Wear
, Auto or TV where it
makes sense based on your value proposition.




To achieve high quality, we recommend you to check out the latest Android
features, tips, and best practices in our Playbook
for Developers
.




The developer of the golf app, Hole19,
tailored their app's user experience thoughtfully for Android Wear and, as a
result, saw a 40% increase in user engagement compared to non-Wear users. Watch a video about Hole19's
success
.





2. Make your users feel at home


Personalising your app experience to make users feel at home is a good way to
start a long lasting relationship. Onboarding new users is a crucial step in
this process. Onboarding should be fast and seamless and ask for minimal user
input - after all users want to start using your app as quickly as possible.
Furthermore, the onboarding should be a core part of the overall product
experience. Use images and wording that's true to your brand and only ask for
user input when it's actually needed, to reduce friction and avoid losing users.




Freeletics,
a fitness app, created an engaging user onboarding flow in which they tailored
imagery and text to male and female users respectively. They also moved the
registration process to a later stage in the funnel to reduce friction. The
improved onboarding flow increased user activity by 58% within the first 7 days.
They also implemented Google Smart
Lock
to seamlessly sign-in returning users.





3. Optimize feature releases as a way to increase user
engagement



Introducing new features is essential to staying ahead of competition and
relevant to your users to ensure they keep coming back to your app. To make new
feature launches successful drivers for user engagement, follow these simple
steps:



  • Define a clear objective for each release to measure your impact, e.g.
    increase number of users who edit a photo by at least 10%.

  • Use
    beta testing
    to gather user feedback and iterate a feature before it's
    rolled out to all of your users.

  • Enable
    the pre-launch report
    in the Play developer console to spot potential flaws
    and ensure technical stability in your alpha and beta apps.

  • Guide users to each new feature as if it is a light onboarding experience.
    Visually highlight what's new and provide a short explanation why users should
    care.

  • Measure performance with analytics to see if the
    new feature drives engagement (that you've defined as your objective).


4. Use notifications wisely


Push notifications are a popular engagement tool and rightfully so. However,
there is a fine line between driving engagement and annoying users (who might
then uninstall your app). Follow these guidelines to ensure your notifications
are on the right side of the line:



  • Be relevant and only send messages that matter to the user in context. Be
    creative and true to your brand, speak your users language and use an authentic
    tone.

  • Make notifications actionable for your users and don't forget to deep link
    to content where applicable to save your users time.

  • Remember that not all your users are equal so personalize your message to
    different user cohorts with Firebase
    Notifications
    .

  • Consider timeliness of your messages to get users the right notification at
    the right time and with the right frequency. For example, it might be better to
    send a notification about something interesting to read at a time when the user
    normally gets out their phone � like during their commute � instead of the
    middle of the day, when they might be busy and dismiss a new notification.

  • Finally, give users control over what notifications they receive so that
    they can opt-in and opt-out of the notifications they like and don't like
    respectively. If users get annoyed about certain types of notifications and
    don't have a way to disable them, they might uninstall your app.


The Norwegian news app Aftenposten
implemented a new onboarding flow that clarified which notifications were
available, allowing readers to manage their preferences. This reduced uninstalls
by 9.2.% over 60 days and led to a 28% decrease in the number of users muting
notifications completely. Read
more about Aftenposten's success
.





5. Reward your most engaged users


Last but not least, you should find ways to reward your most loyal users to
retain them over time and to make it desirable to less engaged users to engage
more. These rewards can come in many shapes and forms. Start by keeping it
simple and make sure the reward adds real value to the user and fits in your
app's ecosystem. You can do this by:



  • Giving sneak peeks of new features by inviting them to a beta
    group
    .

  • Decorating user accounts with badges based on their behaviour.

  • Offer app exclusive discounts or promo
    codes
    that can only be redeemed in your app.


Generally, the more you can personalize the reward the better it will work.




Find success with ongoing experimentation


A great Android app gives developers a unique opportunity to create a lasting
relationship with users and build a sustainable business with happy customers.
Therefore optimising apps to engage and retain your users by following these 5
tips should be front and centre of your development goals and company strategy.
Find more tips and best practices by watching the sessions at this
year's Playtime events
.




How useful did you find this blogpost?






? ? ? ? ?














Friday, December 16, 2016

Games authentication adopting Google Sign-In API


Posted by Clayton Wilkinson, Developer Platform Engineer



Some changes are coming to Play Game Services in early 2017:


Changes to Google API Client building



In November, we announced an href="https://developers.googleblog.com/2016/11/moving-to-google-sign-in-for-a-better-user-experience-and-higher-conversion-rates.html">update
to Google Sign-In API. Play Game Services is being updated to use Google
Sign-In API for authentication. The advantages are:


  • Games and Sign-In in same client connection.
  • Single API for getting Auth code to send to backend servers.


This change unifies the Google Sign-in and the Games API Sign-in, so there are
updates to how to build the Google API Client:



class="prettyprint">// Defaults to Games Lite scope, no server component
GoogleSignInOptions gso = new
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).build();

// OR for apps with a server component
GoogleSignInOptions gso = new
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestServerAuthCode(SERVER_CLIENT_ID)
.build();

// OR for developers who need real user Identity
GoogleSignInOptions gso = new
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestEmail()
.build();

// Build the api client.
mApiClient = new GoogleApiClient.Builder(this)
.addApi(Games.API)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.addConnectionCallbacks(this)
.build();
}

@Override
public void onConnected(Bundle connectionHint) {
if (mApiClient.hasConnectedApi(Games.API)) {
Auth.GoogleSignInApi.silentSignIn(mApiClient).setResultCallback(
new ResultCallback() {
@Override
public void onResult(GoogleSignInResult googleSignInResult) {
// In this case, we are sure the result is a success.
GoogleSignInAccount acct =
googleSignInResult.getGoogleSignInAccount());

// For Games with a server, send the auth code to your server.
String serverAuthCode = signInAccount.getServerAuthCode();

// Use the API client as normal.
Player player = Games.API.getCurrentPlayer(mApiClient);
}
}
);
} else {
onSignedOut();
}
}

Account creation within iOS is no longer supported



  • Currently, there is no support for new players to create a Play Games
    account on iOS. Additionally, the Google+ integration has been removed from
    iOS. As a result "social" APIs will return result codes indicating success, but
    return empty lists. This includes the "standard" UIs for leaderboards and
    multiplayer invitations.

Google+ is no longer integrated



  • href="http://android-developers.blogspot.com/2016/01/play-games-permissions-are-changing-in.html">Announced
    last year, Games is decoupled from Google+ during this transition. As a
    result the public APIs for getting connected players via circles stopped
    working, but the standard UIs for multiplayer invitations and social
    leaderboards continued to work. Starting from February 2017, the standard UIs
    will also not display the Social graph results as Google+ data becomes
    inaccessible. This will affect multiplayer games, social leaderboards, and
    gifts API on Android. The effect will be that these APIs will return
    successfully, but with an empty list of players.


List of APIs that are deprecated by removing Google+ integration (and their C++
equivalents):


  1. href="https://developers.google.com/android/reference/com/google/android/gms/games/Players.html?utm_campaign=product area_discussion_games_121616&utm_source=anddev&utm_medium=blog#getPlayerSearchIntent(com.google.android.gms.common.api.GoogleApiClient)">Games.Players.getPlayerSearchIntent()
  2. href="https://developers.google.com/android/reference/com/google/android/gms/games/Players.html?utm_campaign=product area_discussion_games_121616&utm_source=anddev&utm_medium=blog#loadConnectedPlayers(com.google.android.gms.common.api.GoogleApiClient,%20boolean)">Games.Players.loadConnectedPlayers()
  3. href="https://developers.google.com/android/reference/com/google/android/gms/games/Players.html?utm_campaign=product area_discussion_games_121616&utm_source=anddev&utm_medium=blog#loadInvitablePlayers(com.google.android.gms.common.api.GoogleApiClient,%20int,%20boolean)">Games.Players.loadInvitablePlayers()
  4. The value href="https://developers.google.com/android/reference/com/google/android/gms/games/leaderboard/LeaderboardVariant.html?utm_campaign=product area_discussion_games_121616&utm_source=anddev&utm_medium=blog#COLLECTION_SOCIAL">LeaderboardVariant.COLLECTION_SOCIAL
  5. href="https://developers.google.com/android/reference/com/google/android/gms/games/multiplayer/Invitations.html?utm_campaign=product area_discussion_games_121616&utm_source=anddev&utm_medium=blog#loadInvitations(com.google.android.gms.common.api.GoogleApiClient,%20int)">Invitations.loadInvitations()
  6. href="https://developers.google.com/android/reference/com/google/android/gms/games/multiplayer/realtime/RealTimeMultiplayer.html?utm_campaign=product area_discussion_games_121616&utm_source=anddev&utm_medium=blog#getSelectOpponentsIntent(com.google.android.gms.common.api.GoogleApiClient,%20int,%20int,%20boolean)">RealtimeMultiplayer.getSelectOpponentsIntent()
  7. href="https://developers.google.com/android/reference/com/google/android/gms/games/multiplayer/turnbased/TurnBasedMultiplayer.html?utm_campaign=product area_discussion_games_121616&utm_source=anddev&utm_medium=blog#getSelectOpponentsIntent(com.google.android.gms.common.api.GoogleApiClient,%20int,%20int,%20boolean)">TurnBasedMultiplayer.getSelectOpponentsIntent()
  8. All methods in the href="https://developers.google.com/android/reference/com/google/android/gms/games/request/GameRequest?utm_campaign=product area_discussion_games_121616&utm_source=anddev&utm_medium=blog">Requests
    package.


We realize this is a large change, but moving forward Play Game Services are
much better aligned with the rest of the Mobile platform from Google and will
lead to better developer experience for Android game developers.

Four tips for startup success from a Silicon Valley VC


Posted by Kacey Fahey, Marketing Programs Manager, Google Play




Working at Google Play, we�re on the front line watching developers build, polish, and launch their dreams for millions of users to experience. While it�s exciting to be a part of so much creativity, we�re often asked how small startups can stand out in such a competitive field. We recently had Josh Elman & Sarah Tavel of Greylock Partners speak at our events, sharing their experiences working in Product Marketing and Engineering at major tech companies including Twitter, Facebook and Pinterest. Below are four tips to hit the ground running and create a business built for success.





Set goals, both large and small




Every startup has an ultimate goal, but don�t forget to create micro-goals. Breaking your larger goal down into smaller milestones creates checkpoints to review progress and ensure momentum is heading in the right direction. This also allows for flexibility if teams need to course correct along the way, not to mention micro-accomplishments to celebrate!





Create stickiness




The first level in Sarah�s Hierarchy of Engagement is to identify the core action for users to perform in your app. Once you have engagement with this core action, level 2 is driving retention, getting users to come back and perform the core action more and more. The ultimate goal is to hook users with your app creating accruing benefits, whereby deeper and more frequent engagement creates habits and product dependencies.












�As companies move up the hierarchy, their products become better, harder to leave, and ultimately create virtuous loops that make the product self-perpetuating,�
� Sarah Tavel, Partner at Greylock





Example: For those looking to improve on organizational skills, Evernote can be a lifesaver. The more lists users create, the more they rely on the product. Evernote becomes such an ingrained habit that it naturally transcends between personal and professional worlds.





Drive virality




When launching a new app, look for ways to achieve virality. Find hooks to make users fall in love with your app and strive to make it part of their regular habits. But watch out, not all types of virality are treated equally.




�Whenever you�re thinking about engineering virality, you need to be sure that you�re reaching the right people, getting them interested for reasons that align with the intrinsic value of your product, and leading them to the right actions,�
� Josh Elman, Partner at Greylock

Example: Whether you�re lucky enough to convert happy users into product evangelists or catch fire through social media, outbreak virality has driven tremendous success for apps like Pok�mon GO and Prisma.





Measure cohorts




While monitoring traditional mobile metrics such as installs and DAUs provide a high level overview of app performance, cohort analysis is key to understanding user behavior and optimizing for growth. When rolling out changes in your app, make sure to track cohorts for an extended duration. Initial results may tell one story at D7, but hold tight, as things could turn a corner by D15 or even later. Give users time to adapt and get comfortable with the changes before making any final product decisions.




Read more tips on how to find success for your app or game start up in the Playbook for Developers app.






How useful did you find this blogpost?




? ? ? ? ?












Thursday, December 15, 2016

Get a glimpse of Wear 2.0�s upcoming standalone apps


Kacey Fahey, Marketing Programs Manager, Google Play




The upcoming Android Wear 2.0 experience will introduce standalone apps, expanding your potential reach to both Android and iOS audiences with Wear devices. Users will be able to search, install, and use apps without ever leaving their device. See how other developers are enhancing their user experience with standalone apps for messaging, travel & local, and health & fitness.




Glide




Having a watch app further simplifies video messaging with Glide.
Using the Wear Complications
API
, Glide is now able to live broadcast directly from the watch face. By
tapping contact shortcuts from the watch face, you can now launch directly into
a conversation. This experience brings speed and intimacy to the world of
messaging, making wrist-based communication more accessible and effortless.




Foursquare




Travelers around the world use Foursquare's
Android Wear app to discover hidden gems and be in the know about the best
places to eat, drink and explore. With their upcoming 2.0 app, the team has a
clean new canvas for rich notifications giving users an immersive experience
with Foursquare content.




"The standalone nature of the Android Wear 2.0 app will offer a big boost in
search performance and app responsiveness so you spend less time staring at the
screen and more time exploring the world around you,"
said Kyle Fowler,
Software Engineer at Foursquare.




Lifesum





Lifesum
helps users make better food choices, improve their exercise, and reach health
goals. The upcoming 2.0 experience complements the existing Lifesum mobile app
and as a standalone app, it will allow users to more easily track water and
meals throughout the day.


"It's all about increasing access and being there for the user in a quick
and simple way. We believe a simplified way of tracking meals and water will
make it easier for our users on their journey of becoming healthier and
happier,"
said Joakim Hammer, Android Developer at Lifesum




Check out g.co/wearpreview for the latest builds and documentation about the recently released Android Wear Developer Preview 4.




How useful did you find this blogpost?





? ? ? ? ?











Tips to be better found and discovered on Google Play


Posted by Andrew Ahn, Product Manager, Google Play





We're constantly working on ways to make Google Play a great place for users to
discover apps and games they'll love. We know this is crucial to most developers
ongoing success. There are steps you can take to ensure your app is primed for
success � that's why we're sharing a reminder of some of our top tips for
getting your app discovered on Google Play.




Build for quality




First, build for quality. Android users expect high-quality apps. App quality
directly influences the long-term success of your app - in terms of installs,
user rating and reviews, engagement, and user retention. These are some of the
factors that go into our search and discovery systems that help discern what
apps to recommend and surface across our Google Play experiences. When building
your app, check against the quality
criteria
, and use what you need from the material design guidelines to make
sure you are delivering a highly usable experience. Also, be sure to test your
app for functional quality. Opt-in to the pre-launch
report
for your alpha and beta apps in the Google Play Developer Console and
you'll receive a report for each APK showing how it performs on real devices. This will help you identify crashes and other issues before you release your app.









Example: Designing for high usability through Google Material Design.



Request only the permissions you need




Second, be considerate on which permission settings to enable for your app. We
see that there are some apps that ask for very sensitive permissions, even when
the app doesn't use them. (For example, a camera app asking for read and write
permissions to call logs.) Excessive app permissions may dissuade users from
installing your app. In fact, one study, in which users
were shown two unbranded apps with similar ratings that had the same
functionality but different sets of permission requests, showed that users were,
on average, 3 times more likely to install the app with fewer permissions
requests. And a similar
study
showed that users are 1.7 times more likely, on average, to select the
application with fewer permission requests. The rule of thumb is to enable
permissions that are only essential to your app. Read the best
practices for app permissions
.









Chart:
Distribution of permission groups use across Arcade Games category.


If you're building an arcade game, you many only need a very few permission
settings, if any.



Listen and respond to your users




Lastly, be attentive to user feedback. It's ultimately the users who drive our
search and discovery systems. When you hear user feedback about bugs or other
issues, we recommend engaging with the feedback and, if needed, updating your
app in a timely manner. Having an up-to-date app that reflects your user's
feedback can help you gain more installs, engagement, and higher ratings. Beta
testing
is a good way to get feedback from real users before launch. You can
also check the ratings
and reviews
section of the Developer Console to see an analysis of what
users are saying about your app and how that is affecting your rating compared
to similar apps.







Review benchmarks in the Developer Console uses machine learning to give you
insights about what users are saying about your app and how it affects your
rating.




Google Play strives to help users find and discover the most safe, high quality,
useful, and relevant apps. Building apps that put user's interest first will
help you be successful in Google Play. For more tips and best practices for
building a successful app business on Google Play, get the Playbook for Developers app.






How useful did you find this blogpost?


? ? ? ? ?









Tuesday, December 13, 2016

Android Wear 2.0 for China - Developer Preview

Posted by Hoi Lam, Developer Advocate


Today at Google
Developer Day China
, we are happy to announce a href="https://developer.android.google.cn/wear/preview/?utm_campaign=android wear_launch_chinadeveloperpreview_121316&utm_source=anddev&utm_medium=blog">developer preview
of Android Wear 2.0 for developers creating apps for China. Android Wear 2.0 is
the biggest update since our partners launched their first devices in China last
year.



We're making a Developer Preview available today and plan to release additional
updates in the coming months. Please send us your feedback by href="http://g.co/wearpreviewbug">filing bugs or posting in our href="https://plus.google.com/communities/113381227473021565406">Android Wear
Developers community.


Developing for the Chinese Market



With Android Wear 2.0, apps can access the internet directly on Android Wear
devices. As a result, for the majority of apps, having a companion phone
application is no longer necessary. This means that most developers creating
apps for Android Wear 2.0 may no longer need to import the Google Play services
library.



There are two situations where developers will need to import Google Play
services for China:


  • Apps that require direct interaction with the paired mobile
    device
    - some experiences require Android Wear to connect directly to a
    paired phone. In this case, the href="https://developer.android.google.cn/training/wearables/data-layer/?utm_campaign=android wear_launch_chinadeveloperpreview_121316&utm_source=anddev&utm_medium=blog">Data
    Layer API introduced in Android Wear 1.0 will continue to function.
  • New href="https://developer.android.google.cn/training/articles/wear-location-detection.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">FusedLocationProvider
    for China
    - we have added location detection to the SDK for Chinese
    developers. With the user's permission, your app can receive location updates
    via the FusedLocationProvider.


You can find more details about how to import the China compatible version of
Google Play services library href="https://developer.android.google.cn/training/wearables/apps/creating-app-china.html?utm_campaign=android wear_launch_chinadeveloperpreview_121316&utm_source=anddev&utm_medium=blog">here.


Product testing for Android Wear 2.0 for China



The Android Wear 2.0 Developer Preview includes an updated SDK with tools, and
system images for testing using the Huawei Watch.



To get started, follow these steps:


  • Update to Android Studio v2.1.1 or later
  • Visit the href="https://developer.android.google.cn/wear/preview/?utm_campaign=android wear_launch_chinadeveloperpreview_121316&utm_source=anddev&utm_medium=blog">Android Wear 2.0
    Developer Preview site for downloads and documentation
  • href="https://developer.android.google.cn/wear/preview/downloads.html?utm_campaign=android wear_launch_chinadeveloperpreview_121316&utm_source=anddev&utm_medium=blog">Download
    the device system images
  • Test your app with your supported device

Give us feedback



We will update this developer preview over the next few months based on your
feedback. The sooner we hear from you, the more we can include in the final
release, so don't be shy!




Android Wear 2.0 ??? - ??????



??: ???, Android Wear ???????



????????Google
?????
?,??????????????????Android Wear 2.0 href="https://developer.android.google.cn/wear/preview/">???????Android Wear
2.0??,???????????????????????????



???????????????????,???????????????????????????????href="http://g.co/wearpreviewbug">????,??????href="https://plus.google.com/communities/113381227473021565406">Android
Wear??????????


?????????



?Android Wear 2.0???,?????Android
Wear?????????????,?????????,??????????????????????,???Android Wear
2.0???????????????Google Play services?????



??,???????????????Google Play Services??????????????:


  • ?????????????? - ???????Android
    Wear???????????????????,Android Wear 1.0????href="https://developer.android.google.cn/training/wearables/data-layer/">Data
    Layer API?????????
  • ?? href="https://developer.android.google.cn/training/articles/wear-location-detection.html?utm_campaign=building-for-wear-215&utm_source=dac&utm_medium=blog">FusedLocationProvider
    - ?????????SDK?????????????????,????????FusedLocationProvider????????


????href="https://developer.android.google.cn/training/wearables/apps/creating-app-china.html">?????????????????Google
Play service??????


Android Wear 2.0 ???????



Android Wear 2.0 ???????????SDK??,????????(??????)?



???????????:


  • ???Android Studio?v2.1.1????
  • ?? Android Wear
    2.0 ??????
    ,??????????????
  • href="https://developer.android.google.cn/wear/preview/downloads.html">????????
  • ??????????

????



???????????????????????????????????,?????????????????????????????????!

Android Wear 2.0 Developer Preview 4: Authentication, In-App Billing, and more

Posted by Hoi Lam, Developer
Advocate




A key part of Android Wear 2.0 is letting
watch apps work as standalone apps, so users can respond to messages, track
their fitness, and use their favorite apps, even when their phone isn't around.
Developer Preview 4 includes a number of new APIs that will help you build more
powerful standalone apps.


Seamless authentication



To make authentication a seamless experience for both Android phone and iPhone
users, we have created new APIs for href="https://developer.android.com/wear/preview/features/auth-wear.html?utm_campaign=android wear_launch_developerpreview_121316&utm_source=anddev&utm_medium=blog">OAuth
and added support for one-click Google Sign-in. With the OAuth API for
Android Wear, users can tap a button on the watch that opens an authentication
screen on the phone. Your watch app can then authenticate with your server side
APIs directly. With Google Sign-In, it's even easier. All the user needs to do
is select which account they want to authenticate with and they are done.


In-app billing



In addition to paid apps, we have added href="https://developer.android.com/training/in-app-billing/index.html?utm_campaign=android wear_launch_developerpreview_121316&utm_source=anddev&utm_medium=blog">in-app
billing support, to give you another way to monetize your Android Wear app
or watch face. Users can authorize purchases quickly and easily on the watch
through a 4-digit Google Account PIN. Whether it's new levels in a game or new
styles on a watch face, if you can build it, users can buy it.


Cross-device promotion



What if your watch app doesn't work standalone? Or what if it offers a better
user experience when both the watch and phone apps are installed? We've been
listening carefully to your feedback, and we've added href="https://developer.android.com/wear/preview/features/standalone-apps.html?utm_campaign=android wear_launch_developerpreview_121316&utm_source=anddev&utm_medium=blog#detecting-your-app">two
new APIs (PlayStoreAvailability and RemoteIntent)
to help you navigate users to the Play Store on a paired device so they can
more easily install your app. Developers can also open custom URLs on the phone
from the watch via the new RemoteIntent API; no phone app or data
layer is required.



class="prettyprint">// Check Play Store is available
int playStoreAvailabilityOnPhone =
PlayStoreAvailability.getPlayStoreAvailabilityOnPhone(getApplicationContext());

if (playStoreAvailabilityOnPhone == PlayStoreAvailability.PLAY_STORE_ON_PHONE_AVAILABLE) {
// To launch a web URL, setData to Uri.parse("https://g.co/wearpreview")
Intent intent =
new Intent(Intent.ACTION_VIEW)
.addCategory(Intent.CATEGORY_BROWSABLE)
.setData(Uri.parse("market://details?id=com.google.android.wearable.app"));
// mResultReceiver is optional; it can be null.
RemoteIntent.startRemoteActivity(this, intent, mResultReceiver);
}

Swipe-to-dismiss is back



Many of you have given us the feedback that the swipe-to-dismiss gesture from
Android Wear 1.0 is an intuitive time-saver. We agree, and have reverted back to
the previous behavior with this developer preview release. To support
swipe-to-dismiss in this release, we've made the following platform and API
changes:


  • Activities now automatically support swipe-to-dismiss.
    Swiping an activity from left to right will result in it being dismissed and the
    app will navigate down the back stack.
  • New Fragment and View support. Developers can wrap the
    containing views of a Fragment or Views in general in the new
    SwipeDismissFrameLayout to implement custom actions such as going
    down the back stack when the user swipes rather than exiting the activity.
  • Hardware button now maps to "power" instead of "back" which
    means it can no longer be intercepted by apps.


Additional details are available under the href="https://developer.android.com/wear/preview/behavior-changes.html?utm_campaign=android wear_launch_developerpreview_121316&utm_source=anddev&utm_medium=blog">behavior
changes section of the Android Wear Preview site.


Compatibility with Android Wear 1.0 apps



Android Wear apps packaged using the legacy embedded app mechanism can now be
delivered to Android Wear 2.0 watches. When a user installs a phone app that
also contains an embedded Android Wear app, the user will be prompted to install
the embedded app via a notification. If they choose not to install the embedded
app at that moment, they can find it in the Play Store on Android Wear under a
special section called "Apps you've used".



Despite support for the existing mechanism, there are significant benefits for
apps that transition to the href="https://developer.android.com/wear/preview/features/app-distribution.html?utm_campaign=android_discussion_wearpreview_092916&utm_source=anddev&utm_medium=blog#publish">multi-APK
delivery mechanism. Multi-APK allows the app to be searchable in the Play
Store on Android Wear, to be eligible for merchandising on the homepage, and to
be remotely installed from the web to the watch. As a result, we strongly
recommend that developers move to multi-APK.


More additions in Developer Preview 4



  • href="https://developer.android.com/wear/preview/features/ui-nav-actions.html?utm_campaign=android wear_launch_developerpreview_121316&utm_source=anddev&utm_medium=blog">Action
    and Navigation Drawers: An enhancement to peeking behavior
    allows the user to take action without scrolling all the way to the top or
    bottom of a list. Developers can further fine-tune drawer peeking behavior
    through new APIs, such as setShouldPeekOnScrollDown for the action
    drawer.
  • href="https://developer.android.com/wear/preview/features/wearable-recycler-view.html?utm_campaign=android wear_launch_developerpreview_121316&utm_source=anddev&utm_medium=blog">WearableRecyclerView:
    The curved layout is now opt-in, and with this, the WearableRecyclerView is now
    a drop-in replacement for RecyclerView.
  • href="https://developer.android.com/wear/preview/features/complications.html?utm_campaign=android wear_launch_developerpreview_121316&utm_source=anddev&utm_medium=blog#using_fields_for_complication_data">Burn-in
    protection icon for complications: Complication data providers can now
    provide icons for use on screens susceptible to burn-in. These burn-in-safe
    icons are normally the outline of the icon in interactive mode. Previously,
    watch faces may have chosen not to display the icon at all in ambient mode to
    prevent screen burn-in.

Feedback welcome!



Thanks for all your terrific feedback on Android Wear 2.0. Check out href="http://g.co/wearpreview">g.co/wearpreview for the latest builds and
documentation, keep the feedback coming by href="http://g.co/wearpreviewbug">filing bugs or posting in our href="https://plus.google.com/communities/113381227473021565406">Android Wear
Developers community, and stay tuned for Android Wear Developer Preview 5!

Announcing updates to Google�s Internet of Things platform: Android Things and Weave


Posted by Wayne Piekarski,
Developer Advocate for IoT



The Internet of Things (IoT) will bring computing to a whole new range of
devices. Today we're announcing two important updates to our IoT developer
platform to make it faster and easier for you to create these smart, connected
products.



We're releasing a Developer Preview of Android Things, a comprehensive way to
build IoT products with the power of Android, one of the world's most supported
operating systems. Now any Android developer can quickly build a smart device
using Android APIs and Google services, while staying highly secure with updates
direct from Google. We incorporated the feedback from Project Brillo to include
familiar tools such as Android Studio, the Android Software Development Kit
(SDK), Google Play Services, and Google Cloud Platform. And in the coming
months, we will provide Developer Preview updates to bring you the
infrastructure for securely pushing regular OS patches, security fixes, and your
own updates, as well as built-in Weave connectivity and more.



There are several turnkey hardware solutions available for you to get started
building real products with Android Things today, including Intel Edison, NXP
Pico, and Raspberry Pi 3. You can easily scale to large production runs with
custom designs of these solutions, while continuing to use the same Board
Support Package (BSP) from Google.



We are also updating the Weave platform to make it easier for all types of
devices to connect to the cloud and interact with services like the Google
Assistant. Device makers like Philips Hue and Samsung SmartThings already use
Weave, and several others like Belkin WeMo, LiFX, Honeywell, Wink, TP-Link, and
First Alert are implementing it. Weave provides all the cloud infrastructure, so
that developers can focus on building their products without investing in cloud
services. Weave also includes a Device SDK for supported microcontrollers and a
management console. The Weave Device SDK currently supports schemas for light
bulbs, smart plugs and switches, and thermostats. In the coming months we will
be adding support for additional device types, custom schemas/traits, and a
mobile application API for Android and iOS. Finally, we're also working towards
merging Weave and Nest Weave to enable all classes of devices to connect with
each other in a secure and reliable way. So whether you started with Google
Weave or Nest Weave, there is a path forward in the ecosystem.




This is just the
beginning of the IoT ecosystem we want to build with you. To get started, check
out Google's IoT developer site,
or go directly to the Android
Things
, Weave,href="https://developers.google.com/weave"> and href="https://cloud.google.com">Google Cloud Platform sites for
documentation and code samples. You can also join href="http://g.co/iotdev">Google's IoT Developers Community on Google+ to
get the latest updates and share and discuss ideas with other developers.



Monday, December 12, 2016

Five steps to achieve sustainable growth and boost your app's long term success


Maxim Mai, Business Development Manager, Google Play




Maintaining sustainable growth is difficult for even the highest quality apps.
In this video and through the 5 steps below you can find out how some of our
leading Android developers are tackling growth.









1) Understand and define your app's objectives


Depending on your product lifecycle stage you will most likely focus on these 3
growth goals with varying intensity:



  • Acquire new users

  • Increase engagement and retention

  • Grow revenue



2) Track and measure your tactics against each of your
objectives


List out the tactics you're using to achieve each objective and keep track of
their performance. You can visualize it using a scorecard like in the example
below created by Mobile Growth
Stack
.










3) Apply your growth tactics.


Here are a few examples of specific tactics developers have successfully used to
drive sustained growth.


Tactic: Clue,
a female health app, invests in the Play store listing to increase
conversions.


Results: 24% aggregate increase in install conversion rate over
a period of 6 months.




How they did it:













Which phone screenshot do you think drove increase in install conversion for
Clue?




Tactic: ShareTheMeal,
a non-profit app developed by the World Food Programme, uses public relations as
a free sustainable acquisition channel.




Results: 50% of their
total installs to date were driven by media coverage.




How they did
it
:



  • Developed an excellent messaging.

  • Boosted installs impact by combining PR with celebrity outreach and
    distribution partnership.

  • Learned that TV coverage has the highest impact on installs but print is a
    useful door opener to amplify TV coverage.


Tactic: Viral growth.
Virality is a core
growth tool for apps and games that focus on sharing and usually the mechanic is
built into the core user experience of the product. However, even if sharing
isn't a key component of your app, you can still influence two key variables to
create an appropriate environment to encourage virality.




How to do it:



  • Increase the number of additional users that a single user brings to the
    app, by boosting the number of invitations sent.

  • Decrease your "cycle time", how long it takes between inviting a user and
    that user sending out the next round of invitations to their friends.

  • Offer more incentives for users to share the app or its content while
    they're using it will help shorten the cycle time and kickstart viral growth!


Tactic: Freeletics
Nutrition
, an app to adjust your nutrition to your individual needs and
goals, uses cross-promotion to accelerate the launch of a new product.




Results: 96% of new Nutrition app sales generated by users who
originally registered for the developer's Bodyweight
training app.




How they did it:



  • Surface meal advice in the Bodyweight app's activity feed with the goal of
    raising awareness for the approaching launch of their new Freeletics Nutrition
    app.











4) Build a strong growth culture


To make sustainable growth work for your app, it needs to be a part of your
culture. Runtastic
is one of the leading health and fitness app developers in Europe and 95% of
their approximately 76M total app installs on Google Play have been generated
organically. Mario Aichlseder, VP of Growth, believes this is the result of a
strong growth culture and the growth principles according to which all teams
operate. For example, product managers, designers and engineers at Runtastic
deliberately chose a mixture of qualitative and quantitative feedback loops
during the app development process to ensure they stay true to their growth
principles.





5) Adjust along the way


It's important to track your tactics against real metrics to measure your
impact. That will help you make decisions about where to increase or decrease
your efforts. Your priorities will also change based on the evolution of your
business and product lifecycle as well as due to external factors such as new
techniques becoming available, so be open to regularly adjusting your tactics.


Get more tips and best practices in the sessions from this
year's Playtime events
.






How useful did you find this blogpost?






? ? ? ? ?