অ্যান্ড্রয়েড v3 (লেগেসি) - ওভারভিউ

এই বিকাশকারী নির্দেশিকা বর্ণনা করে কিভাবে একটি মোবাইল অ্যাপ্লিকেশনে Google ট্যাগ ম্যানেজার প্রয়োগ করতে হয়।

ভূমিকা

Google ট্যাগ ম্যানেজার ডেভেলপারদের তাদের মোবাইল অ্যাপ্লিকেশনগুলিতে কনফিগারেশন মান পরিবর্তন করতে সক্ষম করে Google ট্যাগ ম্যানেজার ইন্টারফেস ব্যবহার করে অ্যাপ মার্কেটপ্লেসগুলিতে অ্যাপ্লিকেশন বাইনারিগুলিকে পুনঃনির্মাণ এবং পুনরায় জমা না করেই৷

এটি আপনার অ্যাপ্লিকেশনের যেকোনো কনফিগারেশন মান বা পতাকা পরিচালনার জন্য দরকারী যা আপনাকে ভবিষ্যতে পরিবর্তন করতে হতে পারে, যার মধ্যে রয়েছে:

  • বিভিন্ন UI সেটিংস এবং ডিসপ্লে স্ট্রিং
  • মাপ, অবস্থান, বা আপনার অ্যাপ্লিকেশনে পরিবেশিত বিজ্ঞাপনের ধরন
  • গেম সেটিংস

নিয়ম ব্যবহার করে রানটাইমে কনফিগারেশন মানগুলিও মূল্যায়ন করা যেতে পারে, গতিশীল কনফিগারেশন সক্ষম করে যেমন:

  • বিজ্ঞাপন ব্যানারের আকার নির্ধারণ করতে পর্দার আকার ব্যবহার করা
  • UI উপাদানগুলি কনফিগার করতে ভাষা এবং অবস্থান ব্যবহার করে৷

Google TagManager এছাড়াও অ্যাপ্লিকেশনগুলিতে ট্র্যাকিং ট্যাগ এবং পিক্সেলগুলির গতিশীল বাস্তবায়ন সক্ষম করে৷ বিকাশকারীরা গুরুত্বপূর্ণ ইভেন্টগুলিকে একটি ডেটা স্তরে ঠেলে দিতে পারে এবং পরে সিদ্ধান্ত নিতে পারে কোন ট্র্যাকিং ট্যাগ বা পিক্সেলগুলি ফায়ার করা উচিত৷ TagManager বর্তমানে নিম্নলিখিত ট্যাগ সমর্থন করে:

  • গুগল মোবাইল অ্যাপ বিশ্লেষণ
  • কাস্টম ফাংশন কল ট্যাগ

আপনি শুরু করার আগে

এই শুরু করার নির্দেশিকা ব্যবহার করার আগে, আপনার নিম্নলিখিতগুলির প্রয়োজন হবে:

আপনি যদি Google ট্যাগ ম্যানেজারে নতুন হয়ে থাকেন, তাহলে এই নির্দেশিকাটি চালিয়ে যাওয়ার আগে আমরা আপনাকে কন্টেনার, ম্যাক্রো এবং নিয়ম (সহায়তা কেন্দ্র) সম্পর্কে আরও জানুন

শুরু করা

এই বিভাগটি ডেভেলপারদের একটি সাধারণ ট্যাগ ম্যানেজার ওয়ার্কফ্লো এর মাধ্যমে গাইড করবে:

  1. আপনার প্রোজেক্টে Google ট্যাগ ম্যানেজার SDK যোগ করুন
  2. ডিফল্ট কন্টেইনার মান সেট করুন
  3. কন্টেইনার খুলুন
  4. কন্টেইনার থেকে কনফিগারেশন মান পান
  5. ডেটা লেয়ারে ইভেন্টগুলি পুশ করুন
  6. প্রিভিউ এবং কন্টেইনার প্রকাশ করুন

1. আপনার প্রোজেক্টে Google ট্যাগ ম্যানেজার SDK যোগ করা

