लाइब्रेरी शुरू करें और कार्रवाई की पुष्टि करें

इस पेज पर बताया गया है कि अपने गेम कोड में लाइब्रेरी को कैसे शुरू करें. साथ ही, यह पुष्टि करने का तरीका बताया गया है कि यह Google Play पर डेटा अपलोड कर रही है. लाइब्रेरी के किसी फ़ंक्शन के बारे में ज़्यादा जानने के लिए, रेफ़रंस दस्तावेज़ देखें.

लाइब्रेरी शुरू करना

अपने गेम की शुरुआत में, लाइब्रेरी को शुरू करने के लिए, AndroidPerformanceTuner को इंस्टैंटिएट करें और उसके Start() तरीके को कॉल करें:

using Google.Android.PerformanceTuner;
using UnityEngine;

public class SomeBehaviour : MonoBehaviour
{
    AndroidPerformanceTuner<FidelityParams, Annotation> tuner =
            new AndroidPerformanceTuner<FidelityParams, Annotation>();

    void Start()
    {
        ErrorCode startErrorCode = tuner.Start();
        Debug.Log("Android Performance Tuner started with code: " + startErrorCode);

        tuner.onReceiveUploadLog += request =>
        {
            Debug.Log("Telemetry uploaded with request name: " + request.name);
        };
    }
}

Android Performance Tuner को शुरू करने और अपने गेम को इंस्ट्रुमेंट करने के लिए, यह कोड काफ़ी है. लॉग स्टेटमेंट से पता चलता है कि Android Performance Tuner कब शुरू हुआ और टेलीमेट्री को Google Play Console API पर कब अपलोड किया गया. बाद में, आपको ये स्टेटमेंट लॉग में दिखेंगे. इनसे यह पुष्टि की जा सकेगी कि प्लगिन सही तरीके से काम कर रहा है.

देरी से शुरू करना (सिर्फ़ Vulkan के लिए)

अगर आपका गेम Vulkan को टारगेट करता है और Android फ़्रेम पेसिंग का इस्तेमाल करता है, तो Android Performance Tuner को बाद में शुरू किया जाना चाहिए:

IEnumerator Start()
{
    yield return new WaitForEndOfFrame();
    ErrorCode startErrorCode = tuner.Start();
    Debug.Log("Android Performance Tuner started with code: " + startErrorCode);

    tuner.onReceiveUploadLog += request =>
    {
        Debug.Log("Telemetry uploaded with request name: " + request.name);
    };
}

टेलीमेट्री डेटा अपलोड करने के बीच के इंटरवल की पुष्टि करना

प्लगिन की सेटिंग में, टेलीमेट्री अपलोड करने के बीच का डिफ़ॉल्ट इंटरवल 30 सेकंड होता है. इस समय को कम इंटरवल पर सेट किया जाता है, ताकि टेलीमेट्री को सही तरीके से अपलोड करने की पुष्टि करना आसान हो. जब आपको अपना गेम प्रोडक्शन के लिए रिलीज़ करना हो, तब इसे ज़्यादा इंटरवल पर सेट करें. उदाहरण के लिए, हर 10 मिनट में. इससे गेम, एपीआई को बहुत ज़्यादा अनुरोध नहीं भेजेगा. यह उन उपयोगकर्ताओं के लिए खास तौर पर ज़रूरी है जिनके पास ऐसा मोबाइल डेटा प्लान नहीं है जिसमें अनलिमिटेड डेटा शामिल हो. ज़्यादा समय के अंतराल पर अपडेट होने से, डिवाइस की बैटरी का इस्तेमाल कम होता है.

यह पुष्टि करने के लिए कि इंटरवल 30 सेकंड पर सेट है, यह तरीका अपनाएं:

  1. सेटिंग ऐक्सेस करने के लिए, Google > Android Performance Tuner चुनें.
  2. इंस्ट्रुमेंटेशन सेटिंग टैब चुनें. इसके बाद, ऐडवांस सेटिंग इस्तेमाल करें पर क्लिक करें.
  3. पुष्टि करें कि इंटरवल (मिनट) फ़ील्ड में 0.5 मौजूद हो.

प्लगिन में इंस्ट्रुमेंटेशन सेटिंग टैब

सही तरीके से काम करने की पुष्टि करना

अगर IL2CPP या कोड स्ट्रिपिंग का इस्तेमाल किया जा रहा है, तो कोड स्ट्रिपिंग मैनेज करना लेख पढ़ें.

Android के लिए अपना गेम बनाएं. किसी डिवाइस पर गेम लॉन्च करते समय, अपने कंप्यूटर पर एक टर्मिनल खोलें और adb logcat लॉन्च करें:

adb logcat

adb logcat के आउटपुट में, "TuningFork" खोजें. ऐसा इसलिए, क्योंकि Tuning Fork लाइब्रेरी का इंटरनल नाम है:

02-03 16:55:45.103 10511 10536 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:55:45.103 10511 10536 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.105 10511 10536 I TuningFork: OpenGL version 3.2
02-03 16:55:45.105 10511 10536 I TuningFork: TuningFork.GoogleEndpoint: OK
02-03 16:55:45.106 10511 10611 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.106 10511 10536 I TuningFork: TuningFork Settings:

