إطار iframe لعمليات الضبط المُدارة

إنّ إطار iframe لعمليات الضبط المُدارة هو واجهة مستخدم قابلة للتضمين تتيح لمشرفي تكنولوجيا المعلومات حفظ إعدادات الضبط المُدارة لتطبيق وتعديلها وحذفها. ويمكنك مثلاً عرض زر (أو عنصر مشابه في واجهة المستخدم) في صفحة إعدادات أو صفحة تفاصيل التطبيق التي تفتح إطار iframe.

الإجراءات المتاحة لمشرفي تكنولوجيا المعلومات من إطار iframe

إطار iframe في "mcm"
الشكل 1. مثال على إطار iframe لعمليات الضبط المُدارة لـ Gmail.

ضبط الملفات الشخصية للإعداد وحفظها

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

تعديل الملفات الشخصية للإعدادات

يستطيع إطار iframe عرض ملفات التهيئة المحفوظة. يمكن لمشرفي تكنولوجيا المعلومات تعديل الإعدادات داخل الملف الشخصي وحفظ التغييرات.

حذف الملفات الشخصية للإعدادات

يمكن لمشرفي تكنولوجيا المعلومات حذف الملفات الشخصية للإعدادات من إطار iframe. هذه الميزة معطلة بشكل افتراضي.

عرض إطار iframe لعمليات الضبط المُدارة في وحدة التحكّم

إنشاء رمز مميّز للويب

استخدِم Enterprises.createWebToken لإنشاء رمز ويب مميَّز يحدِّد المؤسسة. يجب تضمين الرمز المميز المعروض، مع المعلمات الأخرى، عند عرض iframe في وحدة التحكم لديك. يوضِّح المثال التالي كيفية استرداد الرمز المميّز باستخدام مكتبة برامج واجهة برمجة تطبيقات إدارة الخدمات الجوّالة للمؤسسات (EMM) في Google Play للغة Java.

public AdministratorWebToken getAdministratorWebToken(
    String enterpriseId,
    AdministratorWebTokenSpec tokenSpec) throws IOException {
  return androidEnterprise
     .enterprise()
     .createWebToken(enterpriseId, tokenSpec)
     .execute();
}

عرض إطار iframe

في ما يلي مثال على كيفية عرض إطار iframe لعمليات الضبط المُدارة:

<script src="https://apis.google.com/js/api.js"></script>
<div id="container" style="width: 1000px; height: 1000px"></div>
<script>
  gapi.load('gapi.iframes', function() {
    var options = {
      'url': 'https://play.google.com/managed/mcm?token=web_token&packageName=app_package_name',
      'where': document.getElementById('container'),
      'attributes': { style: 'height:1000px', scrolling: 'yes'}
    }

    var iframe = gapi.iframes.getContext().openChild(options);
  });
</script>

معلمات عنوان URL

يسرد الجدول أدناه جميع المعلمات المتاحة لعنوان URL لإطار iframe.

المَعلمةمطلوبةالوصف
token نعم الرمز المميّز الذي تم عرضه من "Enterprises.createWebToken"
packageName نعم معرِّف المنتج للتطبيق. على سبيل المثال، com.google.android.gm.
mcmId لا رقم تعريف ملف شخصي مُدار لعمليات الضبط.
canDelete لا إذا كانت القيمة TRUE، يؤدي ذلك إلى تفعيل زر في إطار iframe يسمح لمشرفي تكنولوجيا المعلومات بحذف الملف الشخصي لعمليات الضبط المُدارة. وإذا كانت FALSE (القيمة التلقائية)، يكون الزر غير مفعَّل.
locale لا تمثّل هذه السمة علامة لغة BCP 47 صحيحة وتُستخدَم لترجمة المحتوى في إطار iframe. إذا لم يتم تحديد القيمة، ستكون القيمة التلقائية en_US.

أحداث Iframe

يجب أيضًا معالجة الأحداث التالية كجزء من عملية الدمج.

حدثالوصف
onconfigupdated يحدّث المستخدم ملفًا شخصيًا حاليًا لعمليات الضبط المُدارة أو ينشئ ملفًا شخصيًا جديدًا. ويؤدي ذلك إلى عرض كائن يحتوي على:
{
  "mcmId": The ID of the managed configurations profile.
  "name": The name of the updated or newly created managed configurations profile.
}
onconfigdeleted يحذف المستخدم ملفًا شخصيًا حاليًا لعمليات الضبط المُدارة. ويؤدي ذلك إلى عرض كائن يحتوي على:
{
  "mcmId": The ID of the managed configurations profile.
}
.

يعرض النموذج أدناه كيفية الاستماع إلى صوت onconfigupdated، كمثال:

iframe.register('onconfigupdated', function(event) {
  console.log(event);
}, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);

تعديلات على مخطط عمليات الضبط المُدارة لأحد التطبيقات

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

تطبيق عمليات الضبط المُدارة على أجهزة المستخدمين

للتعرّف على كيفية تطبيق عمليات الضبط المُدارة على أجهزة المستخدمين، يُرجى الاطّلاع على تطبيق عمليات الضبط المُدارة.


فهم سلوك الاختيار أو إلغاء الاختيار

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

يوضّح القسم أدناه كيفية عمل إطار iframe لعمليات الضبط المُدارة مع نمط إلغاء الاختيار الجديد هذا وما يمكن لمطوّري البرامج توقُّع أن يتم إرساله كجزء من عملية الضبط المُدارة.

استخدام القيمة التلقائية لأحد قيود التطبيق

