AMAPI SDK-এর সাথে একীভূত করা, AMAPI SDK-এর সাথে একীভূত করা৷

AMAPI SDK একটি EMM-নির্দিষ্ট এক্সটেনশন অ্যাপকে Android ডিভাইস নীতির সাথে সরাসরি যোগাযোগ করতে সক্ষম করে। বর্তমানে এটি Commands স্থানীয় নির্বাহের জন্য সমর্থন এবং শুধুমাত্র ClearAppData কমান্ড অন্তর্ভুক্ত করে। SDK-এর সাথে একীভূত হতে নিম্নলিখিত পদক্ষেপগুলি গ্রহণ করা আবশ্যক:

  1. এক্সটেনশন অ্যাপে লাইব্রেরি যোগ করুন
  2. প্রয়োজন অনুযায়ী কমান্ড ইস্যু করতে প্রদত্ত API ব্যবহার করুন।
  3. ক্যোয়ারী এলিমেন্ট যোগ করুন , যদি টার্গেট SDK >= 30 হয়।
  4. ঐচ্ছিকভাবে, আপনি কমান্ড স্ট্যাটাস পরিবর্তন কলব্যাক শুনতে পরিষেবার বাস্তবায়ন প্রদান করতে পারেন।
  5. এক্সটেনসিবিলিটি নীতি সহ ডিভাইস সরবরাহ করুন।

পূর্বশর্ত

  • নিশ্চিত করুন যে এক্সটেনশন অ্যাপের minSdkVersion অন্তত API লেভেল 21-এ সেট করা আছে।

এক্সটেনশন অ্যাপ্লিকেশনে লাইব্রেরি যোগ করা হচ্ছে

আপনার শীর্ষ-স্তরের build.gradle ফাইলে Google Maven সংগ্রহস্থল যোগ করুন যাতে প্রাসঙ্গিক মডিউলগুলিতে SDK লাইব্রেরি রয়েছে এবং লাইব্রেরিতে নির্ভরতা যোগ করুন:

repositories {
  ...
  google()
}

তারপর আপনার মডিউলের নির্ভরতা ব্লকে লাইব্রেরি যোগ করুন:

dependencies {
  implementation 'com.google.android.libraries.enterprise.amapi:amapi:1.0.0'
}

Android ডিভাইস নীতিতে অনুরোধ পাঠান

এখন এডিপিতে অনুরোধ পাঠানো সম্ভব হবে। নিম্নলিখিত অনুরোধগুলি সমর্থিত।

ইস্যু কমান্ড

এক্সটেনশন অ্যাপ ADP ব্যবহার করে জারি করা কমান্ডের জন্য অনুরোধ করতে পারে। IssueCommandRequest-এ রিকোয়েস্ট অবজেক্ট থাকে যা জারি করা কমান্ড এবং নির্দিষ্ট প্যারামিটারের বিস্তারিত ধারণ করে। এটি সম্পর্কে আরও তথ্য Javadoc এ পাওয়া যাবে।

নিম্নলিখিত স্নিপেটটি দেখায় কিভাবে প্যাকেজের ডেটা সাফ করার জন্য একটি অনুরোধ জারি করতে হয়:

import android.util.Log;
...
import com.google.android.managementapi.commands.LocalCommandClientFactory
import com.google.android.managementapi.commands.model.Command
import com.google.android.managementapi.commands.model.GetCommandRequest
import com.google.android.managementapi.commands.model.IssueCommandRequest
import com.google.android.managementapi.commands.model.IssueCommandRequest.ClearAppsData
import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;

...
  void issueClearAppDataCommand(ImmutableList<String> packageNames) {
    Futures.addCallback(
        LocalCommandClientFactory.create(getContext())
            .issueCommand(createClearAppRequest(packageNames)),
        new FutureCallback<Command>() {
          @Override
          public void onSuccess(Command result) {
            // Process the returned command result here
            Log.i(TAG, "Successfully issued command");
          }

          @Override
          public void onFailure(Throwable t) {
            Log.e(TAG, "Failed to issue command", t);
          }
        },
        MoreExecutors.directExecutor());
  }

  IssueCommandRequest createClearAppRequest(ImmutableList<String> packageNames) {
    return IssueCommandRequest.builder()
        .setClearAppsData(
            ClearAppsData.builder()
                .setPackageNames(packageNames)
                .build()
        )
        .build();
  }
...

উপরের উদাহরণটি নির্দিষ্ট প্যাকেজগুলির জন্য একটি পরিষ্কার অ্যাপ ডেটা অনুরোধ জারি করা এবং কমান্ডটি সফলভাবে জারি না হওয়া পর্যন্ত অপেক্ষা করা দেখায়। সফলভাবে ইস্যু করা হলে একটি কমান্ড অবজেক্ট বর্তমান কমান্ডের স্থিতি এবং কমান্ড আইডি সহ ফেরত দেওয়া হবে যা পরবর্তীতে দীর্ঘ চলমান কমান্ডের স্থিতি অনুসন্ধান করতে ব্যবহার করা যেতে পারে।

