শুরু হচ্ছে

এই গাইডটি Google Ads API .NET লাইব্রেরি দিয়ে কীভাবে শুরু করতে হয় তার একটি সংক্ষিপ্ত বিবরণ দেয়।

ইনস্টলেশন

ক্লায়েন্ট লাইব্রেরি বাইনারি NuGet ব্যবহার করে বিতরণ করা হয়। ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে আপনার প্রোজেক্টে Google.Ads.GoogleAds প্যাকেজে একটি NuGet রেফারেন্স যোগ করুন।

অনুমোদন সেট আপ করুন

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

আপনার যদি শংসাপত্র তৈরি করতে হয়

আপনার যদি ইতিমধ্যেই শংসাপত্র থাকে

  • আপনার App.config / Web.config ফাইলে GitHub-এর App.config ফাইল থেকে configSections নোডের অধীনে GoogleAdsApi নোড এবং GoogleAdsApi বিভাগটি অনুলিপি করুন। আপনি প্যাকেজ ইনস্টল করার জন্য NuGet ব্যবহার করলে, এই নোডগুলি স্বয়ংক্রিয়ভাবে আপনার App.config / Web.config ফাইলে ঢোকানো হবে।
  • আপনার অ্যাপের App.config / Web.config এ ডেভেলপার টোকেন, ক্লায়েন্ট আইডি, ক্লায়েন্ট সিক্রেট এবং রিফ্রেশ টোকেন অন্তর্ভুক্ত করুন।

GitHub-এ অন্তর্ভুক্ত App.config ফাইলটি ভালভাবে নথিভুক্ত, তবে আপনি আরও জানতে কনফিগারেশন গাইড দেখতে পারেন এবং সেইসাথে ক্লায়েন্ট লাইব্রেরি কনফিগার করার বিকল্প উপায়গুলি ব্যবহার করতে পারেন, যেমন পরিবেশ ভেরিয়েবল।

একটি API কল করুন

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

// Create a Google Ads client.
GoogleAdsClient client = new GoogleAdsClient();

// Create the required service.
CampaignServiceClient campaignService =
    client.GetService(Services.V18.CampaignService);

// Make more calls to service class.

একটি GoogleAdsClient উদাহরণ তৈরি করুন

Google Ads API .NET লাইব্রেরির সবচেয়ে গুরুত্বপূর্ণ ক্লাস হল GoogleAdsClient ক্লাস। এটি আপনাকে একটি পূর্ব-কনফিগার করা পরিষেবা শ্রেণী তৈরি করতে দেয় যা API কল করার জন্য ব্যবহার করা যেতে পারে। GoogleAdsClient একটি ডিফল্ট কনস্ট্রাক্টর প্রদান করে যা আপনার অ্যাপের App.config / Web.config এ নির্দিষ্ট করা সেটিংস ব্যবহার করে একটি ব্যবহারকারী অবজেক্ট তৈরি করে। কনফিগারেশন বিকল্পের জন্য কনফিগারেশন নির্দেশিকা পড়ুন।

// Create a new GoogleAdsClient with the App.config settings.
GoogleAdsClient user = new GoogleAdsClient();

একটি পরিষেবা তৈরি করুন

GoogleAdsClient একটি GetService পদ্ধতি প্রদান করে যা একটি বিজ্ঞাপন পরিষেবা তৈরি করতে ব্যবহার করা যেতে পারে।

CampaignServiceClient campaignService = client.GetService(Services.V18.CampaignService);
// Now make calls to CampaignService.

আমরা একটি Services শ্রেণী প্রদান করি যা সমস্ত সমর্থিত API সংস্করণ এবং পরিষেবাগুলিকে গণনা করে৷ পরিষেবা তৈরি করার সময় GetService পদ্ধতি এই গণনা বস্তুকে যুক্তি হিসাবে গ্রহণ করে। উদাহরণস্বরূপ, Google Ads API-এর V18 সংস্করণের জন্য CampaignServiceClient এর একটি উদাহরণ তৈরি করতে, আপনাকে পূর্বের উদাহরণে যেমন দেখানো হয়েছে, আর্গুমেন্ট হিসাবে Services.V18.CampaignService এর সাথে GoogleAdsClient.GetService পদ্ধতিকে কল করতে হবে।

থ্রেড নিরাপত্তা

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

একটি মাল্টিথ্রেড অ্যাপ্লিকেশন এই মত কিছু দেখতে হবে:

GoogleAdsClient client1 = new GoogleAdsClient();
GoogleAdsClient client2 = new GoogleAdsClient();

Thread userThread1 = new Thread(addAdGroups);
Thread userThread2 = new Thread(addAdGroups);

userThread1.start(client1);
userThread2.start(client2);

userThread1.join();
userThread2.join();

public void addAdGroups(object data) {
  GoogleAdsClient client = (GoogleAdsClient) data;
  // Do more operations here.
  ...
}

.NET ফ্রেমওয়ার্ক অ্যাপ্লিকেশনগুলিতে জমাট বাঁধা এড়িয়ে চলুন

সিঙ্ক্রোনাস পদ্ধতিগুলি আপনার কিছু .NET ফ্রেমওয়ার্ক অ্যাপ্লিকেশনগুলিকে হিমায়িত করতে পারে৷ একটি সাধারণ উদাহরণ হল একটি WinForm অ্যাপ্লিকেশনের একটি ইভেন্ট হ্যান্ডলার পদ্ধতি থেকে API কল করা।

