OLD | NEW |
---|---|
1 ==================================== | 1 ==================================== |
2 Distributing Your Application (NaCl) | 2 Distributing Your Application (NaCl) |
3 ==================================== | 3 ==================================== |
4 | 4 |
5 .. {% setvar pepperversion %}pepper28{% endsetvar %} | 5 .. {% setvar pepperversion %}pepper28{% endsetvar %} |
6 .. {% include "native-client/_local_variables.html" %} | 6 .. {% include "native-client/_local_variables.html" %} |
7 | 7 |
8 .. contents:: Table Of Contents | 8 .. contents:: Table Of Contents |
9 :local: | 9 :local: |
10 :backlinks: none | 10 :backlinks: none |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
138 Here is how to use this feature: | 138 Here is how to use this feature: |
139 | 139 |
140 1. Create a directory called ``_platform_specific``. | 140 1. Create a directory called ``_platform_specific``. |
141 Put this directory at the same level where your CWS manifest file, | 141 Put this directory at the same level where your CWS manifest file, |
142 ``manifest.json``, is located. | 142 ``manifest.json``, is located. |
143 | 143 |
144 2. Create a subdirectory for each specific architecture that you support, | 144 2. Create a subdirectory for each specific architecture that you support, |
145 and add the files for each architecture in the relevant subdirectory. | 145 and add the files for each architecture in the relevant subdirectory. |
146 | 146 |
147 Here is a sample app directory structure: | 147 Here is a sample app directory structure: |
148 | 148 |
149 .. naclcode:: | 149 .. naclcode:: |
150 :prettyprint: 0 | 150 :prettyprint: 0 |
151 | 151 |
152 |-- my_app_directory/ | 152 |-- my_app_directory/ |
153 | |-- manifest.json | 153 | |-- manifest.json |
154 | |-- my_app.html | 154 | |-- my_app.html |
155 | |-- my_module.nmf | 155 | |-- my_module.nmf |
156 | +-- css/ | 156 | +-- css/ |
157 | +-- images/ | 157 | +-- images/ |
158 | +-- scripts/ | 158 | +-- scripts/ |
159 | |-- **_platform_specific/** | 159 | |-- **_platform_specific/** |
160 | | |-- x86-64/ | 160 | | |-- x86-64/ |
161 | | | |-- my_module_x86_64.nexe | 161 | | | |-- my_module_x86_64.nexe |
162 | | |-- x86-32/ | 162 | | |-- x86-32/ |
163 | | | |-- my_module_x86_32.nexe | 163 | | | |-- my_module_x86_32.nexe |
164 | | |-- arm/ | 164 | | |-- arm/ |
165 | | | |-- my_module_arm.nexe | 165 | | | |-- my_module_arm.nexe |
166 | | |-- all/ | 166 | | |-- all/ |
167 | | | |-- my_module_x86_64.nexe | 167 | | | |-- my_module_x86_64.nexe |
168 | | | |-- my_module_x86_64.nexe | 168 | | | |-- my_module_x86_64.nexe |
169 | | | |-- my_module_x86_32.nexe | 169 | | | |-- my_module_x86_32.nexe |
170 | 170 |
171 Please note a few important points about the app directory structure: | 171 Please note a few important points about the app directory structure: |
172 | 172 |
173 * The architecture-specific subdirectories: | 173 * The architecture-specific subdirectories: |
174 | 174 |
175 * can have arbitrary names; | 175 * can have arbitrary names; |
176 * must be directly under the ``_platform_specific`` directory; and | 176 * must be directly under the ``_platform_specific`` directory; and |
177 * must be listed in the CWS manifest file (see step 3 below). | 177 * must be listed in the CWS manifest file (see step 3 below). |
178 | 178 |
179 * You can include a fallback subdirectory that provides a download package | 179 * You can include a fallback subdirectory that provides a download package |
180 with all the architecture-specific files. (In the example above this | 180 with all the architecture-specific files. (In the example above this |
(...skipping 25 matching lines...) Expand all Loading... | |
206 +----------------------+---------------------------------------+ | 206 +----------------------+---------------------------------------+ |
207 | ``sub_package_path`` | the path of the directory (starting | | 207 | ``sub_package_path`` | the path of the directory (starting | |
208 | | with ``_platform_specific``) that | | 208 | | with ``_platform_specific``) that | |
209 | | contains the files for the designated | | 209 | | contains the files for the designated | |
210 | | NaCl architecture | | 210 | | NaCl architecture | |
211 +----------------------+---------------------------------------+ | 211 +----------------------+---------------------------------------+ |
212 | 212 |
213 Here is a sample ``manifest.json`` file: | 213 Here is a sample ``manifest.json`` file: |
214 | 214 |
215 .. naclcode:: | 215 .. naclcode:: |
216 :prettyprint: 0 | 216 :prettyprint: 0 |
217 | 217 |
218 { | 218 { |
219 "name": "My Reminder App", | 219 "name": "My Reminder App", |
220 "description": "A reminder app that syncs across Chrome browsers.", | 220 "description": "A reminder app that syncs across Chrome browsers.", |
221 "manifest_version": 2, | 221 "manifest_version": 2, |
222 "minimum_chrome_version": "28", | 222 "minimum_chrome_version": "28", |
223 "offline_enabled": true, | 223 "offline_enabled": true, |
224 "version": "0.3", | 224 "version": "0.3", |
225 "permissions": [ | 225 "permissions": [ |
226 {"fileSystem": ["write"]}, | 226 {"fileSystem": ["write"]}, |
227 "alarms", | 227 "alarms", |
228 "storage" | 228 "storage" |
229 ], | 229 ], |
230 "app": { | 230 "app": { |
231 "background": { | 231 "background": { |
232 "scripts": ["scripts/background.js"] | 232 "scripts": ["scripts/background.js"] |
233 } | 233 } |
234 }, | 234 }, |
235 "icons": { | 235 "icons": { |
236 "16": "images/icon-16x16.png", | 236 "16": "images/icon-16x16.png", |
237 "128": "images/icon-128x128.png" | 237 "128": "images/icon-128x128.png" |
238 }, | 238 }, |
239 **"platforms": [ | 239 **"platforms": [ |
240 { | 240 { |
241 "nacl_arch": "x86-64", | 241 "nacl_arch": "x86-64", |
242 "sub_package_path": "_platform_specific/x86-64/" | 242 "sub_package_path": "_platform_specific/x86-64/" |
243 }, | 243 }, |
244 { | 244 { |
245 "nacl_arch": "x86-32", | 245 "nacl_arch": "x86-32", |
246 "sub_package_path": "_platform_specific/x86-32/" | 246 "sub_package_path": "_platform_specific/x86-32/" |
247 }, | 247 }, |
248 { | 248 { |
249 "nacl_arch": "arm", | 249 "nacl_arch": "arm", |
250 "sub_package_path": "_platform_specific/arm/" | 250 "sub_package_path": "_platform_specific/arm/" |
251 }, | 251 }, |
252 { | 252 { |
253 "sub_package_path": "_platform_specific/all/" | 253 "sub_package_path": "_platform_specific/all/" |
254 } | 254 } |
255 ]** | 255 ]** |
256 } | 256 } |
257 | 257 |
258 Note the last entry in the CWS manifest file above, which specifies a | 258 Note the last entry in the CWS manifest file above, which specifies a |
259 ``sub_package_path`` without a corresponding ``nacl_arch``. This entry | 259 ``sub_package_path`` without a corresponding ``nacl_arch``. This entry |
260 identifies the fallback directory, which is included in the download | 260 identifies the fallback directory, which is included in the download |
261 package if the user architecture does not match any of the listed NaCl | 261 package if the user architecture does not match any of the listed NaCl |
262 architectures, or if the user is using an older version of Chrome that | 262 architectures, or if the user is using an older version of Chrome that |
263 does not support multi-platform zip files. | 263 does not support multi-platform zip files. |
264 | 264 |
265 4. Modify your application as necessary so that it uses the files for the | 265 4. Modify your application as necessary so that it uses the files for the |
266 correct user architecture. | 266 correct user architecture. |
(...skipping 19 matching lines...) Expand all Loading... | |
286 | 286 |
287 * In the description of your application in the CWS, make sure to mention that | 287 * In the description of your application in the CWS, make sure to mention that |
288 your application is a Native Client application that only works with the | 288 your application is a Native Client application that only works with the |
289 Chrome browser. Also make sure to identify the minimum version of Chrome | 289 Chrome browser. Also make sure to identify the minimum version of Chrome |
290 that your application requires. | 290 that your application requires. |
291 * Hosted and packaged applications have a "launch" parameter in the CWS | 291 * Hosted and packaged applications have a "launch" parameter in the CWS |
292 manifest. This parameter is present only in apps (not extensions), and it | 292 manifest. This parameter is present only in apps (not extensions), and it |
293 tells Google Chrome what to show when a user starts an installed app. For | 293 tells Google Chrome what to show when a user starts an installed app. For |
294 example: | 294 example: |
295 | 295 |
296 .. naclcode:: | 296 .. naclcode:: |
eliben
2013/09/04 21:50:51
:prettyprint: 0 too?
Sam Clegg
2013/09/04 21:54:30
Done.
| |
297 | 297 |
298 "launch": { | 298 "launch": { |
299 "web_url": "http://mail.google.com/mail/" | 299 "web_url": "http://mail.google.com/mail/" |
300 } | 300 } |
301 | 301 |
302 * If you want to write local data using the Pepper | 302 * If you want to write local data using the Pepper |
303 `FileIO </native-client/peppercpp/classpp_1_1_file_i_o>`_ | 303 `FileIO </native-client/peppercpp/classpp_1_1_file_i_o>`_ |
304 API, you must set the 'unlimitedStorage' permission in your Chrome Web | 304 API, you must set the 'unlimitedStorage' permission in your Chrome Web |
305 Store manifest file, just as you would for a JavaScript application that | 305 Store manifest file, just as you would for a JavaScript application that |
306 uses the HTML5 File API. | 306 uses the HTML5 File API. |
307 * For packaged applications, you can only use in-app purchases. | 307 * For packaged applications, you can only use in-app purchases. |
308 * You can place your application in the Google Web Store with access only to | 308 * You can place your application in the Google Web Store with access only to |
309 certain people for testing. See | 309 certain people for testing. See |
310 `Publishing to test accounts </chrome/web-store/docs/publish#testaccounts>`_ | 310 `Publishing to test accounts </chrome/web-store/docs/publish#testaccounts>`_ |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
387 your application is a Native Client application that only works with the | 387 your application is a Native Client application that only works with the |
388 Chrome browser. Also make sure to identify the version of Chrome that your | 388 Chrome browser. Also make sure to identify the version of Chrome that your |
389 application requires. | 389 application requires. |
390 | 390 |
391 * Hosted and packaged applications have a "launch" parameter in the CWS | 391 * Hosted and packaged applications have a "launch" parameter in the CWS |
392 manifest. This parameter is present only in apps (not extensions), and it | 392 manifest. This parameter is present only in apps (not extensions), and it |
393 tells Google Chrome what to show when a user starts an installed app. For | 393 tells Google Chrome what to show when a user starts an installed app. For |
394 example: | 394 example: |
395 | 395 |
396 .. naclcode:: | 396 .. naclcode:: |
397 :prettyprint: 0 | 397 :prettyprint: 0 |
398 | 398 |
399 "launch": { | 399 "launch": { |
400 "web_url": "http://mail.google.com/mail/" | 400 "web_url": "http://mail.google.com/mail/" |
401 } | 401 } |
402 | 402 |
403 * If you want to write local data using the Pepper | 403 * If you want to write local data using the Pepper |
404 `FileIO </native-client/peppercpp/classpp_1_1_file_i_o>`_ | 404 `FileIO </native-client/peppercpp/classpp_1_1_file_i_o>`_ |
405 API, you must set the 'unlimitedStorage' permission in your Chrome Web | 405 API, you must set the 'unlimitedStorage' permission in your Chrome Web |
406 Store manifest file, just as you would for a JavaScript application that uses | 406 Store manifest file, just as you would for a JavaScript application that uses |
407 the HTML5 File API. | 407 the HTML5 File API. |
408 | 408 |
409 * You can place your application in the Google Web Store with access only to | 409 * You can place your application in the Google Web Store with access only to |
410 certain people for testing. See | 410 certain people for testing. See |
411 `Publishing to test accounts </chrome/web-store/docs/publish#testaccounts>`_ | 411 `Publishing to test accounts </chrome/web-store/docs/publish#testaccounts>`_ |
412 for more information. | 412 for more information. |
413 | 413 |
414 Additional considerations | 414 Additional considerations |
415 ========================= | 415 ========================= |
416 | 416 |
417 Registering Native Client modules to handle MIME types | 417 Registering Native Client modules to handle MIME types |
418 ------------------------------------------------------ | 418 ------------------------------------------------------ |
419 | 419 |
420 If you want Chrome to use a Native Client module to display a particular type | 420 If you want Chrome to use a Native Client module to display a particular type |
421 of content, you can associate the MIME type of that content with the Native | 421 of content, you can associate the MIME type of that content with the Native |
422 Client module. Use the ``nacl_modules`` attribute in the Chrome Web Store | 422 Client module. Use the ``nacl_modules`` attribute in the Chrome Web Store |
423 manifest file to register a Native Client module as the handler for one or more | 423 manifest file to register a Native Client module as the handler for one or more |
424 specific MIME types. For example, the bold code in the snippet below registers | 424 specific MIME types. For example, the bold code in the snippet below registers |
425 a Native Client module as the content handler for the OpenOffice spreadsheet | 425 a Native Client module as the content handler for the OpenOffice spreadsheet |
426 MIME type: | 426 MIME type: |
427 | 427 |
428 .. naclcode:: | 428 .. naclcode:: |
429 :prettyprint: 0 | 429 :prettyprint: 0 |
430 | 430 |
431 { | 431 { |
432 "name": "My Native Client Spreadsheet Viewer", | 432 "name": "My Native Client Spreadsheet Viewer", |
433 "version": "0.1", | 433 "version": "0.1", |
434 "description": "Open spreadsheets right in your browser.", | 434 "description": "Open spreadsheets right in your browser.", |
435 **"nacl_modules": [{ | 435 **"nacl_modules": [{ |
436 "path": "SpreadsheetViewer.nmf", | 436 "path": "SpreadsheetViewer.nmf", |
437 "mime_type": "application/vnd.oasis.opendocument.spreadsheet" | 437 "mime_type": "application/vnd.oasis.opendocument.spreadsheet" |
438 }]** | 438 }]** |
439 } | 439 } |
440 | 440 |
441 The value of "path" is the location of a Native Client manifest file (.nmf) | 441 The value of "path" is the location of a Native Client manifest file (.nmf) |
442 within the application directory. For more information on Native Client | 442 within the application directory. For more information on Native Client |
443 manifest files, see | 443 manifest files, see |
444 `Files in a Native Client application </native-client/overview#application-files >`_. | 444 `Files in a Native Client application </native-client/overview#application-files >`_. |
445 | 445 |
446 The value of "mime_type" is a specific MIME type that you want the Native | 446 The value of "mime_type" is a specific MIME type that you want the Native |
447 Client module to handle. Each MIME type can be associated with only one .nmf | 447 Client module to handle. Each MIME type can be associated with only one .nmf |
448 file, but a single .nmf file might handle multiple MIME types. The following | 448 file, but a single .nmf file might handle multiple MIME types. The following |
449 example shows an extension with two .nmf files that handle three MIME types. | 449 example shows an extension with two .nmf files that handle three MIME types. |
450 | 450 |
451 .. naclcode:: | 451 .. naclcode:: |
452 :prettyprint: 0 | 452 :prettyprint: 0 |
453 | 453 |
454 { | 454 { |
455 "name": "My Native Client Spreadsheet and Document Viewer", | 455 "name": "My Native Client Spreadsheet and Document Viewer", |
456 "version": "0.1", | 456 "version": "0.1", |
457 "description": "Open spreadsheets and documents right in your browser.", | 457 "description": "Open spreadsheets and documents right in your browser.", |
458 "nacl_modules": [{ | 458 "nacl_modules": [{ |
459 "path": "SpreadsheetViewer.nmf", | |
460 "mime_type": "application/vnd.oasis.opendocument.spreadsheet" | |
461 }, | |
462 { | |
459 "path": "SpreadsheetViewer.nmf", | 463 "path": "SpreadsheetViewer.nmf", |
460 "mime_type": "application/vnd.oasis.opendocument.spreadsheet" | 464 "mime_type": "application/vnd.oasis.opendocument.spreadsheet-template" |
461 }, | 465 }, |
462 { | 466 { |
463 "path": "SpreadsheetViewer.nmf", | 467 "path": "DocumentViewer.nmf", |
464 "mime_type": "application/vnd.oasis.opendocument.spreadsheet-template" | 468 "mime_type": "application/vnd.oasis.opendocument.text" |
465 }, | 469 }] |
466 { | 470 } |
467 "path": "DocumentViewer.nmf", | |
468 "mime_type": "application/vnd.oasis.opendocument.text" | |
469 }] | |
470 } | |
471 | 471 |
472 The ``nacl_modules`` attribute is optional---specify this attribute only if | 472 The ``nacl_modules`` attribute is optional---specify this attribute only if |
473 you want Chrome to use a Native Client module to display a particular type of | 473 you want Chrome to use a Native Client module to display a particular type of |
474 content. | 474 content. |
475 | 475 |
476 Using CWS inline install | 476 Using CWS inline install |
477 ------------------------ | 477 ------------------------ |
478 | 478 |
479 Once you've published an application, you may be wondering how users will find | 479 Once you've published an application, you may be wondering how users will find |
480 and install the application. For users who browse the Chrome Web Store and find | 480 and install the application. For users who browse the Chrome Web Store and find |
481 your application, installing the application is a simple one-click process. | 481 your application, installing the application is a simple one-click process. |
482 However, if a user is already on your site, it can be cumbersome for them to | 482 However, if a user is already on your site, it can be cumbersome for them to |
483 complete the installation---they would need to navigate away from your site | 483 complete the installation---they would need to navigate away from your site |
484 to the CWS, complete the installation process, and then return to your site. To | 484 to the CWS, complete the installation process, and then return to your site. To |
485 address this issue, you can initiate installation of applications "inline" from | 485 address this issue, you can initiate installation of applications "inline" from |
486 your site---the applications are still hosted in the Chrome Web Store, but | 486 your site---the applications are still hosted in the Chrome Web Store, but |
487 users no longer have to leave your site to install them. See | 487 users no longer have to leave your site to install them. See |
488 `Using Inline Installation </chrome/web-store/docs/inline_installation>`_ | 488 `Using Inline Installation </chrome/web-store/docs/inline_installation>`_ |
489 for information on how to use this feature. | 489 for information on how to use this feature. |
490 | 490 |
491 Monetizing applications and extensions | 491 Monetizing applications and extensions |
492 -------------------------------------- | 492 -------------------------------------- |
493 | 493 |
494 Google provides three primary monetization options for Native Client | 494 Google provides three primary monetization options for Native Client |
495 applications: in-app payments, one-time charges, and subscriptions. Refer to | 495 applications: in-app payments, one-time charges, and subscriptions. Refer to |
496 `Monetizing Your App </chrome/web-store/docs/money>`_ | 496 `Monetizing Your App </chrome/web-store/docs/money>`_ |
497 to learn about these options. The | 497 to learn about these options. The |
498 `Chrome Web Store Overview </chrome/web-store/docs/>`_ | 498 `Chrome Web Store Overview </chrome/web-store/docs/>`_ |
499 also has information on different approaches to charging for your application. | 499 also has information on different approaches to charging for your application. |
OLD | NEW |