إنشاء تنسيقات متجر مخصصة

يتيح لك "Google Play للأعمال" تصميم وإنشاء تنسيقات المتاجر لعملاء المؤسسة. يمكنك تخصيص تنسيق المتجر عن طريق تجميع التطبيقات في مجموعات، وإعداد صفحات المتجر، وإضافة روابط سريعة توفر الوصول بسهولة إلى صفحات متعددة داخل المتجر.

يجب أولاً أن يوافق أحد المشرفين على جميع التطبيقات التي يتم توفيرها للمستخدم في متجر Google Play للأعمال، وتتم الموافقة عليها للمستخدم وإضافتها إلى مجموعة. (راجع إضافة تطبيقات إلى تنسيق المتجر لمزيد من التفاصيل حول هذه العملية).

عناصر تصميم المتجر

يتألف تنسيق المتجر عادةً من سلسلة من الصفحات المعروضة للمستخدمين في "Google Play للأعمال". يمكن أن تحتوي كل صفحة على مجموعة واحدة أو أكثر من التطبيقات، يُشار إليها باسم المجموعات. تحتوي كل مجموعة على تطبيق واحد أو أكثر.

تتيح لك المجموعات تجميع التطبيقات ذات الصلة. على سبيل المثال، يمكنك إنشاء صفحة للتطبيقات المتعلقة بالعمل تحتوي على مجموعة Essentials ومجموعة Getting Things Done. قد تحتوي مجموعة Essentials على تطبيقات مثل Notepad+ أو "العروض التقديمية من Google" أو غير ذلك. يمكن أن تتضمن مجموعة "إنجاز المهام" تطبيقات مثل OneNote وWunderlist وAny.do وتطبيقات أخرى للتتبُّع والتقويم والتخطيط للاجتماعات (انظر الشكل 1).

عند إنشاء صفحة، يمكنك أيضًا إضافة ما يصل إلى 10 روابط سريعة في أعلى الصفحة. تسمح الروابط السريعة للمستخدمين بالانتقال بسهولة إلى الصفحات الأخرى. على سبيل المثال، يوضح الشكل 1 روابط سريعة لصفحات الأعمال والاتصالات والمالية.

يوضح الشكل 1 بعض العناصر الرئيسية لتخطيط المتجر كما هو موضح على أحد الأجهزة:

نموذج شاشة من جهاز مستخدم تعرض عناصر تصميم المتجر، بما في ذلك الروابط السريعة والصفحات ومجموعات التطبيقات
  • روابط سريعة: هي روابط اختيارية توفّر إمكانية الوصول بسهولة إلى صفحات أخرى. تأخذ الروابط السريعة اسم الصفحة التي تشير إليها.
  • الصفحة: صفحة ذات أسماء قابلة للتمرير عموديًا وتشتمل على مجموعات من التطبيقات.
  • المجموعة (تُسمّى أيضًا التجميع): لوحة عرض دوّارة للتطبيقات قابلة للتمرير مسمّاة أفقيًا. يتم توسيع الصفحة إلى صفحة كاملة إذا كانت الصفحة تحتوي على مجموعة واحدة (أو انقر على "المزيد" لجعلها قابلة للتمرير عموديًا).

حدود عناصر تنسيق المتجر

عند تصميم تخطيطات المتجر وتنفيذها لعملائك، ضع هذه الحدود في الاعتبار (ترجع معظم هذه الحدود إلى مبادئ التصميم الجيد لواجهة المستخدم):

  • 100 تطبيق لكل مجموعة
  • 30 مجموعة لكل صفحة
  • 10 روابط سريعة لكل صفحة
  • 100 صفحة لكل متجر
  • 1,000 منتج (تطبيق موافَق عليه) لكل مؤسسة

أسماء الصفحات والمجموعات المترجَمة

يتوافق تنسيق "متجر Google Play للأعمال" مع الأسماء المترجَمة لصفحات المتجر ومجموعات المتاجر. عند إنشاء صفحة أو مجموعة، يمكنك تقديم قائمة باللغات المتوافقة، مثل علامات لغة IETF والأسماء المترجَمة المرتبطة بها. وإذا لم تكن لغة المستخدم مدرَجة في القائمة المتوافقة، سيختار النظام أقرب لغة مطابقة متاحة. على سبيل المثال، إذا لم يكن en-GB متاحًا، يختار النظام en-US بدلاً من ذلك. إذا لم تتوفر أي نتائج متطابقة، يختار النظام الاسم الأول من القائمة.

إضافة تطبيقات إلى تنسيق المتجر

تتم تلقائيًا إضافة جميع التطبيقات المتوفّرة في policy.productPolicy إذا كانت المؤسسة تستخدم تنسيق المتجر الأساسي. إذا كانت إحدى المؤسسات تستخدم تنسيق متجر مخصّصًا، سيتم عرض التطبيقات المتوفّرة في التنسيق المخصّص فقط وقائمة productPolicy على الجهاز. يمكن البحث عن جميع العناصر في "policy.productPolicy" في "متجر Play".