Google ট্যাগ ম্যানেজার SDK ব্যবহার করার আগে, আপনাকে SDK প্যাকেজটি আনজিপ করতে হবে এবং আপনার প্রকল্পের বিল্ড পাথে লাইব্রেরি যোগ করতে হবে এবং আপনার AndroidManifest.xml ফাইলে অনুমতি যোগ করতে হবে।

প্রথমে, আপনার প্রকল্পের /libs ফোল্ডারে Google ট্যাগ ম্যানেজার লাইব্রেরি যোগ করুন।

এরপরে, নিম্নলিখিত অনুমতিগুলি ব্যবহার করতে আপনার AndroidManifest.xml ফাইল আপডেট করুন:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

2. আপনার প্রকল্পে একটি ডিফল্ট কন্টেইনার ফাইল যোগ করা

Google ট্যাগ ম্যানেজার আপনার অ্যাপ্লিকেশনের প্রথম রানে একটি ডিফল্ট ধারক ব্যবহার করে। অ্যাপটি নেটওয়ার্কের মাধ্যমে একটি নতুন কন্টেইনার পুনরুদ্ধার করতে সক্ষম না হওয়া পর্যন্ত ডিফল্ট ধারকটি ব্যবহার করা হবে৷

ডাউনলোড করতে এবং আপনার অ্যাপ্লিকেশনে একটি ডিফল্ট ধারক বাইনারি যোগ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. গুগল ট্যাগ ম্যানেজার ওয়েব ইন্টারফেসে সাইন ইন করুন।
  2. আপনি যে ধারকটি ডাউনলোড করতে চান তার সংস্করণটি নির্বাচন করুন।
  3. কন্টেইনার বাইনারি পুনরুদ্ধার করতে ডাউনলোড বোতামে ক্লিক করুন।
  4. নিম্নলিখিত পাথে বাইনারি ফাইল যোগ করুন: < project-root >/assets/tagmanager/

ডিফল্ট ফাইলের নাম কনটেইনার আইডি হওয়া উচিত (উদাহরণস্বরূপ GTM-1234 )। একবার আপনি বাইনারি ফাইলটি ডাউনলোড করার পরে, আপনি সঠিক নামকরণের নিয়ম অনুসরণ করছেন তা নিশ্চিত করতে ফাইলের নাম থেকে সংস্করণ প্রত্যয়টি সরাতে ভুলবেন না।

যদিও বাইনারি ফাইল ব্যবহার করা বাঞ্ছনীয়, যদি আপনার কন্টেইনারে নিয়ম বা ট্যাগ না থাকে, তাহলে আপনি পরিবর্তে একটি সাধারণ JSON ফাইল ব্যবহার করতে পারেন। ফাইলটি আপনার অ্যান্ড্রয়েড প্রোজেক্টের একটি নতুন /assets/tagmanager ফোল্ডারে থাকা আবশ্যক এবং এই নামকরণের নিয়ম অনুসরণ করা উচিত: <Container_ID>.json । উদাহরণস্বরূপ, যদি আপনার কন্টেইনার আইডি হয় GTM-1234 , তাহলে আপনার ডিফল্ট কন্টেইনার মানগুলি /assets/tagmanager/GTM-1234.json এ যোগ করা উচিত।

3. একটি ধারক খোলা

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

অ্যান্ড্রয়েডে একটি কন্টেইনার খোলার সবচেয়ে সহজ উপায় হল ContainerOpener.openContainer(..., Notifier notifier) ​​ব্যবহার করে, নিচের উদাহরণের মতো:

import com.google.tagmanager.Container;
import com.google.tagmanager.ContainerOpener;
import com.google.tagmanager.ContainerOpener.OpenType;
import com.google.tagmanager.TagManager;

import android.app.Activity;
import android.os.Bundle;

public class RacingGame {

  // Add your public container ID.
  private static final String CONTAINER_ID = "GTM-YYYY";

  volatile private Container mContainer;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TagManager mTagManager = TagManager.getInstance(this);

