狠狠撸

狠狠撸Share a Scribd company logo
Google AppEngine で作る
Google Apps Marketplace
     対応サービス
     appengine ja night #10
         2010年8月30日
  なかじまんソフトウェア株式会社
     中嶋 信博 @nakajiman
  Google API Expert (OpenSocial)
OpenSocial Pages for Google Apps
http://opensocial-pages.appspot.com/
             ? Google Apps のユーザとグ
               ループをソーシャルグラフとし
               て、ドメイン専用 OpenSocial
               コンテナが持てる
             ? PC に加えて Smart Phone で
               も OpenSocial ガジェットが快
               適に動作するアーキテクチャ
             ? Google AppEngine でホストし
               て Google Apps Marketplace
               に対応
             ? ソースコードも入手可
本日のゴール
? Google Apps Marketplace とは何か
  Google Apps に Product をインストールすると
  はどういうことか
? Application Manifest とは何か
  Google Apps Marketplace に Product を掲載す
  る手順
? AppEngine から OpenID Single-Sign On と 2-
  legged OAuth for Data を使って Google Apps と
  連携する方法
? 情報源
Google Apps Marketplace とは何か
Google Apps Marketplace
http://www.google.com/enterprise/marketplace/

 利用                                    提供


                     利用




Google                                Vendor
 Apps
Google Apps Marketplace
      主な Vendor




                          6
Google Apps Marketplace に
      掲載できる内容と条件
? Vendor (会社情報)
? Product (製品情報)
 – Installable (直接インストール)
   ? OpenID Single-Sign On
      – Google AppEngine
      – その他
   ? Gmail Contextual Gadget
 – Not Installable
? Service (サービス情報)
Vendor
                             (会社情報)




   Product
  (製品情報)
                    Add it now
                  (インストールボタン)
Customer Review
   (レビュー)
Installable な Product を利用できる
     Google Apps Edition とユーザ
? Google Apps Edition
  –Premier                   未確認
                           教えてください
  –Standard

  –Education, Government, Non-profit   ?
? User Privileges (権限)
  – Administrator (管理者) -- インストールと設定
  – User (一般) -- 利用
Product をインストールすると
Google Apps のサービスの1つになる
              Administrator
                (管理者)

                           User
                          (一般)
Google Apps Developer Program Site
          Sell Marketplace Apps
             Payment Policy
http://developer.googleapps.com/marketplace/fees

              Revenue share
        Vender : Google = 80 : 20
          Google Checkout API
  Automatic Billing or Self Reported Billing
Google Apps Marketplace から
Google Apps に Product を
インストールするとはどういうことか
Google Apps Marketplace から
Google Apps に Product をインストール
Add it now ボタン   Google Apps ドメイン名
 をクリックして …          を入力して GO




   すると … Google Apps に遷移する
Google Apps Marketplace 及び
Product の利用規約への同意




                利用規約は
       Product (製品情報)で設定する
Product から Google Apps への
    データアクセスの許可




           データアクセスの範囲と理由は
           Application Manifest で定義する
Product は Google AppEngine
   でホストし、マルチテナントな構成
http://opensocial-pages.appspot.com/a/${DOMAIN_NAME}/
 Product の利用



                Google AppEngine
                    ログイン OpenID Single Sign-On
                    データアクセス 2-legged OAuth for Data
                                    <?xml version
                                    <Application    Application
                                    Manifest
                                    xmlns= …        Manifest
             Add it now ボタン
Google       利用規約の同意                    Google
 Apps        データアクセスの認可            Apps Marketplace
Application Manifest とは何か
Application Manifest 1/4
             製品のサポート情報
<?xml version="1.0" encoding="UTF-8" ?>
<ApplicationManifest
  xmlns="http://schemas.google.com/ApplicationManifest/2009">
<Support>
 <Link rel="manage" href="http://opensocial-pages.appspot.com
  /a/${DOMAIN_NAME}/controlpanel“ /> <!– 製品の管理ページ -->
 <Link rel="support"
 href="http://sites.google.com/a/lrlab.to/opensocial-pages/" />
