इन-ऐप्लिकेशन अपडेट की सुविधा (Unreal Engine)

इस गाइड में, Unreal Engine का इस्तेमाल करके अपने ऐप्लिकेशन में इन-ऐप्लिकेशन अपडेट की सुविधा जोड़ने का तरीका बताया गया है. Kotlin प्रोग्रामिंग भाषा या Java प्रोग्रामिंग भाषा का इस्तेमाल करने पर, लागू करने के तरीके के बारे में अलग से गाइड दी गई है. इसके अलावा, नेटिव कोड (C/C++) या Unity का इस्तेमाल करने पर, लागू करने के तरीके के बारे में अलग से गाइड दी गई है.

Unreal Engine SDK टूल के बारे में खास जानकारी

Play In-App Updates API, Play Core SDK फ़ैमिली का हिस्सा है. Unreal Engine के लिए एपीआई, आपके ऐप्लिकेशन और Play API के बीच कम्यूनिकेशन मैनेज करने के लिए UInAppUpdatesManager क्लास उपलब्ध कराता है. अनुरोध करने के बाद, आपका ऐप्लिकेशन EAppUpdateErrorCode का इस्तेमाल करके, अनुरोध की स्थिति देख सकता है.

Unreal Engine के इस्तेमाल किए जा सकने वाले वर्शन

यह प्लग इन, Unreal Engine 5.0 और इसके बाद के सभी वर्शन के साथ काम करता है.

डेवलपमेंट एनवायरमेंट सेट अप करना

  1. GitHub के रिपॉज़िटरी से Play Unreal Engine प्लग इन डाउनलोड करें.

  2. Unreal Engine प्रोजेक्ट में, Plugins फ़ोल्डर में GooglePlay फ़ोल्डर को कॉपी करें.

  3. अपना Unreal Engine प्रोजेक्ट खोलें और बदलाव करें → प्लग इन पर क्लिक करें.

  4. Google Play खोजें और चालू है चेकबॉक्स पर सही का निशान लगाएं.

  5. गेम प्रोजेक्ट को रीस्टार्ट करें और बिल्ड को ट्रिगर करें.

  6. अपने प्रोजेक्ट की Build.cs फ़ाइल खोलें और PlayInAppUpdates मॉड्यूल को PublicDependencyModuleNames में जोड़ें:

    using UnrealBuildTool;
    
    public class MyGame : ModuleRules
    {
      public MyGame(ReadOnlyTargetRules Target) : base(Target)
      {
        // ...
    
        PublicDependencyModuleNames.Add("PlayInAppUpdates");
    
        // ...
      }
    }
    

देखना कि अपडेट उपलब्ध है या नहीं

अपडेट का अनुरोध करने से पहले, देखें कि आपके ऐप्लिकेशन के लिए कोई अपडेट उपलब्ध है या नहीं. अपडेट देखने के लिए, UInAppUpdatesManager::RequestInfo का इस्तेमाल करें:

MyClass.h

void MyClass::OnRequestInfoOperationCompleted(
  EAppUpdateErrorCode ErrorCode,
  UAppUpdateInfo* UpdateInfo)
{
  // Check the resulting error code.
  if (ErrorCode == EAppUpdateErrorCode::AppUpdate_NO_ERROR)
  {
    // Check AppUpdateInfo's UpdateAvailability, UpdatePriority,
    // IsUpdateTypeAllowed(), ... and decide whether to ask the user
    // to start an in-app update.
  }
}

MyClass.cpp

void MyClass::CheckForUpdateAvailability()
{
  // Create a delegate to bind the callback function.
  FRequestInfoOperationCompletedDelegate Delegate;

  // Bind the completion handler (OnRequestInfoOperationCompleted) to the delegate.
  Delegate.BindDynamic(this, &MyClass::OnRequestInfoOperationCompleted);

  // Initiate the request info operation, passing the delegate to handle the result.
  GetGameInstance()
    ->GetSubsystem<UInAppUpdatesManager>()
    ->RequestInfo(Delegate);
}

