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

সেটআপ

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

  1. গোপনীয়তা-সংরক্ষণকারী API-এর সবচেয়ে আপ-টু-ডেট সংস্করণ পেতে সর্বশেষ Android গোপনীয়তা স্যান্ডবক্স SDK ব্যবহার করুন।

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

    • অনুমতি: আপনার অ্যাপকে বিষয় এপিআই অ্যাক্সেস করার অনুমতি দিতে 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-এ বিষয় API কল করতে গোপনীয়তা স্যান্ডবক্সের সাথে আপনার বিজ্ঞাপন প্রযুক্তি নথিভুক্ত করুন । স্থানীয়ভাবে পরীক্ষা করার জন্য, আপনি নিম্নলিখিত কমান্ডের সাহায্যে বিষয় তালিকাভুক্তি পরীক্ষা অক্ষম করতে পারেন:

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

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

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

টপিক্স এপিআই-এর প্রাথমিক কার্যকারিতা 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

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

টেস্টিং

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

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

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

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 বিন্যাস সহ একটি অবজেক্ট আসবে।

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

EncryptedTopic অবজেক্টের 3টি ক্ষেত্র রয়েছে। প্রত্যাবর্তিত বিষয়গুলির তালিকা পাবলিক কী-এর জন্য সংশ্লিষ্ট ব্যক্তিগত কী ব্যবহার করে প্রাপ্ত করা যেতে পারে।

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

সীমাবদ্ধতা

বিষয় API-এর জন্য অগ্রগতি ক্ষমতার তালিকার জন্য, রিলিজ নোটগুলি পড়ুন।

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

আপনার প্রতিক্রিয়া Android-এ গোপনীয়তা স্যান্ডবক্সের একটি গুরুত্বপূর্ণ অংশ। Android-এ গোপনীয়তা স্যান্ডবক্সের উন্নতির জন্য আপনার খুঁজে পাওয়া যেকোন সমস্যা বা ধারণা সম্পর্কে আমাদের জানান

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

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

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

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