অ্যান্ড্রয়েডে টপিক এপিআই প্রয়োগ করুন

সেটআপ

টপিক্স এপিআই বাস্তবায়নের জন্য, আপনাকে প্রথমে আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করতে হবে। নিম্নলিখিত সেটআপ পদক্ষেপগুলি সম্পাদন করতে:

  1. গোপনীয়তা-সংরক্ষণকারী API গুলির সবচেয়ে হালনাগাদ সংস্করণ পেতে সর্বশেষ Android Privacy Sandbox SDK ব্যবহার করুন।

  2. আপনার ম্যানিফেস্টে নিম্নলিখিতগুলি যোগ করুন:

    • অনুমতি: আপনার অ্যাপকে Topics API অ্যাক্সেস করার অনুমতি দিতে ACCESS_ADSERVICES_TOPICS অনুমতি অন্তর্ভুক্ত করুন:

      <uses-permission android:name="android.permission.ACCESS_ADSERVICES_TOPICS" />
      
    • বিজ্ঞাপন পরিষেবা কনফিগারেশন: আপনার ম্যানিফেস্টের <application> উপাদানে একটি বিজ্ঞাপন পরিষেবা কনফিগারেশন ফাইল উল্লেখ করুন।

      <property android:name="android.adservices.AD_SERVICES_CONFIG"
      android:resource="@xml/ad_services_config" />
      

      ম্যানিফেস্টে উল্লেখিত বিজ্ঞাপন পরিষেবা XML রিসোর্স নির্দিষ্ট করুন, যেমন res/xml/ad_services_config.xml । ​​সমস্ত SDK-তে অ্যাক্সেস দেওয়ার জন্য allowAllToAccess অ্যাট্রিবিউট ব্যবহার করুন, অথবা পৃথক SDK-তে অ্যাক্সেস দেওয়ার জন্য allowSdksToAccess অ্যাট্রিবিউট ব্যবহার করুন। বিজ্ঞাপন পরিষেবার অনুমতি এবং SDK অ্যাক্সেস নিয়ন্ত্রণ সম্পর্কে আরও জানুন।

      <ad-services-config>
          <topics allowAllToAccess="true"/>
      </ad-services-config>
      
  3. আপনার SDK-তে Topics API কল করার জন্য Privacy Sandbox-এর মাধ্যমে আপনার বিজ্ঞাপন প্রযুক্তিবিদদের তালিকাভুক্ত করুন । স্থানীয়ভাবে পরীক্ষার জন্য, আপনি নিম্নলিখিত কমান্ডগুলি ব্যবহার করে Topics তালিকাভুক্তি পরীক্ষা অক্ষম করতে পারেন:

    adb shell setprop debug.adservices.disable_topics_enrollment_check true
    
  4. টপিক্স এপিআই-তে অ্যাক্সেস সক্ষম করুন । ডিফল্টরূপে, টপিক্স এপিআই অক্ষম থাকে। আপনাকে ADB কমান্ড ব্যবহার করে এটি সক্ষম করতে হবে:

    adb shell device_config put adservices ppapi_app_signature_allow_list \"\*\"
    adb shell setprop debug.adservices.disable_topics_enrollment_check true
  5. ডিভাইসে বিষয়গুলি কীভাবে পুনরুদ্ধার করতে হয় তার সাথে পরিচিত হতে আমাদের নমুনা অ্যাপের জাভা বা কোটলিন সংস্করণটি ব্যবহার করে আপনার বাস্তবায়ন শুরু করুন।

বিষয়ের একটি সেট অনুরোধ করুন

Topics API এর প্রাথমিক কার্যকারিতা TopicsManager অবজেক্টের ভিতরে থাকা getTopics() পদ্ধতিতে থাকে, যেমনটি এই উদাহরণে দেখানো হয়েছে:

কোটলিন

fun getTopics(
        getTopicsRequest: GetTopicsRequest,
        executor: Executor,
        callback: OutcomeReceiver<GetTopicsResponse, Exception>
    ) { }

জাভা

public void getTopics (@NonNull GetTopicsRequest getTopicsRequest,
    @NonNull Executor executor,
    @NonNull OutcomeReceiver<GetTopicsResponse, Exception> callback)

এই পদ্ধতিটি ব্যবহার করার জন্য, TopicsManager অবজেক্ট এবং টপিক্স ডেটা গ্রহণের জন্য প্রয়োজনীয় প্যারামিটারগুলি ইনিশিয়ালাইজ করুন। GetTopicsRequest টপিক্স API ডেটা পুনরুদ্ধারের জন্য প্রয়োজনীয় তথ্য পাস করে, যার মধ্যে একটি ফ্ল্যাগ অন্তর্ভুক্ত থাকে যা নির্দেশ করে যে কলার পর্যবেক্ষক হিসেবে কাজ করবে কিনা। যখন পর্যবেক্ষক হিসেবে কাজ না করে, তখন getTopics কল পূর্ববর্তী যুগের একটি টপিক ফেরত দেয়, কিন্তু পরবর্তী যুগের জন্য টপিক্স ডেটা প্রভাবিত করবে না। OutcomeReceiver কলব্যাক ফলাফলটিকে অ্যাসিঙ্ক্রোনাসভাবে পরিচালনা করে। উদাহরণস্বরূপ:

