When Google Play services receives an update, there's almost always something interesting to discover. Many of our future experiences – good and bad – are shaped through the new features Google adds to this one framework. Google Play services 7.3 recently rolled out to users, and like previous versions, it contains some hints about new features and capabilities we can expect for the future. With this update, we've got signs of a built-in invitation system for apps, more forward progress on the long-rumored Nearby feature, and more.

TeardownHero

Disclaimer: Teardowns are necessarily speculative and usually based on incomplete evidence. It's possible that the guesses made here are totally and completely wrong. There is always a chance that details may change or plans may be cancelled prior to the launch of a new feature discovered in a teardown. Much like rumors, nothing is certain until it's officially announced.

App Invites

Every mobile platform struggles with the subject of app discovery. Google has tried to solve this by suggesting apps downloaded by the people we follow on Google+ and users that happened to download some of the same apps we have. However, in a sea of app icons, these recommendations don't stand out. Even if they did, the results are hit-and-miss.

A new set of strings, layouts, and images give a strong indication that Google is adding a more direct method for people to "invite" others to try apps. The exact purpose of this system isn't well-defined from the evidence that's available, but there are a few details that stand out:

  • Invitations consist of a "deep link" to an app along with a custom message.
  • Invites can be sent to multiple recipients through Google+ (probably), Email, and SMS.
  • Recipients are shown some kind of custom notification about an app invite.
  • Notifications include a Download button.
  • It's possible to mute notifications either for a specific app or from a specific sender.

Android Manifest

<activity android:exported="false" android:name="com.google.android.gms.appinvite.notification.AppInviteMuteSettingActivity" android:noHistory="true" android:process="com.google.android.gms.ui" android:theme="@style/common.Theme.Light.Dialog"/>
<activity android:exported="false" android:name="com.google.android.gms.appinvite.notification.AppInviteSystemNotificationActivity" android:noHistory="true" android:process="com.google.android.gms.ui" android:theme="@android:style/Theme.Translucent.NoTitleBar">
<activity android:exported="true" android:label="@string/appinvite_label" android:name="com.google.android.gms.appinvite.AppInviteActivity" android:process="com.google.android.gms.ui" android:theme="@style/Theme.AppInvite">
<activity android:exported="true" android:name="com.google.android.gms.appinvite.AppInviteAcceptInvitationActivity" android:noHistory="true" android:process="com.google.android.gms.ui" android:theme="@android:style/Theme.Translucent.NoTitleBar">
<activity android:exported="true" android:name="com.google.android.gms.appinvite.ui.context.ContextualPeopleSelectionActivity" android:process="com.google.android.gms.ui" android:theme="@style/common.Theme.Light.DialogWhenLarge">

Strings

<string name="appinvite_choose_account">Choose account</string>
<string name="appinvite_contextual_selection_additional_recipient_format">" +"<g id="additonalNumberOfRecipients">%d</g> more</string>
<string name="appinvite_contextual_selection_content_description_email">Email</string>
<string name="appinvite_contextual_selection_content_description_sms">Text message</string>
<string name="appinvite_contextual_selection_dismiss">DISMISS</string>
<string name="appinvite_contextual_selection_limit">Cannot add any more people.</string>
<string name="appinvite_contextual_selection_method_google">Via Google</string>
<string name="appinvite_contextual_selection_no_recipients_message">Add names or email addresses</string>
<string name="appinvite_contextual_selection_ok">OK</string>
<string name="appinvite_contextual_selection_recipient">To</string>
<string name="appinvite_contextual_selection_recipient_separator">", "</string>
<string name="appinvite_contextual_selection_sms_warning">Standard SMS charges apply</string>
<string name="appinvite_grid_header">Suggestions</string>
<string name="appinvite_invitation_sent">Your invitation has been sent</string>
<string name="appinvite_label">App Invite</string>
<string name="appinvite_list_header">Everyone</string>
<string name="appinvite_load_error">Failed to load</string>
<string name="appinvite_message_hint">Add a message</string>
<string name="appinvite_mute_notification_cancel">CANCEL</string>
<string name="appinvite_mute_notification_failed_warning">notifications are not muted</string>
<string name="appinvite_mute_notification_from_this_app">From this app</string>
<string name="appinvite_mute_notification_from_this_person">From this person</string>
<string name="appinvite_mute_notification_header">Mute notifications</string>
<string name="appinvite_mute_notification_succeeded_warning">notifications muted</string>
<string name="appinvite_mute_notification_save">SAVE</string>
<string name="appinvite_notification_action_download">Download</string>
<string name="appinvite_recipients">Recipients</string>
<string name="appinvite_remove_content_description">Remove</string>
<string name="appinvite_send_invite">Sending invites</string>
<string name="appinvite_send_invite_label">Send</string>