[...]

02-03 16:55:45.116 10511 10536 I Unity   : Tuningfork started with code: Ok
02-03 16:55:45.107 10511 10536 I TuningFork: TuningFork initialized
02-03 16:55:45.107 10511 10536 I UnityTuningfork: Swappy backend: 1
02-03 16:55:45.107 10511 10536 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork/V1
02-03 16:55:45.110 10511 10613 I TuningFork: OpenGL version 3.2
02-03 16:55:45.110 10511 10613 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:generateTuningParameters

अगर आपने प्लगिन सेट अप करते समय कोई गलती की है, जैसे कि एपीआई कुंजी सेट करना भूल गए हैं, तो आपको शुरू करने के लॉग में गड़बड़ी दिखेगी:

02-03 16:49:44.970  8815  8831 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:49:44.971  8815  8831 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:49:44.972  8815  8831 I TuningFork: OpenGL version 3.2
02-03 16:49:44.972  8815  8831 W TuningFork.GE: The API key in Tuning Fork TFSettings is invalid
02-03 16:49:44.972  8815  8831 E TuningFork: TuningFork.GoogleEndpoint: FAILED
02-03 16:49:44.973  8815  8831 I Unity   : Tuningfork started with code: BadParameter

देखें कि Android Performance Tuner, टेलीमेट्री डेटा अपलोड कर रहा है या नहीं. अगर आपको लॉग में TuningFork initialized दिखता है, तो कुछ देर और इंतज़ार करें. इसके बाद, ऐसे लॉग देखें जिनसे पता चलता हो कि टेलीमेट्री अपलोड की जा रही है.

02-03 16:58:00.552 10511 10611 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:uploadTelemetry
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response code: 200
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response message: OK
02-03 16:58:00.899 10511 10611 I TuningFork.GE: UPLOAD request returned 200 {}

"Connecting to:" के लिए, लॉग में भी खोजा जा सकता है. इस मैसेज के कुछ लाइनों बाद, जवाब का कोड दिया गया है.

अगर आपको टेलीमेट्री अपलोड करने के लॉग नहीं दिखते हैं, तो पुष्टि करें कि आपने Android Performance Tuner की सेटिंग में, हर अपलोड के बीच का इंटरवल कम वैल्यू पर सेट किया हो. जैसे, 30 सेकंड.

कोड स्ट्रिपिंग को मैनेज करना

Google.Protobuf.dll, रिफ़्लेक्शन का इस्तेमाल करता है. कोड स्ट्रिपिंग के दौरान, ज़रूरी कोड का कुछ हिस्सा हटाया जा सकता है. इस प्लगिन को हटाने से बचने के लिए, इसमें एक link.xml फ़ाइल शामिल है. इसमें इस बारे में जानकारी होती है कि किन सिंबल को सुरक्षित रखना चाहिए. अगर आपको protobuf के किसी ऐसे फ़ंक्शन की ज़रूरत है जो रिफ़्लेक्शन का इस्तेमाल करता है और आपने कोड स्ट्रिपिंग की सुविधा चालू की है, तो इस जानकारी को link.xml फ़ाइल में जोड़ें, ताकि सिंबल सुरक्षित रहें.

Unity के दस्तावेज़ में, मैनेज किए गए कोड को हटाने के बारे में ज़्यादा पढ़ें.

अगर आपको प्रोटॉबफ़ में सभी सिंबल बनाए रखने हैं, तो अपने प्रोजेक्ट में ऐसी link.xml फ़ाइल जोड़ें जिसमें यह जानकारी शामिल हो:

<linker>
  <assembly fullname="Google.Protobuf" preserve="all"/>
</linker>

पहले से कंपाइल करना (एओटी)

IL2CPP बैकएंड और Unity के 2017 और 2018 वर्शन के लिए, पहले से कंपाइल करने की सुविधा ज़रूरी है. हालांकि, Unity के बाद के वर्शन के लिए यह सुविधा ज़रूरी नहीं है.

ऐसा हो सकता है कि AOT कंपाइलर, सामान्य तरीकों के लिए कोड जनरेट न करे. आपको कंपाइलर को, protobuf के लिए ज़रूरी सही कोड जनरेट करने के लिए मजबूर करना होगा. इसके लिए, आपको यह तरीका अपनाना होगा:

using Google.Protobuf.Reflection;
using UnityEngine.Scripting;

...

// Don't call this method.
[Preserve]
void ExampleOfForceReflectionInitializationForProtobuf()
{
    FileDescriptor.ForceReflectionInitialization<Scene>();
    FileDescriptor.ForceReflectionInitialization<ShadowType>();
    FileDescriptor.ForceReflectionInitialization<LevelType>();
    ...
    // Add FileDescriptor.ForceReflectionInitialization<T> for each generated enum.
    // You can find the list of enums in DevTuningfork.cs -> enum section
    // or in the list of enums in Google -> Android Performance Tuner.
}

Unity के दस्तावेज़ में, स्क्रिप्टिंग से जुड़ी पाबंदियों के बारे में ज़्यादा जानकारी दी गई है.