    // The container is returned to containerFuture when available.
    ContainerOpener.openContainer(
        mTagManager,                            // TagManager instance.
        CONTAINER_ID,                           // Tag Manager Container ID.
        OpenType.PREFER_NON_DEFAULT,            // Prefer not to get the default container, but stale is OK.
        null,                                   // Time to wait for saved container to load (ms). Default is 2000ms.
        new ContainerOpener.Notifier() {        // Called when container loads.
          @Override
          public void containerAvailable(Container container) {
            // Handle assignment in callback to avoid blocking main thread.
            mContainer = container;
          }
        }
    );
    // Rest of your onCreate code.
  }
}

এই উদাহরণে, ContainerOpener.openContainer(..., Notifier notifier) ​​স্থানীয় স্টোরেজ থেকে একটি সংরক্ষিত কন্টেইনারের অনুরোধ করতে ব্যবহার করা হয়। containerAvailable কলব্যাকে mContainer এর অ্যাসাইনমেন্ট পরিচালনা করে, আমরা নিশ্চিত করি যে মূল থ্রেডটি ব্লক করা হয়নি। যদি সংরক্ষিত কন্টেইনারটি 12 ঘন্টার বেশি পুরানো হয়, তাহলে কলটি অ্যাসিঙ্ক্রোনাসভাবে নেটওয়ার্কে একটি নতুন কন্টেইনার পুনরুদ্ধার করার জন্য একটি অনুরোধের সময় নির্ধারণ করবে।

এই নমুনা বাস্তবায়ন ContainerOpener সুবিধার ক্লাস ব্যবহার করে একটি কন্টেইনার থেকে মানগুলি খুলতে এবং পুনরুদ্ধার করার সবচেয়ে সহজ উপায় উপস্থাপন করে। আরো উন্নত বাস্তবায়ন বিকল্পের জন্য, উন্নত কনফিগারেশন দেখুন।

4. কনটেইনার থেকে কনফিগারেশন মান পাওয়া

একবার ধারকটি খোলা হলে, get<type>Value() পদ্ধতি ব্যবহার করে কনফিগারেশন মানগুলি পুনরুদ্ধার করা যেতে পারে:

// Retrieving a configuration value from a Tag Manager Container.

// Get the configuration value by key.
String title = mContainer.getStringValue("title_string");

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

// Empty keys will return a default value depending on the type requested.

// Key does not exist. An empty string is returned.
string subtitle = container.getStringValue("Non-existent-key");
subtitle.equals(""); // Evaluates to true.

5. ডেটা লেয়ারে মানগুলি পুশ করা

DataLayer হল এমন একটি মানচিত্র যা আপনার অ্যাপ সম্পর্কে রানটাইম তথ্য, যেমন টাচ ইভেন্ট বা স্ক্রীন ভিউ, ট্যাগ ম্যানেজার ম্যাক্রো এবং ট্যাগগুলি একটি কন্টেইনারে উপলব্ধ হতে সক্ষম করে৷

উদাহরণস্বরূপ, DataLayer মানচিত্রে স্ক্রীন ভিউ সম্পর্কে তথ্য পুশ করে, আপনি ট্যাগ ম্যানেজার ওয়েব ইন্টারফেসে ট্যাগ সেট আপ করতে পারেন কনভার্সন পিক্সেল ফায়ার করতে এবং সেই স্ক্রিনভিউগুলির প্রতিক্রিয়া হিসাবে কল ট্র্যাক করতে আপনার অ্যাপে তাদের হার্ড কোড করার প্রয়োজন ছাড়াই৷

push() এবং DataLayer.mapOf() সহায়ক পদ্ধতি ব্যবহার করে ইভেন্টগুলি ডেটালেয়ারে পুশ করা হয়:

//
// MainActivity.java
// Pushing an openScreen event with a screen name into the data layer.
//

import com.google.tagmanager.TagManager;
import com.google.tagmanager.DataLayer;

import android.app.Activity;
import android.os.Bundle;

