Marketplaceへの登録手順についてManifestのSupport要素に指定する各URLについてインストール時だけでなく、いくつかの状況からアプリケーションにリクエストが飛んできます。Manifestの「ApplicationManifest/Support」要素に記述するURLがそれぞれどの手順からリクエストされるか、を記述します。それぞれのURLの指定において「?domain=${DOMAIN_NAME}」という記述をしておくことで、リクエストパラメータにAppsドメイン名が渡されます。application」で手順を進めるとき。setup」をクリックしたとき。前者の場合は、パラメータに「callback」というパラメータが付加されます。これはApps管理ページ(MarketplaceからAddItNowした時の手順の途中)へのURLになっているので、インストール時のセットアップが正常終了した場合にはそのURLへリダイレクトしてあげる必要があります。なんらかの事情でこのcallback用URLの値を失ってしまう場合、一応以下のようなURLでセットアップ手順を進めたページに戻すこともできます。https%3A//www.google.com/a/cpanel/${domain}/DomainAppInstall?appId=${appId}&productConfigId=${productConfigId}&vendorId=${vendorId}&productListingId=${productListingId}&EXTERNAL_CONFIG=true${domain}はアプリケーションをインストールしたユーザのドメイン名です。${productConfigId}は確認方法が今のところ不明ですが、どのドメインにインストールしてもアプリケーションごとに同じ値が使われているように見えますので、適当なドメインにインストールして値を確認すると良いかもしれません。${vendorId}は、ベンダごとに決まった値のようです。これも実際にインストール手順中のcallbackパラメータを確認すると良いです。ViewVendorProfileページで使用されるvendorIdとは違う値のようです。${productListingId}は、アプリケーションのListingIDで、Marketplace上のアプリケーション用のURL(ViewVendorProfileで)${appId}はアプリケーションのIDです。Key」のリンクをクリックすることでMarketplaceの2LeggedOAuth用のキーペアと一緒に確認できます。後者の場合は「callback」パラメータが渡されませんが、下記のURLへリダイレクトする事でアプリケーションの設定ページに戻すことができます。https://www.google.com/a/cpanel/${domain}/PikeplaceAppSettings?appId=${appId}&licenseNamespace=PACKAGE_GAIAID${domain}はアプリケーションをインストールしたユーザのドメイン名です。${appId}はアプリケーションのIDです。Key」のリンクをクリックすることでMarketplaceの2LeggedOAuth用のキーペアと一緒に確認できます。configration」をクリックしたとき。下記のURLへリダイレクトする事でアプリケーションの設定ページに戻すことができます。https://www.google.com/a/cpanel/${domain}/PikeplaceAppSettings?appId=${appId}&licenseNamespace=PACKAGE_GAIAID${domain}はアプリケーションをインストールしたユーザのドメイン名です。${appId}はアプリケーションのIDです。Key」のリンクをクリックすることでMarketplaceの2LeggedOAuth用のキーペアと一緒に確認できます。support」のリンクをクリックしたとき。policy」のリンクをクリックしたとき。policy」のリンクをクリックしたとき。アプリケーションのページの注意点ApplicationManifest/Extension@id="navLink"/Urlで指定するユニバーサルナビゲーションにもdomain要素を追加しておけば良いですが、エンドユーザは直接アプリのページに飛んでくるかもしれません。Setup用のページ以外はLicenseされたAppsドメインか?のチェックは常に必要になるんじゃないかと思います。いった用途にLicensingAPIというのがありますが、このAPIについては情報が少ないのでこのページの後半でも使い方やサンプルなどを説明します。AppsアカウントによるSSOをサポートできます。いくつか注意点があります。UserServiceで取得されるcurrentUserが、対象ドメインのものかどうか?の確認が必要。利用者が複数のドメインからアプリケーションを使用している際には、別のドメインで使用していた状態でSignOnしている場合もあります。その場合は一度LogoutURLへ転送して、そのcallbackURLで手順を続行するためのURLを指定する必要があります。セットアップや設定系の機能については、常にドメインを指定する必要があります。ドメインがパラメータに渡されない場合は、あきらめるか、federatedIdentifyからドメインを抽出するしかありません。ユーザがいきなりアプリケーションのURLを叩いて飛んでくる場合はこの方法を使うことになります。AppEngine用のサンプルSlim3のControllerを使ったサンプルです。setUp()メソッドで認証周りについて処理をしています。Link@rel="setup"http://github.com/shin1ogawa/appengine-marketplace-example/blob/master/src/main/java/com/shin1ogawa/appengine/marketplace/controller/SetupForAdminController.javaLink@rel="manage"http://github.com/shin1ogawa/appengine-marketplace-example/blob/master/src/main/java/com/shin1ogawa/appengine/marketplace/controller/ConfigureForAdminController.javaApplicationManifest/Extension@id="navLink"/Urlエンドユーザがユニバーサルナビゲーションから使用する、アプリケーションのトップページといえるものです。http://github.com/shin1ogawa/appengine-marketplace-example/blob/master/src/main/java/com/shin1ogawa/appengine/marketplace/controller/TopPageController.javaLicenseAPIについてリクエストしてきたユーザの該当のドメインが、アプリケーションをどのような状態に設定しているか?という点について、LicensingAPIを使って知ることができます。2010/09時点では以下の2種類のAPIが存在しています。Statusドメイン名を指定して、そのドメインがアプリケーションをインストール済み(LICENSED)かそうでない(UNLICENSED)か、といった情報を取得できます。LICENSEDであっても、enabledになっているかどうかも返されます。管理パネルを見るとわかりますが、インストールしたアプリケーションをdisabledな状態にする事もできます。Notification日時とMarketplace内のappIDを指定して、指定した日時以降に対象のアプリケーションをインストールしたドメインの情報が取得できます。インストールした、という通知なだけで「disabledにした」という通知は存在しないようです。実装についてその他のgdataAPIやAppsAPIのようなライブラリはまだ提供されていないので、自前で実装する必要があります。Marketplace用の2LOを使った認証のための処理(Authorizationヘッダの生成だけですが)は通常のGData用のライブラリが使用できますので、以下のようにGDataRequestを直接使うことでレスポンスを受け取ることができます。request.getParseSource().getInputStream();後はXMLとして解析すれば良いです。参考にすれば良いです。サンプルソースコードをgithubに置いてありますので、そちらも参考になると思います。このサンプルでは、一階層のデータを取得するだけ(実際それで十分)の単純なSAXParserで解析しています。http://github.com/shin1ogawa/appengine-marketplace-example/blob/master/src/main/java/com/shin1ogawa/appengine/marketplace/gdata/LicensingAPI.javaなお、サンプルソースコードはリトライなどAppEngine用に特化した仕組みをつかうようにしているので、AppEngineからの利用を考えている場合は下記のフォルダ内のソースも参考になるかもしれません。http://github.com/shin1ogawa/appengine-marketplace-example/tree/master/src/main/java/com/shin1ogawa/appengine/marketplace/Marketplaceへの登録手順について下記の記事に書いてあります。Marketplaceがリリースされた直後の記事なので、少し古い点もあるかもしれませんが手順自体はおおよそ変わっていません(2010/09)。