কোটলিন

private fun topicGetter() {
    val mContext = baseContext
    val mTopicsManager = mContext.getSystemService(TopicsManager::class.java)
    val mExecutor: Executor = Executors.newCachedThreadPool()
    val shouldRecordObservation = false
    val mTopicsRequestBuilder: GetTopicsRequest.Builder = GetTopicsRequest.Builder()
    mTopicsRequestBuilder.setAdsSdkName(baseContext.packageName)
    mTopicsRequestBuilder.setShouldRecordObservation(shouldRecordObservation)
    mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor,
        mCallback as OutcomeReceiver<GetTopicsResponse, Exception>)
}
private var mCallback: OutcomeReceiver<GetTopicsResponse, java.lang.Exception> =
object : OutcomeReceiver<GetTopicsResponse, java.lang.Exception> {
    override fun onResult(result: GetTopicsResponse) {
        // handle successful result
        val topicsResult = result.topics
        for (i in topicsResult.indices) {
            Log.i("Topic", topicsResult[i].getTopicId().toString())
        }
        if (topicsResult.size == 0) {
            Log.i("Topic", "Returned Empty")
        }
    }
    override fun onError(error: java.lang.Exception) {
        // handle error
        Log.i("Topic", "Error, did not return successfully")
    }
}

জাভা

public void TopicGetter() {
    @NonNull Context mContext = getBaseContext();
    TopicsManager mTopicsManager = mContext.getSystemService(TopicsManager.class);
    Executor mExecutor = Executors.newCachedThreadPool();
    boolean shouldRecordObservation = false;
    GetTopicsRequest.Builder mTopicsRequestBuilder = new GetTopicsRequest.Builder();
    mTopicsRequestBuilder.setAdsSdkName(getBaseContext().getPackageName());
    mTopicsRequestBuilder.setShouldRecordObservation(shouldRecordObservation);
    mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor, mCallback);
}
OutcomeReceiver mCallback = new OutcomeReceiver<GetTopicsResponse, Exception>() {
    @Override
    public void onResult(@NonNull GetTopicsResponse result) {
        //Handle Successful Result
        List<Topic> topicsResult = result.getTopics();
        for (int i = 0; i < topicsResult.size(); i++) {
            Log.i("Topic", topicsResult.get(i).getTopicId().toString());
        }
        if (topicsResult.size() == 0) {
            Log.i("Topic", "Returned Empty");
        }
    }
    @Override
    public void onError(@NonNull Exception error) {
        // Handle error
        Log.i("Topic", "Experienced an error, and did not return successfully");
    }
};

আপনার সেটআপ প্রস্তুত হয়ে গেলে, আপনি getTopics() পদ্ধতি থেকে GetTopicsResponse পেতে কল করতে পারেন:

কোটলিন

mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor,
        mCallback as OutcomeReceiver<GetTopicsResponse, java.lang.Exception>)

জাভা

mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor, mCallback);

এই আমন্ত্রণটি এমন বিষয়বস্তুর একটি তালিকা প্রদান করবে যেখানে ব্যবহারকারীর জন্য প্রাসঙ্গিক ওপেন সোর্স ট্যাক্সোনমির বিষয়গুলির সাথে সঙ্গতিপূর্ণ আইডি মান থাকবে, অথবা একটি প্রাসঙ্গিক ত্রুটি থাকবে। বিষয়গুলি এই উদাহরণের সাথে সাদৃশ্যপূর্ণ হবে:

/Internet & Telecom/Text & Instant Messaging

সম্ভাব্য বিষয়গুলির তালিকার জন্য শ্রেণীবিন্যাস দেখুন যা ফেরত দেওয়া যেতে পারে। এই শ্রেণীবিন্যাসটি ওপেন সোর্স এবং প্রস্তাবিত পরিবর্তনগুলি এই পৃষ্ঠার উপরে প্রতিক্রিয়া বোতাম ব্যবহার করে দাখিল করা যেতে পারে।

পরীক্ষামূলক

টপিক্স এপিআই অ্যাপ ব্যবহারের উপর ভিত্তি করে প্রাসঙ্গিক এবং নতুন বিষয় সরবরাহ করে। এই প্রাথমিক সংস্করণটি এপিআই আচরণের একটি পূর্বরূপ দেয় এবং আমরা ভবিষ্যতের প্রকাশগুলিতে বিষয়গুলির মান উন্নত করব।

পূর্ণ অভিজ্ঞতা পেতে, আমরা একাধিক অ্যাপ সহ একটি পরীক্ষার পরিবেশের পরামর্শ দিচ্ছি যেখানে আপনি getTopics() কল করে বিষয়গুলি কীভাবে নির্বাচন করা হয় তা দেখতে পারেন। GitHub-এর SDK রানটাইম এবং গোপনীয়তা সংরক্ষণকারী APIs রিপোজিটরিতে আপনাকে শুরু করতে সাহায্য করার জন্য পৃথক Android স্টুডিও প্রকল্পগুলির একটি সেট রয়েছে, যার মধ্যে নমুনাগুলি রয়েছে যা দেখায় যে কীভাবে Topics API শুরু করতে হয় এবং কল করতে হয়।