public MainActivity extends Activity {

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

  }

  // This screen becomes visible when Activity.onStart() is called.
  public void onStart() {
    super.onStart();

    // The container should have already been opened, otherwise events pushed to
    // the DataLayer will not fire tags in that container.
    DataLayer dataLayer = TagManager.getInstance(this).getDataLayer();
    dataLayer.push(DataLayer.mapOf("event",
                                   "openScreen",      // The event type. This value should be used consistently for similar event types.
                                   "screenName",      // Writes a key "screenName" to the dataLayer map.
                                   "Home Screen")     // Writes a value "Home Screen" for the "screenName" key.
    );
  }
  // Rest of the Activity implementation
}

ওয়েব ইন্টারফেসে, আপনি এখন এই নিয়ম তৈরি করে প্রতিটি স্ক্রীন ভিউয়ের জন্য ফায়ার করার জন্য ট্যাগগুলি (যেমন Google Analytics ট্যাগ) তৈরি করতে পারেন: সমান "ওপেনস্ক্রিন"। এই ট্যাগগুলির মধ্যে একটিতে স্ক্রীনের নাম পাস করতে, একটি ডেটা স্তর ম্যাক্রো তৈরি করুন যা ডেটা স্তরে "স্ক্রিননাম" কী উল্লেখ করে। এছাড়াও আপনি একটি ট্যাগ তৈরি করতে পারেন (যেমন একটি Google বিজ্ঞাপন রূপান্তর পিক্সেল) শুধুমাত্র নির্দিষ্ট স্ক্রিন ভিউয়ের জন্য ফায়ার করার জন্য, এমন একটি নিয়ম তৈরি করে যেখানে সমান "ওপেনস্ক্রিন" এবং& সমান "কনফার্মেশন স্ক্রীন"।

6. একটি ধারক প্রিভিউ করা এবং প্রকাশ করা

ম্যাক্রো মান সর্বদা বর্তমান প্রকাশিত সংস্করণের সাথে মিলে যাবে। একটি ধারকটির সর্বশেষ সংস্করণ প্রকাশ করার আগে, আপনি আপনার খসড়া ধারকটির পূর্বরূপ দেখতে পারেন৷

একটি কন্টেইনারের পূর্বরূপ দেখতে, আপনি যে ধারকটির পূর্বরূপ দেখতে চান তার সংস্করণ নির্বাচন করে এবং তারপর Preview নির্বাচন করে Google ট্যাগ ম্যানেজার ওয়েব ইন্টারফেসে একটি পূর্বরূপ URL তৈরি করুন। এই প্রিভিউ ইউআরএলে থাকুন কারণ পরবর্তী ধাপে আপনার এটির প্রয়োজন হবে।

প্রাকদর্শন URLগুলি ট্যাগ ম্যানেজার ওয়েব ইন্টারফেসের পূর্বরূপ উইন্ডোতে উপলব্ধ
চিত্র 1: ট্যাগ ম্যানেজার ওয়েব ইন্টারফেস থেকে একটি পূর্বরূপ URL প্রাপ্ত করা।

এরপরে, আপনার অ্যাপ্লিকেশনের AndroidManifest.xml ফাইলে নিম্নলিখিত কার্যকলাপ যোগ করুন:

<!-- Google Tag Manager Preview Activity -->
<activity
  android:name="com.google.tagmanager.PreviewActivity"
  android:label="@string/app_name"
  android:noHistory="true" >  <!-- Optional, removes the PreviewActivity from activity stack. -->
  <intent-filter>
    <data android:scheme="tagmanager.c.application_package_name" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE"/>
  </intent-filter>
</activity>
  

আপনার অ্যাপে খসড়া ধারকটির পূর্বরূপ দেখতে একটি এমুলেটর বা শারীরিক ডিভাইসে লিঙ্কটি খুলুন।

আপনি যখন আপনার অ্যাপ্লিকেশনে আপনার খসড়া কনফিগারেশন মানগুলি উপলব্ধ করতে প্রস্তুত হন, তখন ধারকটি প্রকাশ করুন

উন্নত কনফিগারেশন