There's not enough evidence to fully explain how app invites will work or what restrictions will be in place. At the most basic level, this could just be a manual system people would use to encourage their friends to try apps, sort of like an enhanced Share button. There have also been a few rumors to suggest something like this will be made available to developers to invite people to try out an app. While it might be nice to think this will turn into a way for developers to hand out free copies of their paid apps, there's nothing in the strings or code to support that idea.

Since App Invites appear in Google Play services rather than the Play Store, and in conjunction with the rumor that this is for developers, I suspect we'll actually see this exposed through the SDK so that apps can integrate it. Blackberry has had some success integrating this type of feature into its BBM infrastructure. Users would be able to easily send recommendations to their friends right from within an app.

Naturally, this should conjure images of desperate freemium apps that ravenously nag users to "spread the word." This is an all too common phenomenon all over Facebook, and I don't doubt for a second that would happen here. However, the presence of a deep link suggests that this feature could be put to really good use, as well. Perhaps it will be possible to send a link to a friend about a great restaurant they found on Yelp, and that person can install the app and immediately load up the destination.

Right now, it's all just speculation; and it's likely that this feature is still in development, so there may be a lot of missing details. In other words, don't judge it too harshly until the feature is ready. If it turns out badly, we can always ignore our annoying friends when they send an invite to play the latest time management game (read: IAP festival).

appinvite_icons

Nearby Gets A Little Nearer

Nearly a year ago, Liam Spradlin discussed a fairly new Google project going by the name of Nearby. This system appeared to be designed around having a perpetual awareness of where we are in relation to other people or things. The concept should be easy to imagine, so long as users keep Location Services enabled and Google knows the coordinates of someone (or something) we're looking for. While the features described in that article haven't yet launched, it seems to have inspired a similar Nearby Players feature for Google Games, which launched in October last year. Since then, we've also seen signs of Nearby appearing in other teardowns (under the name copresence) and possibly powering some other experiments.

nearby_sharing_opt_in_icon

nearby_sharing_opt_in_icon

Nearly 6 months after Nearby turned up as a sync service, and quickly disappeared again, it is back in a new form. The latest release of Google Play services includes a few new activities and about a dozen strings that show Nearby isn't dead. One of the activities can even be launched using adb, though the results are borderline comical. Here are the details that can be extracted from the available evidence:

  • Nearby involves an opt-in step to activate
  • A second opt-in step exists to enable messages from Nearby
  • There are 2 settings screens for configuring the nature of Nearby, but details are scarce

Android Manifest

<activity android:icon="@drawable/ic_google_selected" android:name="com.google.android.gms.nearby.sharing.settings.OptInActivity" android:process="com.google.android.gms.ui" android:taskAffinity="com.google.android.gms.common.settings" android:theme="@style/common.Theme.GoogleSettings"/>
<activity android:launchMode="singleTop" android:name="com.google.android.gms.nearby.messages.settings.NearbyMessagesAppOptInActivity" android:process="com.google.android.gms.ui" android:theme="@style/common.Theme.GoogleSettings"/>
<activity android:exported="false" android:icon="@drawable/common_transparent" android:label="@string/nearby_access" android:name="com.google.android.gms.nearby.settings.NearbyAccessActivity" android:parentActivityName="com.google.android.gms.nearby.settings.NearbySettingsActivity" android:process="com.google.android.gms.ui" android:theme="@style/common.Theme.GoogleSettings">
<activity android:excludeFromRecents="true" android:exported="true" android:icon="@drawable/common_transparent" android:label="@string/common_nearby_settings_title" android:launchMode="singleTask" android:name="com.google.android.gms.nearby.settings.NearbySettingsActivity" android:parentActivityName="com.google.android.gms.app.settings.GoogleSettingsActivity" android:process="com.google.android.gms.ui" android:taskAffinity="com.google.android.gms.common.settings" android:theme="@style/common.Theme.GoogleSettings">

Plurals

<plurals name="nearby_access_summary">
<item quantity="other">Placeholder</item>
<item quantity="one">Placeholder</item>
</plurals>

Strings