</Support> <!– 製品のサポートページ -->
<Name>OpenSocial Pages</Name> <!– 製品名 -->
Application Manifest 2/4
       Google's Universal Navigation
<Extension id="navLink" type="link">
 <Name>OpenSocial Pages</Name> <!– リンク名 -->
 <Url>http://opensocial-
 pages.appspot.com/a/${DOMAIN_NAME}/</Url> <!– リンク先 -->
 <Scope ref="UserFeed" />
 <Scope ref="GroupFeed" />             Google‘s
                                  Universal Navigation
</Extension>
Application Manifest 3/4
     OpenID 承認ステップのスキップ
<Extension id="realm" type="openIdRealm">
  <Url>http://opensocial-pages.appspot.com</Url>
</Extension>
                                         インストールした時点で
                                           許可したとみなして
                                         スキップして表示しない
Application Manifest 4/4
         データアクセスの範囲と理由
<Scope id="UserFeed"> <!– Provisioning API (read only) -->
 <Url>https://apps-apis.google.com/a/feeds/user/#readonly</Url>
 <Reason>For the admin interface: This allows you …</Reason>
</Scope>
<Scope id="GroupFeed"> <!– Provisioning API (read only) -->
 <Url>https://apps-apis.google.com/a/feeds/group/#readonly</Url>
 <Reason>For the admin interface: This allows you …</Reason>
</Scope>
</ApplicationManifest>
Google Apps Marketplace に
Product を掲載する手順
Google Apps Marketplace
Product の開発から公開までの流れ
Vendor (会社情報) と
Product (製品情報) の登録
  Product の開発とテスト
  Vendor は公開前でもインストールできる
    Google Marketplace への公開申請
    Google Checkout で 100 ドル支払い
       Google Marketplace による審査
       結果は48時間以内にメールで通知
         Google Marketplace の掲載開始
         誰でもインストールできる
Vendor (会社情報)
? Company logo
? Vendor name
? Phone number
? Email address
? Home page URL
? Address line
? Town
? Zip/post code
? Country
? Vendor overview
Product (製品情報)
? My product may be directly
installed into Google Apps
domains
? Category
                        On
? Name
? Summary Overview
? Full Overview
? Application Manifest
? Pricing Summary
? Terms of Service
? Benefit points / External links
? Screenshot / Logo
? Screencast / Video or success
story collateral
? Version information
? Google Analytics
? Google APIs
OpenID Single-Sign On:
Google OpenID Federated Login
Authentication Options:
 (Experimental) Federated Login
Google AppEngine
Application Settings
ログイン画面への誘導
UserService userService =
   UserServiceFactory.getUserService();
String loginUri = userService.createLoginURL(
   "/", // ログイン後のリダイレクト先
   "",
   "n35.com", // Google Apps ドメイン名
   new HashSet<String>() // 無効っぽい?
);
response.sendRedirect(loginUri);
ログアウト画面への誘導
UserService userService =
  UserServiceFactory.getUserService();
String logoutUrl =
  userService.createLogoutURL("/");
request.setAttribute("logoutUrl", logoutUrl);
UserService で取得できる情報 1/2
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
user.getAuthDomain(); // ドメイン名じゃないので注意!
  https://www.google.com/a/n35.com/o8/ud?be
user.getUserId();
  102200252690973622441
user.getFederatedIdentity();
  http://n35.com/openid?id=114998333651267920533
user.getEmail();
  nakajiman@n35.com
user.getNickname(); // 名前は AX で取得できない?
  nakajiman@n35.com
UserService で取得できる情報 2/2
UserService userService = UserServiceFactory.getUserService();
userService.isUserAdmin();
  true // Google Apps の Administrator ではないです!
userService.isUserLoggedIn();
  true
2-legged OAuth for Data:
Google Apps Provisioning API
Google Data Java Client Library
Google Apps Provisioning API で必要なファイル
? gdata-core-1.0.jar
? gdata-client-1.0.jar
? gdata-appsforyourdomain-1.0.jar
View OAuth Consumer Key
        Consumer Key / Key Secret
                                   Google Apps Marketplace
                                     Vender (会社情報)




