สร้างเลย์เอาต์ร้านค้าที่กําหนดเอง

Managed Google Play ให้คุณออกแบบและสร้างเลย์เอาต์ของร้านค้าสำหรับลูกค้าองค์กร คุณสามารถปรับแต่งเลย์เอาต์ของร้านค้าโดยการจัดกลุ่มแอปเป็นคลัสเตอร์ ตั้งค่าหน้าร้านค้า และเพิ่มลิงก์ด่วนที่ให้สิทธิ์เข้าถึงหลายหน้าภายในร้านค้า

แอปทั้งหมดที่ให้บริการแก่ผู้ใช้ปลายทางใน Managed Google Play Store ต้องได้รับการอนุมัติจากผู้ดูแลระบบไอที อนุมัติสำหรับผู้ใช้ และเพิ่มลงในคลัสเตอร์ก่อน (ดูการเพิ่มแอปลงในเลย์เอาต์ของ Store สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับขั้นตอนนี้)

องค์ประกอบของเลย์เอาต์ร้านค้า

โดยทั่วไปเลย์เอาต์ของร้านค้าจะประกอบด้วยชุดหน้าที่แสดงต่อผู้ใช้ใน Managed Google Play แต่ละหน้าอาจมีกลุ่มแอปอย่างน้อย 1 กลุ่มที่เรียกว่าคลัสเตอร์ แต่ละคลัสเตอร์จะมีแอปอย่างน้อย 1 รายการ

คลัสเตอร์ช่วยให้คุณจัดกลุ่มแอปที่เกี่ยวข้องได้ เช่น คุณสร้างหน้าแอปที่เกี่ยวข้องกับงานซึ่งมีคลัสเตอร์ Essentials และคลัสเตอร์ Getting Things Done ได้ คลัสเตอร์ Essentials อาจมีแอป เช่น Notepad+, Google สไลด์ เป็นต้น คลัสเตอร์ "เริ่มต้นใช้งาน" อาจมีแอปอย่าง OneNote, Wunderlist, Any.do รวมถึงแอปการติดตามปฏิทินและการวางแผนการประชุมอื่นๆ (ดูรูปที่ 1)

เมื่อสร้างหน้าเว็บ คุณยังสามารถเพิ่มลิงก์ด่วนได้สูงสุด 10 ลิงก์ที่ด้านบนของหน้า ลิงก์ด่วนช่วยให้ผู้ใช้ข้ามไปยังหน้าอื่นๆ ได้ ตัวอย่างเช่น รูปที่ 1 แสดงลิงก์ด่วนสำหรับหน้าธุรกิจ การสื่อสาร และการเงิน

รูปที่ 1 แสดงองค์ประกอบหลักบางส่วนของการจัดวางร้านค้าตามที่เห็นในอุปกรณ์

ตัวอย่างหน้าจอจากอุปกรณ์ของผู้ใช้ซึ่งแสดงองค์ประกอบของเลย์เอาต์ของร้านค้า ซึ่งรวมถึงลิงก์ด่วน หน้าเว็บ และกลุ่มแอป
ภาพที่ 1 - ตัวอย่างหน้าจอจากอุปกรณ์ของผู้ใช้
  • ลิงก์ด่วน: ลิงก์ที่ไม่บังคับซึ่งให้สิทธิ์เข้าถึงหน้าเว็บอื่นๆ ลิงก์ด่วนจะใช้ชื่อของหน้าที่มีการชี้ไป
  • หน้าเว็บ: หน้าเว็บที่มีชื่อและเลื่อนได้ในแนวตั้ง ซึ่งประกอบด้วยกลุ่มแอป
  • คลัสเตอร์ (หรือที่เรียกว่าคอลเล็กชัน): ภาพสไลด์ของแอปที่มีชื่อและเลื่อนในแนวนอนได้ ขยายเป็นแบบเต็มหน้าหากหน้าเว็บมีคลัสเตอร์เดียว (หรือคลิก "เพิ่มเติม" เพื่อเลื่อนในแนวตั้งได้)

ข้อจำกัดขององค์ประกอบการจัดวางร้านค้า

เมื่อออกแบบและใช้เลย์เอาต์ร้านค้าสำหรับลูกค้า โปรดคํานึงถึงขีดจํากัดเหล่านี้ (ขีดจํากัดส่วนใหญ่เหล่านี้เกิดจากหลักการออกแบบ UI ที่ดี)

  • 100 แอปต่อคลัสเตอร์
  • 30 คลัสเตอร์ต่อหน้า
  • ลิงก์ด่วน 10 ลิงก์ต่อหน้า
  • 100 หน้าต่อร้านค้า
  • ผลิตภัณฑ์ (แอปที่ได้รับอนุมัติ) 1,000 รายการต่อองค์กร