<string name="common_nearby_settings_title">Nearby</string>
<string name="nearby_access">Placeholder</string>
<string name="nearby_enabled">Placeholder</string>
<string name="nearby_enabled_summary">Placeholder</string>
<string name="nearby_sharing_cancel_button">CANCEL</string>
<string name="nearby_sharing_close_button">CLOSE</string>
<string name="nearby_sharing_enable_button">"YES, I'M IN"</string>
<string name="nearby_sharing_enabled">Placeholder</string>
<string name="nearby_sharing_enabled_summary">Placeholder</string>
<string name="nearby_sharing_opt_in_page_one_main">Placeholder for Page 1 Main</string>
<string name="nearby_sharing_opt_in_page_one_sub">Placeholder for Page 1 Subtext</string>
<string name="nearby_sharing_opt_in_page_three_main">Placeholder for Page 3 Main</string>
<string name="nearby_sharing_opt_in_page_three_sub">Placeholder for Page 3 Subtext</string>
<string name="nearby_sharing_opt_in_page_two_main">Placeholder for Page 2 Main</string>
<string name="nearby_sharing_opt_in_page_two_sub">Placeholder for Page 2 Subtext</string>

Dear reader, if you happened to skip reading the strings, just take a moment to gaze up in wonder at the sheer number of strings that stuff "Placeholder" into parts of the UI. While it's kinda funny, it's absolutely real. NearbyAccessActivity can be launched, and it's every bit the placeholder you would expect, but not much else.

2015-04-25 17.16.26

The least fulfilling screenshot in history.

If you want to launch this activity for yourself, just open a terminal on a machine with updated drivers (if needed) and the most recent version of adb. Connect a device with a Play Services v7.3 apk installed and run this command:

adb shell am start -n com.google.android.gms/com.google.android.gms.nearby.settings.NearbyAccessActivity

Judging by the apparent progress that's visible here, it should look unlikely that we'll hear anything about Nearby in just a month at Google I/O. However, let's not forget that it has been in the works for a very long time, and much more ambitious projects have been initiated and launched in a fraction of the time. I guess I'm saying there's no reason to rule Nearby out for a launch at I/O. As usual, we'll just have to wait and see.

Location Sharing, Improved?

There is some work going into replacing the current code to manage Location Sharing. There's really not much to say about this other than it looks like very little is changing. However, the old LocationSharingSettingsActivity has been renamed to include the word 'Legacy' and a new version has come in to replace it. This doesn't mean anything will noticeably change for users, but it may be worth watching out for. There is also a new set of options for controlling the duration of a share with timespans of 15 minutes, 30 minutes, an hour, 8 hours, or indefinitely.

Android Manifest

<activity android:icon="@drawable/ic_google_selected" android:label="@string/location_sharing_settings_choose_acl_button" android:name="com.google.android.gms.social.location.LocationSharingSelectionActivity" android:process="com.google.android.gms.ui" android:taskAffinity="com.google.android.gms.common.settings" android:theme="@style/common.Theme.GoogleSettings" android:uiOptions="splitActionBarWhenNarrow">
<activity android:icon="@drawable/ic_google_selected" android:label="@string/location_sharing_settings_title" android:name="com.google.android.gms.social.location.LegacyLocationSharingSettingsActivity" android:process="com.google.android.gms.ui" android:taskAffinity="com.google.android.gms.common.settings" android:theme="@style/common.Theme.GoogleSettings" android:uiOptions="splitActionBarWhenNarrow"/>
<activity android:icon="@drawable/ic_google_selected" android:label="@string/location_sharing_settings_title" android:name="com.google.android.gms.social.location.LocationSharingRedirectActivity" android:process="com.google.android.gms.ui" android:taskAffinity="com.google.android.gms.common.settings" android:theme="@style/common.Theme.GoogleSettings" android:uiOptions="splitActionBarWhenNarrow">
<activity android:icon="@drawable/ic_google_selected" android:label="@string/location_sharing_settings_title" android:name="com.google.android.gms.social.location.LocationSharingSettingsActivity" android:process="com.google.android.gms.ui" android:taskAffinity="com.google.android.gms.common.settings" android:theme="@style/common.Theme.GoogleSettings" android:uiOptions="splitActionBarWhenNarrow"/>

Arrays

<string-array name="location_sharing_share_duration_array">
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>8 hours</item>
<item>Indefinitely</item>
</string-array>

Interesting Images

This is a teardown, and sometimes there are interesting images that deserve to be shown off, but don't necessarily belong in another section. Let your imaginations run wild with the possibilities these PNGs might offer.

bg_wifi_batterylevel_400x400bg_wifi_connection_400x400

bg_wifi_batterylevel and bg_wifi_connection

games_edu_plus_upsell-mod

games_edu_plus_upsell (Note: the background was originally transparent. Gray was added for visibility.)

auth_fitness_icn_scope_nutrition

auth_fitness_icn_scope_nutrition

ic_location_settings_dialog_ulr

ic_location_settings_dialog_ulr (an old favorite)