GoogleOAuthParameters params = new GoogleOAuthParameters();
params.setOAuthConsumerKey("Consumer Key");
params.setOAuthConsumerSecret("Consumer Secret");
params.setOAuthType(OAuthType.TWO_LEGGED_OAUTH);
Google Apps Provisioning API
            User 情報の取得
UserService service = new UserService("User");
service.setOAuthCredentials(params, new OAuthHmacSha1Signer());
service.useSsl();
URL url = new URL("https://apps-apis.google.com/a/feeds" +
   "/n35.com/user/2.0/nakajiman");
UserEntry user = service.getEntry(url, UserEntry.class);
String givenName = user.getName().getGivenName();
String familyName = user.getName().getFamilyName();
boolean admin = user.getLogin().getAdmin();
Google Apps Provisioning API
           Group 情報の取得
AppsPropertyService service =
   new AppsPropertyService("AppsProperty");
service.setOAuthCredentials(params, new OAuthHmacSha1Signer());
service.useSsl();
URL url = new URL("https://apps-apis.google.com/a/feeds" +
   "/group/2.0/n35.com/sales@n35.com");
GenericEntry group = service.getEntry(url, GenericEntry.class);
String title = group.getProperty("groupName");
String description = group.getProperty("description");
Google Apps Provisioning API
       Group メンバー情報の取得
AppsPropertyService service =
   new AppsPropertyService("AppsProperty");
service.setOAuthCredentials(params, new OAuthHmacSha1Signer());
service.useSsl();
URL url = new URL("https://apps-apis.google.com/a/feeds" +
   "/group/2.0/n35.com/sales@n35.com/member");
