ストアのカスタム レイアウトを作成する

managed Google Play を使用すると、企業顧客向けのストア レイアウトを設計、作成できます。ストアのレイアウトをカスタマイズするには、アプリをクラスタにグループ化し、ストアページを設定し、ストア内の複数のページにアクセスするためのクイックリンクを追加します。

managed Google Play ストアでエンドユーザーが利用できるアプリはすべて、まず IT 管理者による承認とユーザーに対する承認を行ってから、クラスタに追加する必要があります。(このプロセスについて詳しくは、ストア レイアウトにアプリを追加するをご覧ください)。

店舗レイアウトの要素

ストア レイアウトは通常、managed Google Play でユーザーに表示される一連のページで構成されます。各ページには、クラスタと呼ばれる 1 つ以上のアプリのグループを含めることができます。各クラスタには 1 つ以上のアプリが含まれます。

クラスタを使用すると、関連するアプリをグループ化できます。たとえば、Essentials クラスタと Getting ThingsDone クラスタを含む仕事関連アプリのページを作成できます。Essentials クラスタには、Notepad+ や Google スライドなどのアプリを含めることができます。Getting Things Done クラスタには、OneNote、Wunderlist、Any.do などのアプリのほか、トラッキング アプリ、カレンダー アプリ、会議プランニング アプリを含めることができます(図 1 を参照)。

ページを作成するときに、ページの上部に最大 10 個のクイックリンクを追加することもできます。クイックリンクを使用すると、ユーザーが他のページに移動できるようになります。たとえば、図 1 は、ビジネス、通信、財務のページのクイックリンクを示しています。

図 1 に、デバイスに表示された店舗レイアウトの主な要素を示します。

ユーザー デバイスのサンプル画面。クイックリンク、ページ、アプリのクラスタなど、ストア レイアウトの要素が表示されています。
図 1 - ユーザー デバイスの画面例
  • クイックリンク: 他のページにアクセスするためのオプションのリンク。クイックリンクは、リンク先のページの名前を使用します。
  • ページ: アプリのクラスタで構成される、名前を付けた縦方向にスクロール可能なページ。
  • クラスタ(コレクション): 水平方向にスクロールできる名前付きのアプリのカルーセル。ページにクラスタが 1 つしかない場合は、ページ全体が表示されます(縦方向にスクロールできるようにするには、[その他] をクリックします)。

ストア レイアウト要素の制限事項

ユーザー向けにストアのレイアウトを設計して実装する際は、次の制限事項に注意してください(これらの制限のほとんどは、優れた UI デザインの原則によるものです)。

  • クラスタあたり 100 個のアプリ
  • ページあたり 30 クラスタ
  • ページあたり 10 個のクイックリンク
  • 店舗あたり 100 ページ
  • 企業ごとに 1,000 個のプロダクト(承認済みアプリ)

ローカライズされたページ名とクラスタ名

managed Google Play ストア レイアウトでは、ストアページとストアクラスタのローカライズされた名前がサポートされています。ページまたはクラスタを作成するときは、サポートされている言語 / 地域のリスト(IETF 言語タグ)を指定し、ローカライズされた関連する名前を指定します。ユーザーの言語 / 地域がサポート対象リストにない場合は、最も近いものが選択されます。たとえば、en-GB を使用できない場合は、代わりに en-US が選択されます。最も近い名前が見つからない場合は、リスト内の最初の名前が選択されます。

ストアのレイアウトにアプリを追加する

企業が基本的なストア レイアウトを使用している場合、policy.productPolicy 内のすべてのアプリが自動的に追加されます。企業がカスタムストア レイアウトを使用している場合、カスタム レイアウトと productPolicy リストのみに存在するアプリがデバイスに表示されます。policy.productPolicy 内のすべてのアイテムは、Google Play ストアで検索可能です。

エンドユーザーが managed Google Play ストアからアプリをインストールするには、アプリがユーザーのデバイスに対応し、次の条件を満たしている必要があります。

  • ユーザーの許可リストに追加され(デバイス リソースの policy.productPolicy を使用)、policy.productAvailabilityPolicyWHITELIST に設定されている。または、policy.productAvailabilityPolicyALL に設定されている(あらゆるアプリの検索とインストールが可能)。

ユーザーは managed Google Play に組み込まれている検索機能を使用して、上記の条件を満たすアプリを見つけてインストールできます。ただし、アプリは基本的なストア レイアウトの場合、またはアプリをコレクション/クラスタに追加している場合にのみ表示されます。

承認が取り消されたアプリ

管理者はいつでもアプリを不承認にする(承認を取り消す)ことができます。承認が取り消されたアプリもクラスタとユーザーの許可リストに追加できますが、ユーザーには managed Google Play ストアからそのリストが表示されず、インストールすることもできません。承認が取り消されたアプリが再承認されると、そのアプリは managed Google Play ストアで再びユーザーに公開されます。