दिखाए गए UAppUpdateInfo इंस्टेंस में, अपडेट की उपलब्धता की स्थिति होती है. अगर कोई इन-ऐप्लिकेशन अपडेट पहले से ही चल रहा है, तो इंस्टेंस उस अपडेट की स्थिति की भी जानकारी देता है.

देखें कि अपडेट पुराना है या नहीं

यह देखने के अलावा कि अपडेट उपलब्ध है या नहीं, यह भी देखा जा सकता है कि उपयोगकर्ता को पिछली बार Play Store से अपडेट की सूचना कब मिली थी. इससे आपको यह तय करने में मदद मिलती है कि आपको ज़रूरत के हिसाब से अपडेट करना है या तुरंत अपडेट करना है. उदाहरण के लिए, उपयोगकर्ता को किसी अपडेट के बारे में बताने से पहले, कुछ दिन इंतज़ार किया जा सकता है. इसके बाद, कुछ दिन बाद ही उसे तुरंत अपडेट करने के लिए कहा जा सकता है.

Play Store पर अपडेट उपलब्ध होने के बाद से, कितने दिन हो गए हैं, यह जानने के लिए UAppUpdateInfo:GetClientVersionStalenessDays का इस्तेमाल करें:

int32 ClientVersionStalenessDays = UpdateInfo->GetClientVersionStalenessDays();

अपडेट की प्राथमिकता देखना

Google Play Developer API की मदद से, हर अपडेट की प्राथमिकता सेट की जा सकती है. इससे, आपके ऐप्लिकेशन को यह तय करने में मदद मिलती है कि उपयोगकर्ता को अपडेट का सुझाव कितना ज़ोरदार तरीके से देना है. उदाहरण के लिए, अपडेट की प्राथमिकता सेट करने के लिए, यह रणनीति अपनाएं:

  • यूज़र इंटरफ़ेस (यूआई) में छोटे सुधार: कम प्राथमिकता वाला अपडेट; न तो ज़रूरत के मुताबिक अपडेट का अनुरोध करें और न ही तुरंत अपडेट का.
  • परफ़ॉर्मेंस में सुधार: मध्यम प्राथमिकता वाला अपडेट; ज़रूरत के मुताबिक अपडेट का अनुरोध करें.
  • सुरक्षा से जुड़ा अहम अपडेट: ज़्यादा प्राथमिकता वाला अपडेट; तुरंत अपडेट करने का अनुरोध करें.

प्राथमिकता तय करने के लिए, Google Play 0 से 5 के बीच की किसी पूर्णांक वैल्यू का इस्तेमाल करता है. इसमें 0 डिफ़ॉल्ट वैल्यू होती है और 5 सबसे ज़्यादा प्राथमिकता होती है. किसी अपडेट की प्राथमिकता सेट करने के लिए, Google Play Developer API में Edits.tracks.releases में मौजूद inAppUpdatePriority फ़ील्ड का इस्तेमाल करें. रिलीज़ में जोड़े गए सभी नए वर्शन को, रिलीज़ के बराबर प्राथमिकता दी जाती है. प्राथमिकता सिर्फ़ नई रिलीज़ को रोल आउट करते समय सेट की जा सकती है. इसे बाद में बदला नहीं जा सकता.

Play Developer API के दस्तावेज़ में बताए गए तरीके के मुताबिक, Google Play Developer API का इस्तेमाल करके प्राथमिकता सेट करें. इन-ऐप्लिकेशन अपडेट की प्राथमिकता, Edit.tracks: update तरीके में पास किए गए Edit.tracks संसाधन में बताई जानी चाहिए. यहां दिए गए उदाहरण में, वर्शन कोड 88 और inAppUpdatePriority 5 वाले ऐप्लिकेशन को रिलीज़ करने का तरीका बताया गया है:

{
  "releases": [{
      "versionCodes": ["88"],
      "inAppUpdatePriority": 5,
      "status": "completed"
  }]
}