GenericFeed members = service.getFeed(url, GenericFeed.class);
for (GenericEntry member : members.getEntries()) {
   String memberId = member.getProperty("memberId");
情報源
Google Apps Marketplace
http://www.google.com/enterprise/marketplace/
Google Apps Developer Program Site
http://developer.googleapps.com/
Google Apps APIs (en)
http://code.google.com/intl/en/googleapps/
Google Data Java Client Library
http://code.google.com/p/gdata-java-client/
OpenSocial Pages for Google Apps
http://opensocial-pages.appspot.com/

More Related Content

appengine ja night #10 Google AppEngine で作る Google Apps Marketplace 対応サービス

  • 1. Google AppEngine で作る Google Apps Marketplace 対応サービス appengine ja night #10 2010年8月30日 なかじまんソフトウェア株式会社 中嶋 信博 @nakajiman Google API Expert (OpenSocial)
  • 2. OpenSocial Pages for Google Apps http://opensocial-pages.appspot.com/ ? Google Apps のユーザとグ ループをソーシャルグラフとし て、ドメイン専用 OpenSocial コンテナが持てる ? PC に加えて Smart Phone で も OpenSocial ガジェットが快 適に動作するアーキテクチャ ? Google AppEngine でホストし て Google Apps Marketplace に対応 ? ソースコードも入手可
  • 3. 本日のゴール ? Google Apps Marketplace とは何か Google Apps に Product をインストールすると はどういうことか ? Application Manifest とは何か Google Apps Marketplace に Product を掲載す る手順 ? AppEngine から OpenID Single-Sign On と 2- legged OAuth for Data を使って Google Apps と 連携する方法 ? 情報源
  • 4. Google Apps Marketplace とは何か
  • 6. Google Apps Marketplace 主な Vendor 6
  • 7. Google Apps Marketplace に 掲載できる内容と条件 ? Vendor (会社情報) ? Product (製品情報) – Installable (直接インストール) ? OpenID Single-Sign On – Google AppEngine – その他 ? Gmail Contextual Gadget – Not Installable ? Service (サービス情報)
  • 8. Vendor (会社情報) Product (製品情報) Add it now (インストールボタン) Customer Review (レビュー)
  • 9. Installable な Product を利用できる Google Apps Edition とユーザ ? Google Apps Edition –Premier 未確認 教えてください –Standard –Education, Government, Non-profit ? ? User Privileges (権限) – Administrator (管理者) -- インストールと設定 – User (一般) -- 利用
  • 10. Product をインストールすると Google Apps のサービスの1つになる Administrator (管理者) User (一般)
  • 11. Google Apps Developer Program Site Sell Marketplace Apps Payment Policy http://developer.googleapps.com/marketplace/fees Revenue share Vender : Google = 80 : 20 Google Checkout API Automatic Billing or Self Reported Billing
  • 12. Google Apps Marketplace から Google Apps に Product を インストールするとはどういうことか
  • 13. Google Apps Marketplace から Google Apps に Product をインストール Add it now ボタン Google Apps ドメイン名 をクリックして … を入力して GO すると … Google Apps に遷移する
  • 14. Google Apps Marketplace 及び Product の利用規約への同意 利用規約は Product (製品情報)で設定する
  • 15. Product から Google Apps への データアクセスの許可 データアクセスの範囲と理由は Application Manifest で定義する
  • 16. Product は Google AppEngine でホストし、マルチテナントな構成 http://opensocial-pages.appspot.com/a/${DOMAIN_NAME}/ Product の利用 Google AppEngine ログイン OpenID Single Sign-On データアクセス 2-legged OAuth for Data <?xml version <Application Application Manifest xmlns= … Manifest Add it now ボタン Google 利用規約の同意 Google Apps データアクセスの認可 Apps Marketplace
  • 18. Application Manifest 1/4 製品のサポート情報 <?xml version="1.0" encoding="UTF-8" ?> <ApplicationManifest xmlns="http://schemas.google.com/ApplicationManifest/2009"> <Support> <Link rel="manage" href="http://opensocial-pages.appspot.com /a/${DOMAIN_NAME}/controlpanel“ /> <!– 製品の管理ページ --> <Link rel="support" href="http://sites.google.com/a/lrlab.to/opensocial-pages/" /> </Support> <!– 製品のサポートページ --> <Name>OpenSocial Pages</Name> <!– 製品名 -->
  • 19. Application Manifest 2/4 Google's Universal Navigation <Extension id="navLink" type="link"> <Name>OpenSocial Pages</Name> <!– リンク名 --> <Url>http://opensocial- pages.appspot.com/a/${DOMAIN_NAME}/</Url> <!– リンク先 --> <Scope ref="UserFeed" /> <Scope ref="GroupFeed" /> Google‘s Universal Navigation </Extension>
  • 20. Application Manifest 3/4 OpenID 承認ステップのスキップ <Extension id="realm" type="openIdRealm"> <Url>http://opensocial-pages.appspot.com</Url> </Extension> インストールした時点で 許可したとみなして スキップして表示しない
  • 21. Application Manifest 4/4 データアクセスの範囲と理由 <Scope id="UserFeed"> <!– Provisioning API (read only) --> <Url>https://apps-apis.google.com/a/feeds/user/#readonly</Url> <Reason>For the admin interface: This allows you …</Reason> </Scope> <Scope id="GroupFeed"> <!– Provisioning API (read only) --> <Url>https://apps-apis.google.com/a/feeds/group/#readonly</Url> <Reason>For the admin interface: This allows you …</Reason> </Scope> </ApplicationManifest>
  • 22. Google Apps Marketplace に Product を掲載する手順
  • 23. Google Apps Marketplace Product の開発から公開までの流れ Vendor (会社情報) と Product (製品情報) の登録 Product の開発とテスト Vendor は公開前でもインストールできる Google Marketplace への公開申請 Google Checkout で 100 ドル支払い Google Marketplace による審査 結果は48時間以内にメールで通知 Google Marketplace の掲載開始 誰でもインストールできる
  • 24. Vendor (会社情報) ? Company logo ? Vendor name ? Phone number ? Email address ? Home page URL ? Address line ? Town ? Zip/post code ? Country ? Vendor overview
  • 25. Product (製品情報) ? My product may be directly installed into Google Apps domains ? Category On ? Name ? Summary Overview ? Full Overview ? Application Manifest ? Pricing Summary ? Terms of Service ? Benefit points / External links ? Screenshot / Logo ? Screencast / Video or success story collateral ? Version information ? Google Analytics ? Google APIs
  • 26. OpenID Single-Sign On: Google OpenID Federated Login
  • 27. Authentication Options: (Experimental) Federated Login Google AppEngine Application Settings
  • 28. ログイン画面への誘導 UserService userService = UserServiceFactory.getUserService(); String loginUri = userService.createLoginURL( "/", // ログイン後のリダイレクト先 "", "n35.com", // Google Apps ドメイン名 new HashSet<String>() // 無効っぽい? ); response.sendRedirect(loginUri);
  • 29. ログアウト画面への誘導 UserService userService = UserServiceFactory.getUserService(); String logoutUrl = userService.createLogoutURL("/"); request.setAttribute("logoutUrl", logoutUrl);
  • 30. UserService で取得できる情報 1/2 UserService userService = UserServiceFactory.getUserService(); User user = userService.getCurrentUser(); user.getAuthDomain(); // ドメイン名じゃないので注意! https://www.google.com/a/n35.com/o8/ud?be user.getUserId(); 102200252690973622441 user.getFederatedIdentity(); http://n35.com/openid?id=114998333651267920533 user.getEmail(); nakajiman@n35.com user.getNickname(); // 名前は AX で取得できない? nakajiman@n35.com
  • 31. UserService で取得できる情報 2/2 UserService userService = UserServiceFactory.getUserService(); userService.isUserAdmin(); true // Google Apps の Administrator ではないです! userService.isUserLoggedIn(); true
  • 32. 2-legged OAuth for Data: Google Apps Provisioning API
  • 33. Google Data Java Client Library Google Apps Provisioning API で必要なファイル ? gdata-core-1.0.jar ? gdata-client-1.0.jar ? gdata-appsforyourdomain-1.0.jar
  • 34. View OAuth Consumer Key Consumer Key / Key Secret Google Apps Marketplace Vender (会社情報) GoogleOAuthParameters params = new GoogleOAuthParameters(); params.setOAuthConsumerKey("Consumer Key"); params.setOAuthConsumerSecret("Consumer Secret"); params.setOAuthType(OAuthType.TWO_LEGGED_OAUTH);
  • 35. Google Apps Provisioning API User 情報の取得 UserService service = new UserService("User"); service.setOAuthCredentials(params, new OAuthHmacSha1Signer()); service.useSsl(); URL url = new URL("https://apps-apis.google.com/a/feeds" + "/n35.com/user/2.0/nakajiman"); UserEntry user = service.getEntry(url, UserEntry.class); String givenName = user.getName().getGivenName(); String familyName = user.getName().getFamilyName(); boolean admin = user.getLogin().getAdmin();
  • 36. Google Apps Provisioning API Group 情報の取得 AppsPropertyService service = new AppsPropertyService("AppsProperty"); service.setOAuthCredentials(params, new OAuthHmacSha1Signer()); service.useSsl(); URL url = new URL("https://apps-apis.google.com/a/feeds" + "/group/2.0/n35.com/sales@n35.com"); GenericEntry group = service.getEntry(url, GenericEntry.class); String title = group.getProperty("groupName"); String description = group.getProperty("description");
  • 37. Google Apps Provisioning API Group メンバー情報の取得 AppsPropertyService service = new AppsPropertyService("AppsProperty"); service.setOAuthCredentials(params, new OAuthHmacSha1Signer()); service.useSsl(); URL url = new URL("https://apps-apis.google.com/a/feeds" + "/group/2.0/n35.com/sales@n35.com/member"); GenericFeed members = service.getFeed(url, GenericFeed.class); for (GenericEntry member : members.getEntries()) { String memberId = member.getProperty("memberId");
  • 38. 情報源 Google Apps Marketplace http://www.google.com/enterprise/marketplace/ Google Apps Developer Program Site http://developer.googleapps.com/ Google Apps APIs (en) http://code.google.com/intl/en/googleapps/ Google Data Java Client Library http://code.google.com/p/gdata-java-client/ OpenSocial Pages for Google Apps http://opensocial-pages.appspot.com/