বিষয় গণনা একটি যুগের শেষে সঞ্চালিত হয়। ডিফল্টরূপে, প্রতিটি যুগ ৭ দিন দীর্ঘ, তবে আপনি ফলাফল পেতে এই ব্যবধানটি পরিবর্তন করতে পারেন। এই অ্যান্ড্রয়েড ডিবাগ ব্রিজ শেল কমান্ডটি যুগের দৈর্ঘ্য ৫ মিনিটে ছোট করে:

adb shell device_config put adservices topics_epoch_job_period_ms 300000

আপনি get দিয়ে topics_epoch_job_period_ms মান নিশ্চিত করতে পারেন:

adb shell device_config get adservices topics_epoch_job_period_ms

ম্যানুয়ালি ইপচ কম্পিউটেশন ট্রিগার করতে, নিম্নলিখিত কমান্ডটি কার্যকর করুন:

adb shell cmd jobscheduler run -f com.google.android.adservices.api 2

নমুনা অ্যাপ ব্যবহার করার পাশাপাশি, একটি কোল্যাব রয়েছে যা আপনি বিষয় শ্রেণীবদ্ধকারীর সাথে অ্যাপ তথ্যের বিভিন্ন সমন্বয় পরীক্ষা করতে ব্যবহার করতে পারেন। getTopics কল করার সময় আপনার অ্যাপটি কী ধরণের ফলাফল পেতে পারে তা দেখতে এই কোল্যাবটি ব্যবহার করুন।

এনক্রিপশনের বিশদ বিবরণ

এনক্রিপশন চালু হওয়ার সাথে সাথে, GetTopics() এ কল করলে এখন EncryptedTopic অবজেক্টের তালিকা সহ একটি প্রতিক্রিয়া তৈরি হবে। এই ফলাফলগুলি ডিক্রিপ্ট করার ফলে পূর্ববর্তী Topic অবজেক্টের একই JSON ফর্ম্যাটের একটি অবজেক্ট তৈরি হবে।

Topics API HPKE (হাইব্রিড পাবলিক কী এনক্রিপশন) এর এক শট বাস্তবায়ন সমর্থন করে। আমরা আশা করি যে নথিভুক্ত কলার নথিভুক্তির সময় প্রদত্ত পাবলিক এনক্রিপশন URL এন্ডপয়েন্টে একটি 32-বিট পাবলিক কী হোস্ট করবে। এই কীগুলি Base64 এনকোডেড হবে বলে আশা করা হচ্ছে।

EncryptedTopic অবজেক্টের তিনটি ক্ষেত্র থাকে। পাবলিক কী-এর জন্য সংশ্লিষ্ট প্রাইভেট কী ব্যবহার করে ফেরত আসা বিষয়গুলির তালিকা পাওয়া যেতে পারে।

ডেভেলপমেন্টের উদ্দেশ্যে, আপনি তালিকাভুক্তি পরীক্ষা নিষ্ক্রিয় করে টপিক্স API এনক্রিপশন পরীক্ষা করতে পারেন। এটি আপনার প্রতিক্রিয়া এনক্রিপ্ট করার জন্য API কে টেস্ট পাবলিক কী ব্যবহার করতে বাধ্য করবে। আপনি সংশ্লিষ্ট প্রাইভেট কী ব্যবহার করে এনক্রিপ্ট করা টপিক্স ডিক্রিপ্ট করতে পারেন।

সীমাবদ্ধতা

Topics API-এর জন্য চলমান ক্ষমতার তালিকার জন্য, রিলিজ নোটগুলি দেখুন।

বাগ এবং সমস্যাগুলি রিপোর্ট করুন

আপনার মতামত অ্যান্ড্রয়েডের প্রাইভেসি স্যান্ডবক্সের একটি গুরুত্বপূর্ণ অংশ। আপনার যেকোনো সমস্যা বা অ্যান্ড্রয়েডের প্রাইভেসি স্যান্ডবক্স উন্নত করার জন্য কোনও ধারণা থাকলে আমাদের জানান

পরবর্তী পদক্ষেপ

ব্যবহারকারী এবং বিকাশকারীরা কীভাবে ব্যবহারকারীর পছন্দ এবং প্রয়োজন অনুসারে বিষয় API-কে পরিচালনা এবং কাস্টমাইজ করতে পারে তা জানুন।
Android এ বিষয়গুলি কীভাবে কাজ করে তা জানুন এবং API প্রবাহের মূল ধাপগুলি সম্পর্কে জানুন।

এছাড়াও দেখুন

অ্যান্ড্রয়েডে টপিক এপিআই আরও ভালভাবে বুঝতে আমাদের সংস্থানগুলি দেখুন।