মোবাইলের জন্য Google ট্যাগ ম্যানেজারে অনেকগুলি উন্নত কনফিগারেশন বিকল্প রয়েছে যা আপনাকে নিয়ম ব্যবহার করে রানটাইম অবস্থার উপর ভিত্তি করে মান নির্বাচন করতে, ম্যানুয়ালি কন্টেইনার রিফ্রেশ করতে এবং কন্টেইনার খোলার জন্য অতিরিক্ত বিকল্প পেতে দেয়। নিম্নলিখিত বিভাগগুলি বেশ কয়েকটি সাধারণ উন্নত কনফিগারেশনের রূপরেখা দেয়।

পাত্রে খোলার জন্য উন্নত বিকল্প

Google ট্যাগ ম্যানেজার SDK কন্টেইনার খোলার জন্য বিভিন্ন পদ্ধতি প্রদান করে যা আপনাকে লোডিং প্রক্রিয়ার উপর আরও নিয়ন্ত্রণ দিতে পারে:

TagManager.openContainer()

TagManager.openContainer() হল একটি কন্টেইনার খোলার জন্য সর্বনিম্ন স্তরের এবং সবচেয়ে নমনীয় API। এটি একটি ডিফল্ট কন্টেইনারের সাথে অবিলম্বে ফিরে আসে এবং কোনো সংরক্ষিত কন্টেইনার না থাকলে বা সংরক্ষিত ধারকটি তাজা না হলে (> 12 ঘন্টা পুরানো) ডিস্ক বা নেটওয়ার্ক থেকে অ্যাসিঙ্ক্রোনাসভাবে একটি ধারক লোড করে।