अपने ऐप्लिकेशन के कोड में, किसी अपडेट के लिए प्राथमिकता का लेवल देखने के लिए, UAppUpdateInfo::UpdatePriority का इस्तेमाल करें:

int32 Priority = UpdateInfo->GetPriority();

अपडेट शुरू करना

अपडेट उपलब्ध होने की पुष्टि करने के बाद, UInAppUpdatesManager::StartUpdate का इस्तेमाल करके अपडेट का अनुरोध किया जा सकता है. अपडेट का अनुरोध करने से पहले, पक्का करें कि आपके पास अप-टू-डेट UAppUpdateInfo ऑब्जेक्ट हो. अपडेट फ़्लो को कॉन्फ़िगर करने के लिए, आपको एक UAppUpdateOptions ऑब्जेक्ट भी बनाना होगा.

यहां दिए गए उदाहरण में, तुरंत अपडेट होने वाले फ़्लो के लिए UAppUpdateOptions ऑब्जेक्ट बनाया गया है:

// Creates an UAppUpdateOptions defining an immediate in-app
// update flow and its parameters.
UAppUpdateOptions* Options = NewObject<UAppUpdateOptions>();
Options->CreateOptions(EAppUpdateType::AppUpdate_TYPE_IMMEDIATE);

यहां दिए गए उदाहरण में, अपडेट फ़्लो के लिए UAppUpdateOptions ऑब्जेक्ट बनाया गया है:

// Creates an UAppUpdateOptions defining a flexible in-app
// update flow and its parameters.
UAppUpdateOptions* Options = NewObject<UAppUpdateOptions>();
Options->CreateOptions(EAppUpdateType::AppUpdate_TYPE_FLEXIBLE);

UAppUpdateOptions ऑब्जेक्ट में एक IsAssetPackDeletionAllowed फ़ंक्शन भी होता है. यह फ़ंक्शन यह बताता है कि डिवाइस के स्टोरेज के कम होने पर, अपडेट को एसेट पैक मिटाने की अनुमति है या नहीं. यह फ़ील्ड डिफ़ॉल्ट रूप से false पर सेट होता है. हालांकि, इसे true पर सेट करने के लिए, UAppUpdateOptions::SetAssetPackDeletionAllowed का इस्तेमाल करके फ़ील्ड को सेट किया जा सकता है:

// Sets the AssetPackDeletionAllowed field to true.
Options->SetAssetPackDeletionAllowed(true);

आगे की कार्रवाई इस बात पर निर्भर करती है कि आपने ज़रूरत के हिसाब से अपडेट का अनुरोध किया है या तुरंत अपडेट का.

ज़रूरत के हिसाब से अपडेट मैनेज करना

अप-टू-डेट UAppUpdateInfo ऑब्जेक्ट और सही तरीके से कॉन्फ़िगर किया गया UAppUpdateOptions ऑब्जेक्ट मिलने के बाद, अपडेट फ़्लो का अनुरोध करने के लिए UInAppUpdatesManager::StartUpdate को कॉल किया जा सकता है.

MyClass.h

void MyClass::OnStartUpdateOperationCompleted(EAppUpdateErrorCode ErrorCode)
{
  // ...
}

MyClass.cpp

// .cpp
void MyClass::StartUpdate()
{
  // Create a delegate to bind the callback function.
  FUpdateOperationCompletedDelegate Delegate;

  // Bind the completion handler (OnStartUpdateOperationCompleted) to the delegate.
  Delegate.BindDynamic(this, &MyClass::OnStartUpdateOperationCompleted);

  // Initiate the start update operation, passing the delegate to handle the result.
  GetGameInstance()
    ->GetSubsystem<UInAppUpdatesManager>()
    ->StartUpdate(UpdateInfo, UpdateOptions, Delegate);
}

अपडेट करने के लिए, आपको डाउनलोड पूरा होने के बाद, ऐप्लिकेशन के अपडेट को इंस्टॉल करना होगा. ऐसा करने के लिए, InAppUpdatesManager::CompleteUpdate को कॉल करें, जैसा कि इस उदाहरण में दिखाया गया है:

MyClass.h

void MyClass::OnCompleteUpdateOperationCompleted(EAppUpdateErrorCode ErrorCode)
{
  // ...
}

MyClass.cpp

void MyClass::CompleteFlexibleUpdate()
{
  // Create a delegate to bind the callback function.
  FUpdateOperationCompletedDelegate Delegate;

  // Bind the completion handler (OnCompleteUpdateOperationCompleted) to the delegate.
  Delegate.BindDynamic(this, &MyClass::OnCompleteUpdateOperationCompleted);

  // Initiate the complete update operation, passing the delegate to handle the result.
  GetGameInstance()
    ->GetSubsystem<UInAppUpdatesManager>()
    ->CompleteUpdate(UpdateInfo, UpdateOptions, Delegate);
}

तुरंत अपडेट मैनेज करना

अप-टू-डेट UAppUpdateInfo ऑब्जेक्ट और सही तरीके से कॉन्फ़िगर किया गया UAppUpdateOptions ऑब्जेक्ट मिलने के बाद, अपडेट फ़्लो का अनुरोध करने के लिए InAppUpdatesManager::StartUpdate को कॉल किया जा सकता है.

MyClass.h

void MyClass::OnStartUpdateOperationCompleted(EAppUpdateErrorCode ErrorCode)
{
  // ...
}

MyClass.cpp

void MyClass::StartUpdate()
{
  // Create a delegate to bind the callback function.
  FUpdateOperationCompletedDelegate Delegate;

  // Bind the completion handler (OnStartUpdateOperationCompleted) to the delegate.
  Delegate.BindDynamic(this, &MyClass::OnStartUpdateOperationCompleted);

  // Initiate the start update operation, passing the delegate to handle the result.
  GetGameInstance()
    ->GetSubsystem<UInAppUpdatesManager>()
    ->StartUpdate(UpdateInfo, UpdateOptions, Delegate);
}

तुरंत अपडेट करने के लिए, Google Play उपयोगकर्ता को पुष्टि करने वाला डायलॉग दिखाता है. जब उपयोगकर्ता अनुरोध स्वीकार करता है, तो Google Play अपडेट को अपने-आप डाउनलोड और इंस्टॉल करता है. इसके बाद, अगर इंस्टॉलेशन पूरा हो जाता है, तो ऐप्लिकेशन को अपडेट किए गए वर्शन पर रीस्टार्ट करता है.

गड़बड़ी ठीक करना

इस सेक्शन में, आम तौर पर होने वाली गड़बड़ियों को ठीक करने के तरीके बताए गए हैं.

  • अगर UInAppUpdatesManager::StartUpdate, AppUpdate_INVALID_REQUEST गड़बड़ी का मैसेज दिखाता है, तो इसका मतलब है कि UAppUpdateInfo अमान्य है. अपडेट फ़्लो शुरू करने से पहले, पक्का करें कि UInAppUpdatesManager::RequestInfo से मिला UAppUpdateInfo ऑब्जेक्ट, शून्य न हो.
  • अगर UInAppUpdatesManager::StartUpdate, AppUpdate_NOT_ALLOWED गड़बड़ी दिखाता है, तो इसका मतलब है कि UAppUpdateOptions ऑब्जेक्ट, अपडेट के ऐसे टाइप का संकेत देता है जिसकी अनुमति उपलब्ध अपडेट के लिए नहीं है. देखें कि अपडेट फ़्लो शुरू करने से पहले, UAppUpdateInfo ऑब्जेक्ट से यह पता चलता है कि चुने गए अपडेट टाइप की अनुमति है या नहीं.

अगले चरण

अपने ऐप्लिकेशन के इन-ऐप्लिकेशन अपडेट की जांच करें, ताकि यह पुष्टि की जा सके कि आपका इंटिग्रेशन सही तरीके से काम कर रहा है या नहीं.