ชื่อหน้าเว็บและคลัสเตอร์ที่แปลแล้ว

เลย์เอาต์ของ Managed Google Play Store รองรับชื่อที่แปลแล้วสำหรับหน้าร้านค้าและคลัสเตอร์ร้านค้า เมื่อสร้างหน้าเว็บหรือคลัสเตอร์ คุณจะต้องระบุรายการภาษาที่รองรับเป็นแท็กภาษา IETF และชื่อที่แปลแล้วที่เกี่ยวข้อง หากภาษาของผู้ใช้ไม่อยู่ในรายการที่รองรับ ระบบจะเลือกรายการที่ตรงกันที่ใกล้เคียงที่สุด ตัวอย่างเช่น หากไม่มี en-GB ระบบจะเลือก en-US แทน หากไม่มีการจับคู่ที่ตรงกัน ระบบจะเลือกชื่อจากรายการ

การเพิ่มแอปลงในเลย์เอาต์ของร้านค้า

ระบบจะเพิ่มแอปทั้งหมดที่มีอยู่ใน policy.productPolicy โดยอัตโนมัติหากองค์กรใช้เลย์เอาต์ร้านค้าพื้นฐาน หากองค์กรใช้เลย์เอาต์ร้านค้าที่กำหนดเอง แอปที่แสดงในเลย์เอาต์ที่กำหนดเองเท่านั้นและรายการ productPolicy จะแสดงในอุปกรณ์ รายการทั้งหมดที่มีอยู่ใน policy.productPolicy จะค้นหาได้ใน Play Store

สำหรับผู้ใช้ปลายทางที่จะติดตั้งแอปจาก Managed Google Play Store แอปต้องเข้ากันได้กับอุปกรณ์ของผู้ใช้และตรงตามเงื่อนไขต่อไปนี้

  • เพิ่มลงในรายการที่อนุญาตของผู้ใช้ (โดยใช้ policy.productPolicy ในทรัพยากรของอุปกรณ์) และตั้งค่า policy.productAvailabilityPolicy เป็น WHITELIST หรือตั้งค่า policy.productAvailabilityPolicy เป็น ALL (เพื่อให้ผู้ใช้ค้นหาและติดตั้งแอปใดก็ได้)

ผู้ใช้จะใช้ฟีเจอร์การค้นหาที่มีอยู่ใน Managed Google Play เพื่อค้นหาและติดตั้งแอปที่เป็นไปตามเงื่อนไขเหล่านี้ได้ อย่างไรก็ตาม แอปจะแสดงในเลย์เอาต์พื้นฐานของ Store เท่านั้นหรือเมื่อคุณเพิ่มแอปลงในคอลเล็กชัน/คลัสเตอร์

แอปที่เพิกถอนการอนุมัติ

ผู้ดูแลระบบสามารถยกเลิกการอนุมัติแอป (เพิกถอนการอนุมัติของแอป) ได้ทุกเมื่อ แอปที่ถูกเพิกถอนการอนุมัติจะยังคงสามารถเพิ่มไปยังคลัสเตอร์และรายการที่อนุญาตของผู้ใช้ได้ แต่ผู้ใช้จะไม่เห็นหรือไม่สามารถติดตั้งแอปเหล่านั้นจาก Managed Google Play Store หากแอปที่ถูกเพิกถอนการอนุมัติได้รับการอนุมัติอีกครั้ง แอปจะพร้อมใช้งานสำหรับผู้ใช้อีกครั้งใน Managed Google Play Store

การจัดวางร้านค้าพื้นฐาน

โดยค่าเริ่มต้น ระบบจะเปิดใช้เลย์เอาต์ร้านค้าพื้นฐานให้กับลูกค้าแต่ละราย เลย์เอาต์พื้นฐานมี 1 หน้าและ 1 คลัสเตอร์ ซึ่งแสดงแอปสูงสุด 1, 000 แอป แอปในหน้าเว็บจะจัดเรียงตามค่า product ID หากคุณสร้างเลย์เอาต์ร้านค้าที่กำหนดเอง (โดยการตั้งค่า storeLayoutType ="custom") ระบบจะปิดใช้เลย์เอาต์พื้นฐานของร้านค้า

สร้างเลย์เอาต์ร้านค้าที่กำหนดเอง