mContainer = tagManager.openContainer(CONTAINER_ID, new Container.Callback() {

  // Called when a refresh is about to begin for the given refresh type.
  @Override
  public void containerRefreshBegin(Container container, RefreshType refreshType) {
    // Notify UI that the Container refresh is beginning.
   }

  // Called when a successful refresh occurred for the given refresh type.
  @Override
  public void containerRefreshSuccess(Container container, RefreshType refreshType]) {
    // Notify UI that Container is ready.
  }

  // Called when a refresh failed for the given refresh type.
  @Override
  public void containerRefreshFailure(Container container,
                                      RefreshType refreshType,
                                      RefreshFailure refreshFailure) {
    // Notify UI that the Container refresh has failed.
  }

লোডিং প্রক্রিয়া চলাকালীন, TagManager.openContainer() বেশ কয়েকটি লাইফসাইকেল কলব্যাক ইস্যু করে যাতে আপনার কোড জানতে পারে কখন লোডিং অনুরোধ শুরু হয়, এটি কেন ব্যর্থ হয় বা সফল হয় এবং কন্টেইনারটি শেষ পর্যন্ত ডিস্ক বা নেটওয়ার্ক থেকে লোড হয়েছিল কিনা।

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

TagManager.openContainer() এই কলব্যাকগুলিতে আর্গুমেন্ট হিসাবে নিম্নলিখিত enum মানগুলি পাস করে:

রিফ্রেশ টাইপ

মান বর্ণনা
Container.Callback.SAVED রিফ্রেশ অনুরোধ একটি স্থানীয়ভাবে সংরক্ষিত কন্টেইনার লোড হচ্ছে.
Container.Callback.NETWORK রিফ্রেশ অনুরোধ নেটওয়ার্কের উপর একটি ধারক লোড হচ্ছে.

রিফ্রেশ

মান বর্ণনা
Container.Callback.NO_SAVED_CONTAINER কোন সংরক্ষিত ধারক উপলব্ধ নেই.
Container.Callback.IO_ERROR একটি I/O ত্রুটি ধারকটিকে রিফ্রেশ করতে বাধা দিয়েছে৷
Container.Callback.NO_NETWORK কোন নেটওয়ার্ক সংযোগ উপলব্ধ নেই.
Container.Callback.NETWORK_ERROR একটি নেটওয়ার্ক ত্রুটি ঘটেছে.
Container.Callback.SERVER_ERROR সার্ভারে একটি ত্রুটি ঘটেছে৷
Container.Callback.UNKNOWN_ERROR শ্রেণীবদ্ধ করা যায় না এমন একটি ত্রুটি ঘটেছে।

নন-ডিফল্ট এবং তাজা পাত্রে খোলার পদ্ধতি

ContainerOpener TagManager.openContainer() মোড়ানো এবং কন্টেইনার খোলার জন্য দুটি সুবিধার পদ্ধতি প্রদান করে: ContainerOpener.openContainer(..., Notifier notifier) ​​এবং ContainerOpener.openContainer(..., Long timeoutInMillis)

এই পদ্ধতিগুলির প্রতিটি একটি অ-ডিফল্ট বা তাজা কন্টেইনার অনুরোধ করে একটি গণনা নেয়।

OpenType.PREFER_NON_DEFAULT বেশিরভাগ অ্যাপ্লিকেশনের জন্য সুপারিশ করা হয় এবং একটি নির্দিষ্ট সময়সীমার মধ্যে প্রথম উপলব্ধ নন-ডিফল্ট কন্টেইনারটি ফেরত দেওয়ার চেষ্টা করা হয়, হয় ডিস্ক বা নেটওয়ার্ক থেকে, এমনকি সেই কন্টেইনারটি 12 ঘন্টার বেশি পুরানো হলেও। যদি এটি একটি বাসি সংরক্ষিত কন্টেইনার ফেরত দেয়, তবে এটি একটি নতুনের জন্য একটি অ্যাসিঙ্ক্রোনাস নেটওয়ার্ক অনুরোধও করবে৷ OpenType.PREFER_NON_DEFAULT ব্যবহার করার সময়, অন্য কোনো ধারক উপলব্ধ না থাকলে, বা সময়সীমা অতিক্রম করা হলে একটি ডিফল্ট কন্টেইনার ফেরত দেওয়া হবে।

OpenType.PREFER_FRESH প্রদত্ত সময়সীমার মধ্যে ডিস্ক বা নেটওয়ার্ক থেকে একটি নতুন ধারক ফেরত দেওয়ার চেষ্টা করে। একটি নেটওয়ার্ক সংযোগ অনুপলব্ধ এবং/অথবা সময়সীমা অতিক্রম করা হলে এটি একটি সংরক্ষিত ধারক ফেরত দেয়।

OpenType.PREFER_FRESH এমন জায়গায় ব্যবহার করার পরামর্শ দেওয়া হয় না যেখানে দীর্ঘ অনুরোধের সময় ব্যবহারকারীর অভিজ্ঞতাকে উল্লেখযোগ্যভাবে প্রভাবিত করতে পারে, যেমন UI পতাকা বা প্রদর্শন স্ট্রিং সহ। নেটওয়ার্ক কন্টেইনার অনুরোধের জন্য আপনি যেকোনো সময় Container.refresh() ব্যবহার করতে পারেন।

এই উভয় সুবিধার পদ্ধতিই অ-ব্লকিং। ContainerOpener.openContainer(..., Long timeoutInMillis) একটি ContainerOpener.ContainerFuture অবজেক্ট ফেরত দেয়, যার get পদ্ধতি একটি Container লোড হওয়ার সাথে সাথে ফেরত দেয় (কিন্তু ততক্ষণ পর্যন্ত এটি ব্লক করা হবে)। ContainerOpener.openContainer(..., Notifier notifier) পদ্ধতি একটি একক কলব্যাক নেয়, যখন কন্টেইনার উপলব্ধ থাকে তখন বলা হয়, যা মূল থ্রেড ব্লক করা প্রতিরোধ করতে ব্যবহার করা যেতে পারে। উভয় পদ্ধতিরই 2000 মিলিসেকেন্ডের একটি ডিফল্ট সময়সীমা রয়েছে।

নিয়ম ব্যবহার করে রানটাইমে ম্যাক্রো মূল্যায়ন করা

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

রানটাইমে ডিভাইস ভাষার উপর ভিত্তি করে প্রদর্শন স্ট্রিং নির্বাচন করতে একটি নিয়ম ব্যবহার করা হয়: ভাষা সমান es। এই নিয়মটি পূর্ব-নির্ধারিত ভাষা ম্যাক্রো এবং একটি দুটি অক্ষরের ISO 639-1 ভাষা কোড ব্যবহার করে।
চিত্র 1: শুধুমাত্র স্প্যানিশ ভাষা ব্যবহার করার জন্য কনফিগার করা ডিভাইসগুলির জন্য একটি মান সংগ্রহ ম্যাক্রো সক্ষম করার জন্য একটি নিয়ম যোগ করা।

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

মনে রাখবেন যে আপনার ডিফল্ট কন্টেইনারের নিয়মের প্রয়োজন হলে, আপনাকে অবশ্যই আপনার ডিফল্ট ধারক হিসাবে একটি বাইনারি কন্টেইনার ফাইল ব্যবহার করতে হবে।

কনফিগার করার নিয়ম সম্পর্কে আরও জানুন (সহায়তা কেন্দ্র)।

বাইনারি ডিফল্ট কন্টেইনার ফাইল

যে ডিফল্ট কন্টেইনারগুলির নিয়মের প্রয়োজন তাদের ডিফল্ট কন্টেইনার হিসাবে JSON ফাইলের পরিবর্তে একটি বাইনারি কন্টেইনার ফাইল ব্যবহার করা উচিত। বাইনারি কন্টেনারগুলি Google ট্যাগ ম্যানেজার নিয়মের সাথে রানটাইমে ম্যাক্রো মান নির্ধারণের জন্য সমর্থন দেয়, যেখানে JSON ফাইলগুলি তা করে না।

বাইনারি কন্টেইনার ফাইলগুলি Google ট্যাগ ম্যানেজার ওয়েব ইন্টারফেস থেকে ডাউনলোড করা যেতে পারে এবং আপনার প্রোজেক্টের /assets/tagmanager/ ফোল্ডারে যোগ করা উচিত এবং এই প্যাটার্নটি অনুসরণ করা উচিত: /assets/tagmanager/GTM-XXXX , যেখানে ফাইলের নাম আপনার কন্টেইনার আইডি প্রতিনিধিত্ব করে৷

যে ক্ষেত্রে একটি JSON ফাইলের পাশাপাশি একটি বাইনারি কন্টেইনার ফাইল উপস্থিত থাকে, SDK ডিফল্ট কন্টেইনার হিসাবে বাইনারি কন্টেইনার ফাইল ব্যবহার করবে।

ফাংশন কল ম্যাক্রো ব্যবহার করে

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

একটি ফাংশন কল ম্যাক্রো কনফিগার করতে:

  1. Google ট্যাগ ম্যানেজার ওয়েব ইন্টারফেসে ফাংশন কল ম্যাক্রো সংজ্ঞায়িত করুন। আর্গুমেন্টগুলি ঐচ্ছিকভাবে কী-মানের জোড়া হিসাবে কনফিগার করা যেতে পারে।
  2. Container.registerFunctionCallMacroHandler() এবং Google ট্যাগ ম্যানেজার ওয়েব ইন্টারফেসে কনফিগার করা ফাংশনের নাম ব্যবহার করে আপনার অ্যাপ্লিকেশনে একটি FunctionCallMacroHandler নিবন্ধন করুন, এটির getValue() পদ্ধতি ওভাররাইড করুন:
    /**
     * Registers a function call macro handler.
     *
     * @param functionName The function name field, as defined in the Google Tag
     *     Manager web interface.
     */
    mContainer.registerFunctionCallMacroHandler(functionName, new FunctionCallMacroHandler() {
    
      /**
       * This code will execute when any custom macro's rule(s) evaluate to true.
       * The code should check the functionName and process accordingly.
       *
       * @param functionName Corresponds to the function name field defined
       *     in the Google Tag Manager web interface.
       * @param parameters An optional map of parameters
       *     as defined in the Google Tag Manager web interface.
       */
      @Override
      public Object getValue(String functionName, Map<String, Object> parameters)) {
    
        if (functionName.equals("myConfiguredFunctionName")) {
          // Process and return the calculated value of this macro accordingly.
          return macro_value
        }
        return null;
      }
    });
    

