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 つしかない場合は、ページ全体が表示されます(縦方向にスクロールできるようにするには、[その他] をクリックします)。
ストア レイアウト要素の制限事項
ユーザー向けにストアのレイアウトを設計して実装する際は、次の制限事項に注意してください(これらの制限のほとんどは、優れた 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.productAvailabilityPolicy
がWHITELIST
に設定されている。または、policy.productAvailabilityPolicy
がALL
に設定されている(あらゆるアプリの検索とインストールが可能)。
ユーザーは 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 リファレンスには、ストアのカスタム レイアウトの作成に使用するリソースと関連メソッド、具体的には Storelayoutpages と Storelayoutclusters に関する情報が記載されています。以下のセクションでは、基本的な例について説明します。
プログラミング タスク
ユーザー向けの managed Google Play ストアのカスタム レイアウトを作成するには、次のことを行う必要があります。
- ページを作成する
- ページ内に 1 つ以上のクラスタを作成する
- ホームページを設定する
少なくとも、ストア レイアウト用に 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();
}
クラスタを作成する
クラスタにはアプリのグループが含まれます。最初にクラスタが作成されてから、ページに追加できます。クラスタを作成するには、Storelayoutclusters の insert
オペレーションを呼び出し、次のプロパティの値を渡します。
- クラスタに含める必要がある
productId
のリスト(たとえば、Gmail のproductId
はapp: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();
}
クイックリンクを設定する(省略可)
クイックリンクは各ページの上部に表示されるため、ユーザーはストアのページ間を簡単に移動できます。クイックリンクを使用するには、まずページの pageId
(insert
で返される)を取得し、ページへのリンクを追加します。たとえば、pageId
が p1
、p2
、p3
である 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");
}