diff options
| -rw-r--r-- | docs/html/google/play/billing/billing_admin.jd | 10 | ||||
| -rw-r--r-- | docs/html/google/play/billing/billing_testing.jd | 131 | ||||
| -rw-r--r-- | docs/html/google/play/billing/v2/billing_integrate.jd | 19 | ||||
| -rw-r--r-- | docs/html/google/play/expansion-files.jd | 78 | ||||
| -rw-r--r-- | docs/html/google/play/licensing/licensing-reference.jd | 23 | ||||
| -rw-r--r-- | docs/html/google/play/licensing/overview.jd | 17 |
6 files changed, 143 insertions, 135 deletions
diff --git a/docs/html/google/play/billing/billing_admin.jd b/docs/html/google/play/billing/billing_admin.jd index 46ad905..5904b03 100644 --- a/docs/html/google/play/billing/billing_admin.jd +++ b/docs/html/google/play/billing/billing_admin.jd @@ -66,7 +66,8 @@ storing and delivering the digital content that you sell in your applications.</ </p> </div> -<p>You can create a product list for any published application or any draft application that's been +<p>You can create a product list for any published application, or any +application in the alpha or beta channels, that's been uploaded and saved to the Developer Console. However, you must have a Google Wallet merchant account and the application's manifest must include the <code>com.android.vending.BILLING</code> permission. If an application's manifest does not include this permission, you will be able to edit @@ -75,6 +76,13 @@ information about this permission, see <a href="{@docRoot}google/play/billing/billing_integrate.html#billing-permission">Updating Your Application's Manifest</a>.</p> +<p class="note"><strong>Note:</strong> Previously you could test an app by +uploading an unpublished "draft" version. This functionality is no longer +supported; instead, you must publish it to the alpha or beta distribution +channel. For more information, see <a +href="{@docRoot}google/play/billing/billing_testing.html#draft_apps">Draft Apps +are No Longer Supported</a>. + <p>In addition, an application package can have only one product list. If you create a product list for an application, and you use the <a href="{@docRoot}google/play/publishing/multiple-apks.html">multiple APK feature</a> to distribute diff --git a/docs/html/google/play/billing/billing_testing.jd b/docs/html/google/play/billing/billing_testing.jd index df6c657..8a49433 100644 --- a/docs/html/google/play/billing/billing_testing.jd +++ b/docs/html/google/play/billing/billing_testing.jd @@ -8,8 +8,9 @@ parent.link=index.html <h2>In this document</h2> <ol> <li><a href="#testing-purchases">Testing In-app Purchases</a></li> - <li><a href="#billing-testing-static">Testing with static responses</a></li> + <li><a href="#billing-testing-static">Testing with Static Responses</a></li> <li><a href="#billing-testing-real">Setting Up for Test Purchases</a></li> + <li><a href="#draft_apps">Draft Apps are No Longer Supported</a></li> </ol> <h2>See also</h2> <ol> @@ -79,8 +80,7 @@ method).</p> <p>First, upload and publish in-app products that you want testers to be able to purchase. You can upload and publish in-app products in the Developer Console. Note that you can upload and publish your in-app items before you publish the -APK itself. For example, you can publish your in-app items while your APK is -still a draft. </p> +APK itself.</p> <p>Next, create license test accounts for authorized users. In the Developer Console, go to <strong>Settings</strong> > <strong>Account details</strong>, @@ -149,11 +149,12 @@ license accounts in your alpha and beta distribution groups, those users will only be able to make test purchases. </p> -<h2 id="billing-testing-static">Testing with static responses</h2> +<h2 id="billing-testing-static">Testing with Static Responses</h2> <p>We recommend that you first test your In-app Billing implementation using static responses from Google Play. This enables you to verify that your application is handling the primary Google -Play responses correctly and that your application is able to verify signatures correctly.</p> +Play responses correctly and that your application is able to verify signatures correctly. You can do this +even if the app hasn't been published yet.</p> <p>To test your implementation with static responses, you make an In-app Billing request using a special item that has a reserved product ID. Each reserved product ID returns a specific static @@ -173,6 +174,12 @@ the Developer Console to perform static response tests with the reserved product install your application on a device, log into the device, and make billing requests using the reserved product IDs.</p> +<p class="note"><strong>Note:</strong> Previously you could test an app by +uploading an unpublished "draft" version. This functionality is no longer +supported. However, you can test your app with static responses even before you +upload it to the Google Play store. For more information, see <a +href="#draft_apps">Draft Apps are No Longer Supported</a>. + <p>There are four reserved product IDs for testing static In-app Billing responses:</p> <ul> @@ -205,67 +212,12 @@ Pricing</a>.</p> </li> </ul> -<p>In some cases, the reserved items may return signed static responses, which lets you test -signature verification in your application. To test signature verification with the special reserved -product IDs, you may need to set up <a -href="{@docRoot}google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a> or -upload your application as a unpublished draft application. Table 1 shows you the conditions under -which static responses are signed.</p> - -<p class="table-caption" id="static-responses-table"><strong>Table 1.</strong> -Conditions under which static responses are signed.</p> - -<table> -<tr> -<th>Application ever been published?</th> -<th>Draft application uploaded and unpublished?</th> -<th>User who is running the application</th> -<th>Static response signature</th> -</tr> - -<tr> -<td>No</td> -<td>No</td> -<td>Any</td> -<td>Unsigned</td> -</tr> - -<tr> -<td>No</td> -<td>No</td> -<td>Developer</td> -<td>Signed</td> -</tr> - -<tr> -<td>Yes</td> -<td>No</td> -<td>Any</td> -<td>Unsigned</td> -</tr> - -<tr> -<td>Yes</td> -<td>No</td> -<td>Developer</td> -<td>Signed</td> -</tr> - -<tr> -<td>Yes</td> -<td>No</td> -<td>Test account</td> -<td>Signed</td> -</tr> - -<tr> -<td>Yes</td> -<td>Yes</td> -<td>Any</td> -<td>Signed</td> -</tr> - -</table> +<p>In some cases, the reserved items may return signed static responses, which +lets you test signature verification in your application. The reserved items +only return signed responses if the user running the application has a <a +href="{@docRoot}distribute/googleplay/start.html">developer</a> or <a +href="{@docRoot}google/play/billing/billing_admin.html#billing-testing-setup">test +account.</a> <p>To make an In-app Billing request with a reserved product ID, you simply construct a normal <code>REQUEST_PURCHASE</code> request, but instead of using a real product ID from your @@ -310,9 +262,11 @@ purchases. Testing real in-app purchases enables you to test the end-to-end In-a experience, including the actual purchases from Google Play and the actual checkout flow that users will experience in your application.</p> -<p class="note"><strong>Note</strong>: You do not need to publish your application to do end-to-end -testing. You only need to upload your application as a draft application to perform end-to-end -testing.</p> +<p class="note"><strong>Note:</strong> You can do end-to-end testing of your app + by publishing it to an <a + href="{@docRoot}distribute/googleplay/developer-console.html#alpha-beta">alpha + distribution channel</a>. This allows you to publish the app to the Google + Play store, but limit its availability to just the testers you designate. </p> <p>To test your In-app Billing implementation with actual in-app purchases, you will need to register at least one test account on the Google Play Developer Console. You cannot use your @@ -327,14 +281,16 @@ application does not need to be published, but the item does need to be publishe <p>To test your In-app Billing implementation with actual purchases, follow these steps:</p> <ol> - <li><strong>Upload your application as a draft application to the Developer Console.</strong> - <p>You do not need to publish your application to perform end-to-end testing with real product - IDs; you only need to upload your application as a draft application. However, you must sign - your application with your release key before you upload it as a draft application. Also, the - version number of the uploaded application must match the version number of the application you - load to your device for testing. To learn how to upload an application to Google Play, see - <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113469">Uploading - applications</a>.</p> + <li><strong>Upload your application to the <a + href="{@docRoot}distribute/googleplay/developer-console.html#alpha-beta">alpha + distribution channel</a> with the Developer Console.</strong> + + <p class="note"><strong>Note:</strong> Previously you could test an app by + uploading an unpublished "draft" version. This functionality is no longer + supported; instead, you must publish it to the alpha or beta distribution + channel. For more information, see <a href="#draft_apps">Draft Apps are No + Longer Supported</a>. + </li> <li><strong>Add items to the application's product list.</strong> <p>Make sure that you publish the items (the application can remain unpublished). See <a @@ -370,3 +326,24 @@ href="{@docRoot}tools/publishing/app-signing.html">signing</a>, and <a href="{@docRoot}distribute/tools/launch-checklist.html">publishing on Google Play</a>. </p> +<h2 id="draft_apps">Draft Apps are No Longer Supported</h2> + +<p>Previously, you could publish a "draft" version of your app for testing. This +functionality is no longer supported. Instead, there are two ways you can test +how a pre-release app functions on the Google Play store:</p> + +<ul> + + <li>You can publish an app to the <a + href="{@docRoot}distribute/googleplay/developer-console.html#alpha-beta">alpha + or beta distribution channels</a>. This makes the app available on the Google + Play store, but only to the testers you put on a "whitelist".</li> + + <li>In a few cases, you can test Google Play functionality with an unpublished + app. For example, you can test an unpublished app's in-app billing support by + using <a + href="{@docRoot}google/play/billing/billing_testing.html#billing-testing-static">static + responses</a>, special reserved product IDs that always return a specific + result (like "purchased" or "refunded").</li> + +</ul> diff --git a/docs/html/google/play/billing/v2/billing_integrate.jd b/docs/html/google/play/billing/v2/billing_integrate.jd index ca41e0b..5eb17d5 100644 --- a/docs/html/google/play/billing/v2/billing_integrate.jd +++ b/docs/html/google/play/billing/v2/billing_integrate.jd @@ -208,6 +208,14 @@ following:</p> a draft to the Google Play Developer Console. You also need to create a product list for the in-app items that are available for purchase in the sample application. The following instructions show you how to do this.</p> + +<p class="caution"><strong>Caution:</strong> Draft applications are no longer +supported. To test an application, publish it in the <a +href="{@docRoot}distribute/googleplay/developer-console.html#alpha-beta">alpha +or beta channels</a>. For more information, see <a +href="{@docRoot}google/play/billing/billing_testing.html#draft_apps">Draft Apps +are No Longer Supported</a>.</p> + <ol> <li><strong>Upload the release version of the sample application to Google Play.</strong> <p>Do not publish the sample application; leave it as an unpublished draft application. The @@ -928,10 +936,12 @@ public class BillingReceiver extends BroadcastReceiver { // Intent actions that we receive in the BillingReceiver from Google Play. // These are defined by Google Play and cannot be changed. // The sample application defines these in the Consts.java file. - public static final String ACTION_NOTIFY = "com.android.vending.billing.IN_APP_NOTIFY"; - public static final String ACTION_RESPONSE_CODE = "com.android.vending.billing.RESPONSE_CODE"; + public static final String ACTION_NOTIFY = + "com.android.vending.billing.IN_APP_NOTIFY"; + public static final String ACTION_RESPONSE_CODE = + "com.android.vending.billing.RESPONSE_CODE"; public static final String ACTION_PURCHASE_STATE_CHANGED = - "com.android.vending.billing.PURCHASE_STATE_CHANGED"; + "com.android.vending.billing.PURCHASE_STATE_CHANGED"; // The intent extras that are passed in an intent from Google Play. // These are defined by Google Play and cannot be changed. @@ -962,7 +972,8 @@ public class BillingReceiver extends BroadcastReceiver { Log.w(TAG, "unexpected action: " + action); } } - // Perform other processing here, such as forwarding intent messages to your local service. + // Perform other processing here, such as forwarding intent messages + // to your local service. } </pre> diff --git a/docs/html/google/play/expansion-files.jd b/docs/html/google/play/expansion-files.jd index e90f8fa..601ea48 100644 --- a/docs/html/google/play/expansion-files.jd +++ b/docs/html/google/play/expansion-files.jd @@ -527,17 +527,21 @@ are:</p> <!-- Required to download files from Google Play --> <uses-permission android:name="android.permission.INTERNET" /> - <!-- Required to keep CPU alive while downloading files (NOT to keep screen awake) --> + <!-- Required to keep CPU alive while downloading files + (NOT to keep screen awake) --> <uses-permission android:name="android.permission.WAKE_LOCK" /> - <!-- Required to poll the state of the network connection and respond to changes --> - <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> + <!-- Required to poll the state of the network connection + and respond to changes --> + <uses-permission + android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- Required to check whether Wi-Fi is enabled --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!-- Required to read and write the expansion files on shared storage --> - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> + <uses-permission + android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ... </manifest> </pre> @@ -650,8 +654,8 @@ public class SampleAlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { try { - DownloaderClientMarshaller.startDownloadServiceIfRequired(context, intent, - SampleDownloaderService.class); + DownloaderClientMarshaller.startDownloadServiceIfRequired(context, + intent, SampleDownloaderService.class); } catch (NameNotFoundException e) { e.printStackTrace(); } @@ -693,16 +697,19 @@ versionCode)}</li> <p>For example, the sample app provided in the Apk Expansion package calls the following method in the activity's {@link android.app.Activity#onCreate onCreate()} method to check whether the expansion files already exist on the device:</p> + <pre> boolean expansionFilesDelivered() { for (XAPKFile xf : xAPKS) { - String fileName = Helpers.getExpansionAPKFileName(this, xf.mIsBase, xf.mFileVersion); + String fileName = Helpers.getExpansionAPKFileName(this, xf.mIsBase, + xf.mFileVersion); if (!Helpers.doesFileExist(this, fileName, xf.mFileSize, false)) return false; } return true; } </pre> + <p>In this case, each {@code XAPKFile} object holds the version number and file size of a known expansion file and a boolean as to whether it's the main expansion file. (See the sample application's {@code SampleDownloaderActivity} class for details.)</p> @@ -740,6 +747,7 @@ the Downloader Library begins the download and you should update your activity U display the download progress (see the next step). If the response <em>is</em> {@code NO_DOWNLOAD_REQUIRED}, then the files are available and your application can start.</p> <p>For example:</p> + <pre> @Override public void onCreate(Bundle savedInstanceState) { @@ -754,11 +762,14 @@ public void onCreate(Bundle savedInstanceState) { notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT); // Start the download service (if required) - int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this, + int startResult = + DownloaderClientMarshaller.startDownloadServiceIfRequired(this, pendingIntent, SampleDownloaderService.class); - // If download has started, initialize this activity to show download progress + // If download has started, initialize this activity to show + // download progress if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) { - // This is where you do set up to display the download progress (next step) + // This is where you do set up to display the download + // progress (next step) ... return; } // If the download wasn't necessary, fall through to start the app @@ -766,6 +777,7 @@ public void onCreate(Bundle savedInstanceState) { startApp(); // Expansion files are available, start the app } </pre> + </li> <li>When the {@code startDownloadServiceIfRequired()} method returns anything <em>other than</em> {@code NO_DOWNLOAD_REQUIRED}, create an instance of {@code IStub} by @@ -783,9 +795,11 @@ android.app.Activity#onCreate onCreate()} method, after {@code startDownloadServ starts the download. </p> <p>For example, in the previous code sample for {@link android.app.Activity#onCreate onCreate()}, you can respond to the {@code startDownloadServiceIfRequired()} result like this:</p> + <pre> // Start the download service (if required) - int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this, + int startResult = + DownloaderClientMarshaller.startDownloadServiceIfRequired(this, pendingIntent, SampleDownloaderService.class); // If download has started, initialize activity to show progress if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) { @@ -892,7 +906,8 @@ others. By default, this flag is <em>not</em> enabled, so the user must be on Wi expansion files. You might want to provide a user preference to enable downloads over the cellular network. In which case, you can call: <pre> -mRemoteService.setDownloadFlags(IDownloaderService.FLAGS_DOWNLOAD_OVER_CELLULAR); +mRemoteService + .setDownloadFlags(IDownloaderService.FLAGS_DOWNLOAD_OVER_CELLULAR); </pre> </dd> </dl> @@ -975,10 +990,12 @@ to both your expansion files:</p> // The shared path to all app expansion files private final static String EXP_PATH = "/Android/obb/"; -static String[] getAPKExpansionFiles(Context ctx, int mainVersion, int patchVersion) { +static String[] getAPKExpansionFiles(Context ctx, int mainVersion, + int patchVersion) { String packageName = ctx.getPackageName(); Vector<String> ret = new Vector<String>(); - if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + if (Environment.getExternalStorageState() + .equals(Environment.MEDIA_MOUNTED)) { // Build the full path to the app's expansion files File root = Environment.getExternalStorageDirectory(); File expPath = new File(root.toString() + EXP_PATH + packageName); @@ -1102,7 +1119,8 @@ following:</p> <pre> // Get a ZipResourceFile representing a merger of both the main and patch files -ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(appContext, +ZipResourceFile expansionFile = + APKExpansionSupport.getAPKExpansionZipFile(appContext, mainVersion, patchVersion); // Get an input stream for a known file inside the expansion file ZIPs @@ -1190,28 +1208,18 @@ android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li> opens, it's important that you test this process to be sure your application can successfully query for the URLs, download the files, and save them to the device.</p> -<p>To test your application's implementation of the manual download procedure, you must upload -your application to Google Play as a "draft" to make your expansion files available for -download:</p> - -<ol> - <li>Upload your APK and corresponding expansion files using the Google Play Developer -Console.</li> - <li>Fill in the necessary application details (title, screenshots, etc.). You can come back and -finalize these details before publishing your application. - <p>Click the <strong>Save</strong> button. <em>Do not click Publish.</em> This saves -the application as a draft, such that your application is not published for Google Play users, -but the expansion files are available for you to test the download process.</p></li> - <li>Install the application on your test device using the Eclipse tools or <a -href="{@docRoot}tools/help/adb.html">{@code adb}</a>.</li> - <li>Launch the app.</li> -</ol> - -<p>If everything works as expected, your application should begin downloading the expansion +<p>To test your application's implementation of the manual download procedure, +you can publish it to the alpha or beta channel, so it will only be available to +authorized testers. +If everything works as expected, your application should begin downloading the expansion files as soon as the main activity starts.</p> - - +<p class="note"><strong>Note:</strong> Previously you could test an app by +uploading an unpublished "draft" version. This functionality is no longer +supported; instead, you must publish it to the alpha or beta distribution +channel. For more information, see <a +href="{@docRoot}google/play/billing/billing_testing.html#draft_apps">Draft Apps +are No Longer Supported</a>. <h2 id="Updating">Updating Your Application</h2> diff --git a/docs/html/google/play/licensing/licensing-reference.jd b/docs/html/google/play/licensing/licensing-reference.jd index 7bfa61a..d4ca79a 100644 --- a/docs/html/google/play/licensing/licensing-reference.jd +++ b/docs/html/google/play/licensing/licensing-reference.jd @@ -151,7 +151,8 @@ returned by the Google Play server in a license response.</p> <tr> <td>{@code LICENSED}</td> <td>The application is licensed to the user. The user has purchased the -application or the application only exists as a draft.</td> +application, or is authorized to download and install the alpha or beta version +of the application.</td> <td>Yes</td> <td><code>VT</code>, <code>GT</code>, <code>GR</code></td> <td><em>Allow access according to {@code Policy} constraints.</em></td> @@ -233,16 +234,14 @@ implementation.</p> href="{@docRoot}google/play/licensing/setting-up.html#test-env"> Setting Up The Testing Environment</a>, the response code can be manually overridden for the application developer and any registered test users via the -Google Play Developer Console. -<br/><br/> -Additionally, as noted above, applications that are in draft mode (in other -words, applications that have been uploaded but have <em>never</em> been -published) will return {@code LICENSED} for all users, even if not listed as a test -user. Since the application has never been offered for download, it is assumed -that any users running it must have obtained it from an authorized channel for -testing purposes.</p> - +Google Play Developer Console.</p> +<p class="note"><strong>Note:</strong> Previously you could test an app by +uploading an unpublished "draft" version. This functionality is no longer +supported; instead, you must publish it to the alpha or beta distribution +channel. For more information, see <a +href="{@docRoot}google/play/billing/billing_testing.html#draft_apps">Draft Apps +are No Longer Supported</a>. <h2 id="extras">Server Response Extras</h2> @@ -430,8 +429,8 @@ public boolean allowAccess() { } } else if (mLastResponse == LicenseResponse.RETRY && ts < mLastResponseTime + MILLIS_PER_MINUTE) { - // Only allow access if we are within the retry period or we haven't used up our - // max retries. + // Only allow access if we are within the retry period + // or we haven't used up our max retries. return (ts <= mRetryUntil || mRetryCount <= mMaxRetries); } return false; diff --git a/docs/html/google/play/licensing/overview.jd b/docs/html/google/play/licensing/overview.jd index 4e1a9c9..a2d5379 100644 --- a/docs/html/google/play/licensing/overview.jd +++ b/docs/html/google/play/licensing/overview.jd @@ -38,12 +38,11 @@ the licensing server and receives the result. The Google Play application sends the result to your application, which can allow or disallow further use of the application as needed.</p> -<p class="note"><strong>Note:</strong> If a paid application has been uploaded -to Google Play, but saved only as a draft application (the app is -unpublished), the licensing server considers all users to be licensed users of -the application (because it's not even possible to purchase the app). This -exception is necessary in order for you to perform testing of your licensing -implementation.</p> +<p class="note"><strong>Note:</strong> If a version of an app is in the alpha or +beta channel, all users who are authorized to download and install that app are +considered to be licensed users of the app. For more information, see <a +href="{@docRoot}distribute/googleplay/developer-console.html#alpha-beta">Alpha +and Beta Testing</a>.</p> <div class="figure" style="width:469px"> <img src="{@docRoot}images/licensing_arch.png" alt=""/> @@ -52,6 +51,12 @@ license check through the License Verification Library and the Google Play client, which handles communication with the Google Play server.</p> </div> +<p class="note"><strong>Note:</strong> Previously you could test an app by +uploading an unpublished "draft" version. This functionality is no longer +supported; instead, you must publish it to the alpha or beta distribution +channel. For more information, see <a +href="{@docRoot}google/play/billing/billing_testing.html#draft_apps">Draft Apps +are No Longer Supported</a>. <p>To properly identify the user and determine the license status, the licensing server requires information about the application and user—your application and the Google Play client work |