ফাংশন কল ট্যাগ ব্যবহার করে

ফাংশন কল ট্যাগগুলি প্রাক-নিবন্ধিত ফাংশনগুলিকে কার্যকর করতে সক্ষম করে যখনই কোনও ইভেন্টকে ডেটা স্তরে ঠেলে দেওয়া হয় এবং ট্যাগের নিয়মগুলি true হিসাবে মূল্যায়ন করা হয়।

একটি ফাংশন কল ট্যাগ কনফিগার করতে:

  1. Google ট্যাগ ম্যানেজার ওয়েব ইন্টারফেসে ফাংশন কল ট্যাগ সংজ্ঞায়িত করুন। আর্গুমেন্টগুলি ঐচ্ছিকভাবে কী-মানের জোড়া হিসাবে কনফিগার করা যেতে পারে।
  2. Container.registerFunctionCallTagHandler() ব্যবহার করে আপনার অ্যাপ্লিকেশনে একটি ফাংশন কল ট্যাগ হ্যান্ডলার নিবন্ধন করুন :
    /**
     * Register a function call tag handler.
     *
     * @param functionName The function name, which corresponds to the function name field
     *     Google Tag Manager web interface.
     */
    mContainer.registerFunctionCallTagHandler(functionName, new FunctionCallTagHandler() {
    
      /**
       * This method will be called when any custom tag's rule(s) evaluates to true.
       * The code should check the functionName and process accordingly.
       *
       * @param functionName The functionName passed to the functionCallTagHandler.
       * @param parameters An optional map of parameters as defined in the Google
       *     Tag Manager web interface.
       */
      @Override
      public void execute(String functionName, Map<String, Object> parameters) {
        if (functionName.equals("myConfiguredFunctionName")) {
          // Process accordingly.
        }
      }
    });
    