لكي يتمكّن المستخدم النهائي من تثبيت تطبيق من "متجر Google Play للأعمال"، يجب أن يكون التطبيق متوافقًا مع جهاز المستخدم وأن يستوفي الشرط التالي: * تتم الإضافة إلى قائمة السماح لدى المستخدم (باستخدام policy.productPolicy في مورد الجهاز) وأن يتم ضبط policy.productAvailabilityPolicy على "القائمة البيضاء"، أو ضبط policy.productAvailabilityPolicy على "الكل" (مما يسمح بالبحث عن أي تطبيق وتثبيته).

يمكن للمستخدم استخدام ميزة البحث المضمّنة في "Google Play للأعمال" للعثور على أي تطبيق يستوفي هذه الشروط وتثبيته. ومع ذلك، لن يكون التطبيق مرئيًا إلا في تنسيق المتجر الأساسي أو إذا أضفت التطبيق إلى مجموعة/مجموعة.

التطبيقات التي تم إبطال الموافقة

يمكن للمشرفين إلغاء الموافقة على تطبيق (إبطال الموافقة عليه) في أي وقت. سيظل بالإمكان إضافة التطبيقات التي تم إبطال الموافقة عليها إلى المجموعات وقوائم السماح للمستخدمين، إلا أنّه لن يتمكّن المستخدمون من الاطّلاع عليها أو لن يتمكنوا من تثبيتها من "متجر Google Play للأعمال". إذا تمت الموافقة مجددًا على تطبيق تم إبطال الموافقة عليه، ستتم إتاحة التطبيق للمستخدمين مرة أخرى في "متجر Google Play للأعمال".

التصميم الأساسي للمتجر

بشكل افتراضي، يتم تفعيل التنسيق الأساسي للمتجر لكل عميل من عملائك. يتكون التخطيط الأساسي من صفحة واحدة ومجموعة واحدة تعرض 1000 تطبيق بحد أقصى. يتم ترتيب التطبيقات في الصفحة حسب قيمتها product ID. إذا أنشأت تنسيق متجر مخصّصًا (من خلال ضبط storeLayoutType =“custom”)، سيتم إيقاف تنسيق المتجر الأساسي.

إنشاء تنسيقات مخصصة للمتجر

يمكن لخدمات إدارة الخدمات الجوّالة للمؤسسات (EMM) إنشاء تنسيقات متاجر مخصّصة لكل عميل من عملاء المؤسسة. تتيح لك تخطيطات المتجر المخصصة إعداد مجموعات من التطبيقات وإضافة مجموعات معينة إلى الصفحات وتحديد روابط سريعة. ولأنّك تحدّد التطبيقات التي يتألف منها كل مجموعة، يمكنك استخدام المجموعات لتجميع التطبيقات ذات الصلة (على سبيل المثال، "Essentials" و"Getting Things Done"). يطّلع المستخدمون فقط على التطبيقات التي وافق المشرف على أذوناتها.

يحتوي مرجع واجهة برمجة التطبيقات لإدارة الخدمات الجوّالة للمؤسسات (EMM) في Google Play على معلومات عن الموارد والطرق المرتبطة التي تستخدمها لإنشاء تنسيق متجر مخصّص، وعلى وجه التحديد، Storeformatpages وStoreLayoutclusters. ترشدك الخطوات الموضحة في الأقسام أدناه إلى مثال أساسي.

مهام البرمجة

لإنشاء تنسيق مخصّص على "متجر Google Play للأعمال" لعملائك، يجب استيفاء الشروط التالية:

  1. إنشاء صفحة
  2. أنشئ مجموعة واحدة أو أكثر داخل الصفحات
  3. تعيين الصفحة الرئيسية

على الأقل، يجب إنشاء صفحة واحدة على الأقل تتألّف من مجموعة واحدة لتخطيط المتجر، ويجب أن تحتوي المجموعة على تطبيق واحد على الأقل. وعليك أيضًا ضبط الصفحة الرئيسية. إذا أنشأت أكثر من صفحة واحدة، يتوفّر لك خيار ضبط روابط سريعة لعرضها في أعلى كل صفحة.

في ما يلي توضيح لمهام البرمجة الخاصة بإنشاء تنسيق "متجر Play للأعمال" مخصّص أدناه، يتبعها مثال كامل لتصميم المتجر.

إنشاء صفحة

تتألف الصفحة من مجموعة عنقودية واحدة أو أكثر. تحتوي كل مجموعة على تطبيق واحد على الأقل. يتم إنشاء صفحات لمؤسسات محدَّدة، لذا عليك استدعاء العمليات في مثيلات مؤسسات محدَّدة (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();
}

تعيين الصفحة الرئيسية

الصفحة الأولى التي يتم عرضها في 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();
}

تظهر الروابط السريعة في أعلى كل صفحة، ما يتيح للمستخدمين التنقّل بسهولة بين الصفحات في المتجر. لاستخدام الروابط السريعة، عليك أولاً الحصول على pageId للصفحة (التي تم إرجاعها بواسطة insert) وإضافة الرابط إلى الصفحة. على سبيل المثال، إذا أنشأت ثلاث صفحات تكون pageId فيها p1 وp2 وp3، فيمكنك إضافة روابط سريعة من الصفحة الأولى إلى الصفحتين الأخريين باستخدام ما يلي:

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

مثال

إليك مثال كامل ينشئ متجرًا أساسيًا يتكون من ثلاث صفحات مرتبطة ببعضها البعض. تتكون كل صفحة من مجموعات التطبيقات المتشابهة. يتم إنشاء كل صفحة من خلال تحديد 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");
}