في حال كانت قيود التطبيق من النوع bool أو choice أو عدد صحيح أو تحديد متعدد أو سلسلة بقيمة تلقائية، سيتم تطبيق القيمة التلقائية كقيمة القيد على التطبيق عندما يحفظ المشرفون الإعدادات المُدارة بدون تطبيق أي تغييرات على قيود التطبيق هذه.

على سبيل المثال، باستخدام مخطط قيود التطبيق التالي:

"restrictions": [{
    "key": "bool_key",
    "restrictionType": "bool",
    "defaultValue": {
        "type": "bool",
        "valueBool": false
    }
}]

سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [{
    "key": "bool_key",
    "restrictionType": "bool",
    "value": {
        "type": "bool",
        "valueBool": false
    }
}]

بدون استخدام القيم التلقائية لقيود التطبيق

في حال عدم توفير قيمة تلقائية لقيود التطبيق من النوع bool أو choice أو عدد صحيح أو تحديد متعدد أو سلسلة .لن يتم تضمين قيود التطبيق هذه عندما يحفظ المشرفون الإعدادات المُدارة بدون تطبيق أي تغييرات على قيود التطبيق هذه.

على سبيل المثال، باستخدام مخطط قيود التطبيق التالي:

"restrictions": [{
    "key": "bool_key",
    "restrictionType": "bool"
    // defaultValue absent.
}]

سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [
    // Empty
]

استخدام الحزم داخل المخطط

ينطبق هذا القسم على قيود الحزم للتطبيقات:

وجود قيد تطبيق فرعي واحد على الأقل مع قيمة تلقائية في قيد تطبيق على الحِزمة

إذا ضمن القيد ضمن حزمة تطبيق واحد على الأقل من قيود التطبيق الفرعي من النوع bool أو choice أو عدد صحيح أو تحديد متعدد أو سلسلة بقيمة تلقائية، سيتم تطبيق القيمة التلقائية عندما يحفظ المشرفون الإعدادات المُدارة بدون تطبيق أي تغييرات عليها.

"restrictions": [{
    "key": "bundle_key",
    "restrictionType": "bundle",
    "nestedRestriction": [{
            "key": "bool_key_1",
            "restrictionType": "bool",
            "defaultValue": {
                "type": "bool",
                "valueBool": false
            }
        },
        {
            "key": "bool_key_2",
            "restrictionType": "bool"
            // defaultValue absent.
        }
    ]
}]

سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [{
    "key": "bundle_key",
    "restrictionType": "bundle",
    "nestedRestriction": [{
            "key": "bool_key_1",
            "restrictionType": "bool",
            "value": {
                "type": "bool",
                "valueBool": false
            }
        },
        // The bool_key_2 child app restriction is not included.
    ]
}]

جميع قيود التطبيقات الفرعية بدون القيَم التلقائية

إذا لم يتم تضمين جميع قيود التطبيق الفرعية ضمن حزمة التطبيق ضمن القيد الخاص بالتطبيقات الفرعية للنوع bool أو choice أو عدد صحيح أو تحديد متعدد أو سلسلة بقيمة تلقائية، لن يتم تضمين قيد التطبيق حزمة عندما يحفظ المشرفون الإعدادات المُدارة بدون تطبيق أي تغييرات على هذا القيد.

على سبيل المثال، باستخدام مخطط قيود التطبيق التالي:

"restrictions": [{
    "key": "bundle_key",
    "restrictionType": "bundle",
    "nestedRestriction": [{
            "key": "bool_key_1",
            "restrictionType": "bool",
            // defaultValue absent.
        },
        {
            "key": "bool_key_2",
            "restrictionType": "bool"
            // defaultValue absent.
        }
    ]
}]

سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [
    // Empty
]

استخدام bundle_array ضمن المخطط

ينطبق هذا القسم على قيود تطبيقات bundle_array. ليست ذات صلة إذا كانت قيود التطبيق الفرعي ذات النوع bool أو choice أو عدد صحيح أو تحديد متعدد أو سلسلة تحتوي على قيم تلقائية.

على سبيل المثال، باستخدام مخطط قيود التطبيق التالي:

"restrictions": [{
    "key": "bundle_array_key",
    "restrictionType": "bundleArray",
    "nestedRestriction": [{
        "key": "bundle_key",
        "restrictionType": "bundle",
        "nestedRestriction": [{
            "key": "bool_key",
            "restrictionType": "bool",
            "defaultValue": {
                "type": "bool",
                "valueBool": true
            }
        }]
    }]
}]

تحتوي على مجموعة حِزمة واحدة على الأقل في قيد التطبيق bundle_array.

في حال ضبط مجموعة واحدة على الأقل، سيتم تضمين قيد التطبيق bundle_array عندما يحفظ المشرفون الإعدادات المُدارة.

سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [{
    "key": "bundle_array_key",
    "restrictionType": "bundleArray",
    "nestedRestriction": [{
        "key": "bundle_key",
        "restrictionType": "bundle",
        "nestedRestriction": [{
            "key": "bool_key",
            "restrictionType": "bool",
            "value": {
                "type": "bool",
                "valueBool": true
            }
        }]
    }]
}]

لا تتوفّر مجموعات حِزم في قيد التطبيق bundle_array.

لن يتم تضمين قيد التطبيق bundle_array عندما يحفظ المشرفون الإعدادات المُدارة بدون إضافة مجموعة مجموعة. سيتم إرسال قيود التطبيق إلى الجهاز على النحو التالي:

"restrictions": [
    // Empty
]