একটি কাস্টম রিফ্রেশ সময়কাল সেট করা হচ্ছে

Google ট্যাগ ম্যানেজার SDK একটি নতুন কন্টেইনার পুনরুদ্ধার করার চেষ্টা করবে যদি বর্তমান কন্টেইনারের বয়স 12 ঘন্টা অতিক্রম করে। একটি কাস্টম কন্টেইনার রিফ্রেশ পিরিয়ড সেট করতে, Timer ব্যবহার করুন, নিম্নলিখিত উদাহরণের মতো:

timer.scheduleTask(new TimerTask() {
  @Override
  public void run() {
    mContainer.refresh();
  }
}, delay, <new_period_in milliseconds>);

লগার দিয়ে ডিবাগিং

Google ট্যাগ ম্যানেজার SDK ডিফল্টভাবে লগগুলিতে ত্রুটি এবং সতর্কতা প্রিন্ট করে। আরও ভার্বোস লগিং সক্ষম করা ডিবাগিংয়ের জন্য সহায়ক হতে পারে এবং TagManager.setLogger এর সাথে আপনার নিজস্ব Logger প্রয়োগ করে এটি সম্ভব, যেমন এই উদাহরণে:

TagManager tagManager = TagManager.getInstance(this);
tagManager.setLogger(new Logger() {

  final String TAG = "myGtmLogger";

  // Log output with verbosity level of DEBUG.
  @Override
  public void d(String arg0) {
    Log.d(TAG, arg0);
  }

  // Log exceptions when provided.
  @Override
  public void d(String arg0, Throwable arg1) {
    Log.d(TAG, arg0);
    arg1.printStackTrace();
  }

  // Rest of the unimplemented Logger methods.

});

অথবা, আপনি এই উদাহরণের মতো TagManager.getLogger().setLogLevel(LogLevel) ব্যবহার করে বিদ্যমান লগারের লগলেভেল সেট করতে পারেন:

// Change the LogLevel to INFO to enable logging at INFO and higher levels.
TagManager tagManager = TagManager.getInstance(this);
tagManager.getLogger().setLogLevel(LogLevel.INFO);