কমান্ড পান

এক্সটেনশন অ্যাপটি পূর্বে জারি করা কমান্ড অনুরোধের অবস্থাও জিজ্ঞাসা করতে পারে। একটি কমান্ডের স্থিতি পুনরুদ্ধার করতে, আপনার কমান্ড আইডি প্রয়োজন হবে (ইস্যু কমান্ড অনুরোধ থেকে উপলব্ধ)। নিম্নলিখিত স্নিপেট ADP-তে একটি GetCommand অনুরোধ পাঠানো দেখায়।

import android.util.Log;
...
import com.google.android.managementapi.commands.LocalCommandClientFactory;
...
import com.google.android.managementapi.commands.model.GetCommandRequest;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;

...
  void getCommand(String commandId) {
    Futures.addCallback(
        LocalCommandClientFactory.create(getApplication())
            .getCommand(GetCommandRequest.builder().setCommandId(commandId).build()),
        new FutureCallback<Command>() {
          @Override
          public void onSuccess(Command result) {
            // Process the returned command result here
            Log.i(Constants.TAG, "Successfully issued command");
          }

          @Override
          public void onFailure(Throwable t) {
            Log.e(Constants.TAG, "Failed to issue command", t);
          }
        },
        MoreExecutors.directExecutor());
  }
  ...

প্রশ্ন উপাদান যোগ করা হচ্ছে

যদি আপনার অ্যাপটি SDK 30 এবং তার উপরে লক্ষ্য করে, তাহলে এটি ADP-এর সাথে ইন্টারঅ্যাক্ট করবে তা নির্দিষ্ট করতে ম্যানিফেস্টে ক্যোয়ারী উপাদান প্রয়োজন।

<queries>
    <package android:name="com.google.android.apps.work.clouddpc" />
</queries>

আরও তথ্যের জন্য অ্যান্ড্রয়েডে প্যাকেজ দৃশ্যমানতা ফিল্টারিং দেখুন৷

কমান্ড স্থিতি পরিবর্তন কলব্যাক শুনুন

  1. কমান্ড স্থিতি পরিবর্তনগুলি CommandListener-কে অবহিত করা হয়, আপনার অ্যাপে এই ইন্টারফেসটি প্রয়োগ করুন এবং প্রাপ্ত স্থিতি আপডেটগুলি কীভাবে পরিচালনা করবেন তার বাস্তবায়ন প্রদান করুন।
  2. NotificationReceiverService প্রসারিত করুন এবং CommandListener উদাহরণ প্রদান করুন।
  3. অ্যান্ড্রয়েড ম্যানেজমেন্ট এপিআই নীতিতে বর্ধিত NotificationReceiverService-এর ক্লাসের নাম উল্লেখ করুন (পলিসি কনফিগারেশন দেখুন)।

    import com.google.android.managementapi.commands.CommandListener;
    import com.google.android.managementapi.notification.NotificationReceiverService;
    
    ...
    
    public class SampleCommandService extends NotificationReceiverService {
    
      @Override
      protected void setupInjection() {
        // (Optional) If using DI and needs initialisation then use this method.
      }
    
      @Override
      public CommandListener getCommandListener() {
        // return the concrete implementation from previous step
        return ...;
      }
    }
    
  4. আপনার AndroidManifest.xml-এ পরিষেবাটি যোগ করুন এবং নিশ্চিত করুন যে এটি রপ্তানি হয়েছে।

    <service
     android:name = ".notification.SampleCommandService"
     android:exported = "true" />
    

নীতি কনফিগারেশন

 "applications": [{
   "packageName": "com.amapi.extensibility.demo",
   ...
   "extensionConfig": {
     "signingKeyFingerprintsSha256": [
       // Include signing key of extension app
     ],
     // Optional if callback is implemented
     "notificationReceiver": "com.amapi.extensibility.demo.notification.SampleCommandService"
   }
 }]

পরীক্ষামূলক

অংশ পরিক্ষাকরণ

LocalCommandClient একটি ইন্টারফেস এবং এইভাবে পরীক্ষা সহজেই একটি পরীক্ষাযোগ্য বাস্তবায়ন প্রদান করতে দেয়।

ইন্টিগ্রেশন টেস্টিং

Android ডিভাইস নীতি পরীক্ষা করার জন্য নিম্নলিখিত তথ্যের প্রয়োজন হবে:

  1. এক্সটেনশন অ্যাপের প্যাকেজের নাম।
  2. অ্যাপ প্যাকেজের সাথে যুক্ত স্বাক্ষরের হেক্স-এনকোডেড SHA-256 হ্যাশ।
  3. ঐচ্ছিকভাবে, যদি কলব্যাক পরীক্ষা করা হয় - কলব্যাক সমর্থন করার জন্য নতুন চালু করা পরিষেবা থেকে পরিষেবাটির সম্পূর্ণ যোগ্য নাম। (উদাহরণে CommandService-এর সম্পূর্ণ যোগ্য নাম)।