এই সমস্যাটি সমাধান করার দুটি উপায় রয়েছে:

  1. লিগ্যাসি Grpc লাইব্রেরি ব্যবহার করুন।

    আপনি ডিফল্ট Grpc.Net.Client লাইব্রেরির পরিবর্তে লিগ্যাসি Grpc.Core লাইব্রেরি ব্যবহার করতে GoogleAdsConfig এর UseGrpcCore প্রপার্টি সেট করতে পারেন। এই পদ্ধতিটি .NET ফ্রেমওয়ার্ক অ্যাপ্লিকেশনগুলিতে ব্যাপকভাবে পরীক্ষা করা হয়নি, তাই এটি সমস্যার সমাধান নাও করতে পারে। এখানে একটি নমুনা স্নিপেট আছে:

    GoogleAdsConfig config = new GoogleAdsConfig();
    config.UseGrpcCore = true;
    GoogleAdsClient client = new GoogleAdsClient(config);
    

    gRPC সমর্থন পৃষ্ঠায় উত্তরাধিকার Grpc.Core লাইব্রেরি এবং ডিফল্ট Grpc.Net.Client লাইব্রেরির মধ্যে পার্থক্য সম্পর্কে আরও বিশদ রয়েছে।

  2. অ্যাসিঙ্ক্রোনাস পদ্ধতি ব্যবহার করুন।

    জমে যাওয়া এড়াতে আপনি অ্যাসিঙ্ক্রোনাস পদ্ধতি ব্যবহার করতে পারেন। এখানে কিছু উদাহরণ আছে:

    সার্চ স্ট্রীম

    SearchStream() এ একটি কল সম্পাদিত হয়, এবং ফলাফলগুলি একটি তালিকা দৃশ্যে জমা হয়।

    private async void button1_Click(object sender, EventArgs e)
    {
    // Get the GoogleAdsService.
    GoogleAdsServiceClient googleAdsService = client.GetService(
        Services.V18.GoogleAdsService);
     
    // Create a query that will retrieve all campaigns.
    string query = @"SELECT
                    campaign.id,
                    campaign.name,
                    campaign.network_settings.target_content_network
                FROM campaign
                ORDER BY campaign.id";
     
    List items = new List();
    Task t =  googleAdsService.SearchStreamAsync(customerId.ToString(), query,
        delegate (SearchGoogleAdsStreamResponse resp)
        {
            foreach (GoogleAdsRow googleAdsRow in resp.Results)
            {
                ListViewItem item = new ListViewItem();
                item.Text = googleAdsRow.Campaign.Id.ToString();
                item.SubItems.Add(googleAdsRow.Campaign.Name);
                items.Add(item);
            }
        }
    );
    await t;
    listView1.Items.AddRange(items.ToArray());
    }
    

    প্রচারণার বাজেট

    একটি CampaignBudget কল তৈরি করা হয়, এবং নতুন বাজেটের রিসোর্স নাম একটি MessageBox সতর্কতা ব্যবহার করে প্রদর্শিত হয়।

    private async void button2_Click(object sender, EventArgs e)
    {
    // Get the BudgetService.
    CampaignBudgetServiceClient budgetService = client.GetService(
        Services.V18.CampaignBudgetService);
     
    // Create the campaign budget.
    CampaignBudget budget = new CampaignBudget()
    {
        Name = "Interplanetary Cruise Budget #" + ExampleUtilities.GetRandomString(),
        DeliveryMethod = BudgetDeliveryMethod.Standard,
        AmountMicros = 500000
    };
     
    // Create the operation.
    CampaignBudgetOperation budgetOperation = new CampaignBudgetOperation()
    {
        Create = budget
    };
     
    // Create the campaign budget.
    Task t = budgetService.MutateCampaignBudgetsAsync(
        customerId.ToString(), new CampaignBudgetOperation[] { budgetOperation });
     
    await t;
    MutateCampaignBudgetsResponse response = t.Result;
    MessageBox.Show(response.Results[0].ResourceName);
    }
    

ত্রুটি হ্যান্ডলিং

প্রতিটি API কল সফল হবে না। আপনার API কল কোনো কারণে ব্যর্থ হলে সার্ভার ত্রুটি নিক্ষেপ করতে পারে। API ত্রুটিগুলি ক্যাপচার করা এবং সেগুলি যথাযথভাবে পরিচালনা করা গুরুত্বপূর্ণ৷

একটি API ত্রুটি ঘটলে একটি GoogleAdsException উদাহরণ নিক্ষেপ করা হয়। কি ভুল হয়েছে তা বের করতে আপনাকে সাহায্য করার জন্য এটির বিশদ বিবরণ রয়েছে:

// Get the CampaignService.
CampaignServiceClient campaignService = client.GetService(Services.V18.CampaignService);

// Create a campaign for update.
Campaign campaignToUpdate = new Campaign()
{
    ResourceName = ResourceNames.Campaign(customerId, campaignId),
    // More fields to update.
    // ...
};

// Create the operation.
CampaignOperation operation = new CampaignOperation()
{
    Update = campaignToUpdate,
    UpdateMask = FieldMasks.AllSetFieldsOf(campaignToUpdate)
};

try
{
    // Update the campaign.
    MutateCampaignsResponse response = campaignService.MutateCampaigns(
        customerId.ToString(), new CampaignOperation[] { operation });

    // Display the results.
    // ...
}
catch (GoogleAdsException e)
{
    Console.WriteLine("Failure:");
    Console.WriteLine($"Message: {e.Message}");

    // Can examine to get more error details.
    Console.WriteLine($"Failure: {e.Failure}");

    // Can be shared with Google for further troubleshooting.
    Console.WriteLine($"Request ID: {e.RequestId}");
}