基本的な店舗レイアウト

デフォルトでは、顧客ごとに基本的な店舗レイアウトが有効になっています。基本レイアウトは 1 つのページと 1 つのクラスタで構成され、最大 1, 000 個のアプリが表示されます。このページのアプリは、product ID 値の順に並べられます。storeLayoutType ="custom" を設定してカスタムのストア レイアウトを作成すると、基本的なストア レイアウトは無効になります。

ストアのカスタム レイアウトを作成する

EMM は、企業顧客ごとにストアのカスタム レイアウトを作成できます。 カスタムストア レイアウトを使用すると、アプリのクラスタの設定、ページへの特定のクラスタの追加、クイックリンクの指定ができます。各クラスタを構成するアプリを定義するため、クラスタを使用して関連アプリ(「Essentials」や「Getting Things Done」など)をグループ化できます。ユーザーには、IT 管理者が権限を許可したアプリのみが表示されます。

Google Play EMM API リファレンスには、ストアのカスタム レイアウトの作成に使用するリソースと関連メソッド、具体的には StorelayoutpagesStorelayoutclusters に関する情報が記載されています。以下のセクションでは、基本的な例について説明します。

プログラミング タスク

ユーザー向けの managed Google Play ストアのカスタム レイアウトを作成するには、次のことを行う必要があります。

  1. ページを作成する
  2. ページ内に 1 つ以上のクラスタを作成する
  3. ホームページを設定する

少なくとも、ストア レイアウト用に 1 つのクラスタで構成されるページを少なくとも 1 つ作成し、そのクラスタには少なくとも 1 つのアプリを含める必要があります。また、ホームページも設定する必要があります。複数のページを作成する場合は、各ページの上部にクイックリンクを表示するように設定できます。

以下では、管理対象の Play ストアのカスタム レイアウトを作成するためのプログラミング タスクについて説明し、その後にストア レイアウトの完全なを示します。

ページを作成する

ページは 1 つ以上のクラスタで構成されます。各クラスタには少なくとも 1 つのアプリが含まれています。ページは特定の企業用に作成されるため、特定のエンタープライズ インスタンス(enterpriseId)でオペレーションを呼び出す必要があります。各ページにわかりやすい名前とローカライズ情報を指定したり、ユーザーがそのページからアクセスできる pageId のリストを指定したりできます。新しいページは、次に示すように insert オペレーション(Storelayoutpages.insert)で作成されます。

public StorePage createPage(String enterpriseId, String name)
    throws IOException {
  List<LocalizedText> names =
      ImmutableList.of(
          new LocalizedText().setLocale("en").setText(name));
  StorePage storePage = new StorePage();
  storePage.setName(names);
  return androidEnterprise.storelayoutpages()
    .insert(enterpriseId, storePage)
    .execute();
}

クラスタを作成する

クラスタにはアプリのグループが含まれます。最初にクラスタが作成されてから、ページに追加できます。クラスタを作成するには、Storelayoutclustersinsert オペレーションを呼び出し、次のプロパティの値を渡します。

  • クラスタに含める必要がある productId のリスト(たとえば、Gmail の productIdapp:com.google.android.gm です)
  • 「タスクを実行しましょう」などの、クラスタのわかりやすい名前です
  • クラスタに関連付ける enterpriseId
  • pageId(クラスタを含むページ用)
  • ページ内のクラスタ > プレースメント(1 番目、2 番目など)

次の例をご覧ください。

private String insertCluster(String enterpriseId, String pageId, String name,
    List<String> productIds, String orderInPage) throws IOException {
  StoreCluster storeCluster = new StoreCluster();
  storeCluster.setName(
      ImmutableList.of(
          new LocalizedText().setLocale("en").setText(name)));
  storeCluster.setProductId(productIds);
  storeCluster.setOrderInPage(orderInPage);
  return androidEnterprise.storelayoutclusters()
    .insert(enterpriseId, pageId, storeCluster)
    .execute()
    .getId();
}

ホームページを設定する

ユーザーのデバイスで managed Google Play に表示される最初のページは、ホームページです。EMM では、顧客ごとにホームページを定義します。このページは、空の場合でも常に表示され、削除できません。

この例では、指定された enterpriseId に対してホームページの ID が取得されます。

public StoreLayout getStoreLayout(String enterpriseId) throws IOException {
  return androidEnterprise
    .enterprises()
    .getStoreLayout(enterpriseId)
    .execute();
}

次の例では、お客様のシナリオの enterpriseId と、そのお客様のシナリオのホームページのpageIdを指定して、お客様のホームページを設定します。

