This document describes the different options for publishing your gadget. If you use the Google Gadgets Editor (GGE) to create and host your gadgets, it makes publishing your gadgets much easier.
You can put your gadgets in any of the following places:
Not every gadget is suited to every environment. See the documentation for your container for details about what features are supported in that environment.
Before publishing your gadget, you should test it, bearing in mind the requirements and limitations of the target environment in which the gadget will run.
You should do the following tests for all gadgets:
UserPref values.If you are using makeRequest(), test
what happens if the data source is down or returns an error. You
can simulate this by changing the URL temporarily to another URL.
How a gadget is sized depends to a large extent on where it runs. See the documentation for your container for details.
In designing and testing your gadgets, be prepared for arbitrary widths from 200 pixels to as wide as 600 pixels. For certain gadgets, the width should be even larger. As a general rule, design the gadget to display properly if it's given extra space. For example, maps gadgets should fill their areas, picture gadgets should center themselves in the frame, and text gadgets should float their text to the top (for example, click-for-more-details links that are typically at the bottom should stay close to the content rather than floating to the bottom of the gadget window).
If you write a gadget that you expect to experience heavy traffic, there are steps you can take to ensure availability and good performance. If your gadget gets more than 200,000 views per day, or approximately 1-2 requests per second, you should consider following the tips in this section. Even a 50 KB gadget that receives 200,000 requests per day consumes around 300 GB per month in bandwidth.
There are different reasons a gadget might attract a lot of users. It might simply become popular in the content directory. Or, if the gadget is used in a special promotion or advertisement, that might cause it to experience heavy traffic.
Your goal for a high traffic gadget should be to get it to render in 0.25 seconds (250 milliseconds) or less. Use Firebug (Firefox only) to measure this. Improving the responsiveness of your gadget is a sure way to make a positive impact on the user's experience. For tips on optimizing gadget performance, see Optimizing for Heavy Traffic. For management tips, see Managing Heavy Traffic. The general testing guidelines are also especially important for highly popular gadgets.
If you think that your gadget might experience heavy traffic, follow these guidelines:
type=html gadget. Gadgets that are type=url generally
render more slowly than type=html gadgets because
of the poor performance and poor cache support of other hosting
servers. makeRequest() method
caches your content for approximately 1-2 hours by default.
You can use the refreshInterval parameter
with these functions to refresh the cache
more often. However, caching
helps gadget performance by minimizing the number of requests
sent to remote servers hosting content. Do not request
greater freshness than needed from the cache,
or you will reduce the percentage of requests that are
served from the cache. See Refreshing
the Cache for more discussion of this topic. http://www.google.com/ig/directory?url=<gadget-url> to
see the weekly pageviews for your gadget.<img> tags
in your gadget's HTML. This makes your gadget render faster.
If you're using gadgets.io.getProxyUrl() and inserting the image element directly into the DOM, you
don't need to set the width and height properties. gadgets.io.getProxyUrl() functions
to cache
all embedded images, and embedCachedFlash() to cache Flash content.
Below is an example of a gadget that pre-loads
images using gadgets.io.getProxyUrl():Here is a sample gadget that illustrates how to use gadgets.io.getProxyUrl():
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Zombies!" height="350" />
<Content type="html">
<![CDATA[
<div id="zombiecontainer"
style="text-align:center;">
</div>
<script type="text/javascript">
var counter = 0;
// Preload the images using gadgets.io.getProxyUrl()
function load(imageList) {
var ret = [];
for (var i = 0, j = imageList.length; i < j; ++i) {
var img = document.createElement("img");
img.src = gadgets.io.getProxyUrl(imageList[i]);
ret.push(img);
}
return ret;
}
var files = [
"http://gadget-doc-examples.googlecode.com/svn/trunk/zombie-0.jpg",
"http://gadget-doc-examples.googlecode.com/svn/trunk/zombie-1.jpg",
"http://gadget-doc-examples.googlecode.com/svn/trunk/zombie-2.jpg",
"http://gadget-doc-examples.googlecode.com/svn/trunk/zombie-3.jpg",
"http://gadget-doc-examples.googlecode.com/svn/trunk/zombie-4.jpg",
"http://gadget-doc-examples.googlecode.com/svn/trunk/zombie-5.jpg",
"http://gadget-doc-examples.googlecode.com/svn/trunk/zombie-6.jpg"
];
var images = load(files);
browse();
// Browse through photos sequentially. When you get to the end of the array, start over.
function browse(){
if (counter == images.length)
{
counter = 0;
}
document.getElementById("zombiecontainer").innerHTML = "";
document.getElementById("zombiecontainer").appendChild(images[counter]);
counter++;
}
</script>
<br />
<div style="text-align: center;">
<input type=submit value="Next ->" onClick="browse()">
</div>
]]>
</Content>
</Module>
These guidelines can help you manage a high volume gadget:
<username>.feedback+<gadgetname>@gmail.com in
your gadget spec. This helps you to filter the messages
you receive from gadget users. Gmail drops everything after
the plus sign (+), so this email address maps to <username>.feedback@gmail.com.
Note that Gmail has a high quality spam filter. Once you have designed, implemented, and tested your gadget, you may decide to submit it to Google to be published in the iGoogle content directory. Currently this applies to legacy gadgets only. This section lists the general steps you should follow in preparing any gadget to be published.
The Reference lists all of the <ModulePrefs> attributes that you can use to provide "meta" information about your gadget. Here is the information you should include in your gadget spec:
helensmith.feedback+coolgadget@gmail.com in
your gadget spec. Gmail drops everything after the plus sign
(+), so this email address maps to helensmith.feedback@gmail.com.
You can create a Gmail account here. robots.txt.
PNG is the preferred format, though GIF and JPG are also acceptable.
Gadget screenshots should be 280 pixels wide. The height of
the screenshot should be the "natural" height of
the gadget when it's in use. This helps users understand how
much space a gadget will consume on their screen before they
add it to their page. The screenshot should not have any whitespace
above the gadget's blue header bar. Screenshots should show
your full gadget, including its title bar, but nothing else.
Alternatively, you can screenshot the gadget with the edit
window open. Screenshots should not be resized or
cropped. For quality and consistency, Google may take
its own screenshots of a given gadget.robots.txt.
PNG is the preferred format, though GIF and JPG
are also acceptable. Thumbnails should be 120x60 pixels.
They should not include title bars. If you want to be listed on the authors page, you can include these additional fields:
You can find more information here, and an example here.
Make sure you have coded your gadget in a way that minimizes any security risks.
You can use <Locale> tags under <ModulePrefs> to specify the locales supported by your gadget. For more information, see ModulePrefs/Locale in the XML reference.
To promote your gadget, consider putting an "Add to Google" button on it.
You can submit your gadget to Google here. You can also submit your gadget to the content directory using the GGE File > Publish command. See the FAQ for an explanation of how to find your gadget in the directory, and what determines its placement.
If you have submitted multiple versions of a gadget at different URLs and you want to designate one version as the official one, you can use the igoogle-legacy issue tracker to request the change.