EMM สามารถสร้างเลย์เอาต์ร้านค้าที่กำหนดเองสำหรับลูกค้าองค์กรแต่ละรายได้ เลย์เอาต์ร้านค้าที่กำหนดเองช่วยให้คุณตั้งค่าคลัสเตอร์ของแอป เพิ่มคลัสเตอร์ที่เจาะจงในหน้าเว็บ และระบุลิงก์ด่วนได้ เนื่องจากคุณกำหนดแอปที่ประกอบกันเป็นแต่ละคลัสเตอร์ คุณจึงใช้คลัสเตอร์เพื่อจัดกลุ่มแอปที่เกี่ยวข้องได้ (เช่น "แอปสำคัญ" และ "ทำสิ่งต่างๆ ให้เสร็จ") ผู้ใช้จะจะเห็นเฉพาะแอปที่ผู้ดูแลระบบไอที ยอมรับสิทธิ์แล้ว

เอกสารอ้างอิง Google Play EMM API มีข้อมูลเกี่ยวกับทรัพยากรและวิธีที่เชื่อมโยงที่คุณใช้ในการสร้างเลย์เอาต์ร้านค้าที่กำหนดเอง โดยเฉพาะ Storelayoutpages และ Storelayoutclusters ขั้นตอนที่แสดงในส่วนด้านล่างจะอธิบายตัวอย่างเบื้องต้น

งานเขียนโปรแกรม

หากต้องการสร้างเลย์เอาต์ Managed Google Play Store ที่กำหนดเองสำหรับลูกค้าของคุณ คุณต้องดำเนินการต่อไปนี้

  1. สร้างเพจ
  2. สร้างคลัสเตอร์อย่างน้อย 1 รายการภายในหน้า
  3. ตั้งค่าหน้าแรก

อย่างน้อยที่สุด คุณต้องสร้างหน้าเว็บอย่างน้อย 1 หน้าที่ประกอบด้วย 1 คลัสเตอร์สำหรับการจัดวางร้านค้า และคลัสเตอร์ต้องมีอย่างน้อย 1 แอป คุณต้องตั้งค่าหน้าแรกด้วย หากสร้างหน้าเว็บมากกว่า 1 หน้า คุณจะมีตัวเลือกในการตั้งค่าลิงก์ด่วนให้แสดงที่ด้านบนของแต่ละหน้า

งานเขียนโปรแกรมสำหรับการสร้างเลย์เอาต์ใน Managed Play Store ที่กำหนดเองมีอธิบายอยู่ด้านล่าง ตามด้วยตัวอย่างเลย์เอาต์ทั้งหมดใน Store

สร้างเพจ

หน้าเว็บประกอบด้วยคลัสเตอร์อย่างน้อย 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();
}

สร้างคลัสเตอร์

คลัสเตอร์ประกอบด้วยกลุ่มแอป ระบบจะสร้างคลัสเตอร์ก่อน จากนั้นจึงจะเพิ่มลงในหน้าเว็บได้ หากต้องการสร้างคลัสเตอร์ ให้เรียกใช้การดำเนินการ insert ของ Storelayoutclusters และส่งค่าสำหรับพร็อพเพอร์ตี้เหล่านี้

  • รายการ productId ที่คลัสเตอร์ควรมี (เช่น productId สำหรับ Gmail คือ app:com.google.android.gm)
  • ชื่อที่เป็นมิตรกับผู้ใช้สำหรับคลัสเตอร์ เช่น แปลงานทุกอย่างเสร็จแล้ว
  • enterpriseId ที่ควรเชื่อมโยงกับคลัสเตอร์
  • pageId (สำหรับหน้าที่ควรมีคลัสเตอร์)
  • ตำแหน่งคลัสเตอร์ในหน้า (ตำแหน่งแรก ตำแหน่งที่สอง และอื่นๆ)

ตัวอย่าง

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 ที่ระบุ

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();
}

ลิงก์ด่วนจะแสดงอยู่ที่ด้านบนของแต่ละหน้า ช่วยให้ผู้ใช้ไปยังหน้าต่างๆ ใน Store ได้อย่างง่ายดาย หากต้องการใช้ลิงก์ด่วน ให้ขอรับ pageId ของหน้าเว็บก่อน (ส่งคืนโดย insert) แล้วเพิ่มลิงก์ไปยังหน้าเว็บ เช่น หากสร้างหน้า 3 หน้าโดยให้ pageId คือ p1, p2, p3 คุณจะเพิ่มลิงก์ด่วนจากหน้าแรกไปยังหน้าอีก 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");
}