public StoreLayout setStoreLayout(String enterpriseId, String homepageId)
    throws IOException {
  StoreLayout storeLayout = new StoreLayout();
  storeLayout.setHomepageId(homepageId);

  return androidEnterprise
    .enterprises()
    .setStoreLayout(enterpriseId, storeLayout)
    .execute();
}

クイックリンクは各ページの上部に表示されるため、ユーザーはストアのページ間を簡単に移動できます。クイックリンクを使用するには、まずページの pageIdinsert で返される)を取得し、ページへのリンクを追加します。たとえば、pageIdp1p2p3 である 3 つのページを作成する場合、最初のページから他の 2 つのページへのクイックリンクを追加するには、次のようにします。

StorePage storePage = new StorePage();
storePage.setName(
    ImmutableList.of(new LocalizedText().setLocale("en").setText(title)));
storePage.setLink(ImmutableList.of("p2", "p3");
return androidEnterprise.storelayoutpages()
  .update(enterpriseId, "p1", storePage)
  .execute();

以下に、相互リンクされた 3 つのページで構成される基本的なストアを作成する完全な例を示します。各ページは、類似したアプリのクラスタで構成されます。各ページを作成するには、顧客の enterpriseId を指定してページの name のみを設定し、pageId を取得してページへのクイックリンクを作成します。

// Create a basic page and return the pageId.
private String insertPage(String enterpriseId, String title,
    List<String> links) throws IOException {
  List<LocalizedText> names =
      ImmutableList.of(new LocalizedText().setLocale("en").setText(title));
  StorePage page = new StorePage();
  page.setName(names);
  page.setLink(links);
  return enterprise.storelayoutpages().insert(enterpriseId, page).execute().getId();
}

public StoreLayout setStoreLayout(String enterpriseId, String homepageId)
    throws IOException {
  StoreLayout storeLayout = new StoreLayout();
  storeLayout.setHomepageId(homepageId);

  return androidEnterprise
      .enterprises()
      .setStoreLayout(enterpriseId, storeLayout)
      .execute();
}

private String insertCluster(String enterpriseId, String pageId, String name,
    List<String> productIds, String orderInPage) throws IOException {
  StoreCluster cluster = new StoreCluster();
  List<LocalizedText> names =
      ImmutableList.of(new LocalizedText().setLocale("en").setText(name));
  cluster.setName(names);
  cluster.setProductId(productIds);
  cluster.setOrderInPage(orderInPage);
  return androidEnterprise.storelayoutclusters()
      .insert(enterpriseId, pageId, cluster)
      .execute()
      .getId();
}

private void updatePage(String enterpriseId, String pageId, String title,
    List<String> links) throws IOException {
  List<LocalizedText> names =
      ImmutableList.of(new LocalizedText().setLocale("en").setText(title));
  StorePage page = new StorePage();
  page.setName(names);
  page.setLink(links);
  enterprise.storelayoutpages()
      .update(enterpriseId, pageId, page).execute();
}

private void makeStore(String enterpriseId) throws IOException {
  // Create the pages.
  String page1 = insertPage(enterpriseId, "Home");
  String page2 = insertPage(enterpriseId, "Productivity");
  String page3 = insertPage(enterpriseId, "Accounting");

  // Set the homepage (page that displays by default when store is opened).
  setStoreLayout(enterpriseId, page1);

  // Add the links to the pages. This makes a small tree.
  updatePage(enterpriseId, page1, "Home", ImmutableList.of(page2, page3));
  updatePage(enterpriseId, page2, "Productivity", ImmutableList.of(page1));
  updatePage(enterpriseId, page3, "Accounting", ImmutableList.of(page1));

  // Add clusters with contents.
  insertCluster(
      enterpriseId,
      page1,
      "Getting Things Done",
      ImmutableList.of(
          "app:com.mytodolist",
          "app:com.google.android.gm",
          "app:com.google.android.docs"),
      "1");
  insertCluster(
      enterpriseId,
      page1,
      "Strategy",
      ImmutableList.of(
          "app:com.myplanner",
          "app:com.stratego"),
      "2");
  insertCluster(
      enterpriseId,
      page2,
      "Editors",
      ImmutableList.of(
          "app:com.myeditor",
          "app:com.betteredit",
          "app:com.lazyguy"),
      "1");
  insertCluster(
      enterpriseId,
      page2,
      "Time Management",
      ImmutableList.of(
          "app:com.mytimetracker",
          "app:com.lazygal",
          "app:com.lazyguy"),
      "2");
  insertCluster(
      enterpriseId,
      page2,
      "Accounting",
      ImmutableList.of(
          "app:com.mymoney",
          "app:com.taxpro",
          "app:com.balances"),
      "3");
}