# एंड्रॉइड ऐप्स में Pushwoosh लोकेशन मॉड्यूल का उपयोग करना

<Aside type="caution">
कृपया ध्यान दें कि जियो-आधारित मैसेजिंग HMS (हुआवेई मोबाइल सर्विसेज) उपकरणों के लिए उपलब्ध नहीं है क्योंकि यह गूगल लोकेशन सेवाओं पर आधारित है।
</Aside>

एंड्रॉइड में दो लोकेशन एक्सेस श्रेणियां हैं:

*   **फोरग्राउंड** लोकेशन एक्सेस
*   **बैकग्राउंड** लोकेशन एक्सेस

**फोरग्राउंड** में उपयोगकर्ता के लोकेशन को अपडेट करने के लिए, निम्नलिखित में से कोई एक शर्त पूरी होनी चाहिए:

*   ऐप की गतिविधियों में से कोई एक सक्रिय है
*   ऐप के लिए foregroundServiceType = “location” की फोरग्राउंड सेवा लॉन्च की गई है

**बैकग्राउंड** एक्सेस ऐप को उपयोगकर्ता का जियोलोकेशन प्राप्त करने की अनुमति देता है, जबकि ऐप निष्क्रिय है, और उस ऐप के लिए "लोकेशन" प्रकार की कोई फोरग्राउंड सेवा लॉन्च नहीं की गई है।

## फोरग्राउंड लोकेशन एक्सेस

यदि आप Pushwoosh लोकेशन मॉड्यूल का उपयोग केवल तभी उपयोगकर्ता के लोकेशन को अपडेट करने के लिए करने जा रहे हैं जब आपका ऐप सक्रिय हो, तो अपने **app/build.gradle** में `pushwoosh-location` मॉड्यूल जोड़ें:

```java title="build.gradle"
implementation 'com.pushwoosh:pushwoosh-location:6.+'
```

<Aside>
Pushwoosh Github रेपो में नवीनतम मॉड्यूल संस्करण प्राप्त करें: [https://github.com/Pushwoosh/pushwoosh-android-sdk/releases](https://github.com/Pushwoosh/pushwoosh-android-sdk/releases)
</Aside>

मॉड्यूल लॉन्च करने के लिए, `startLocationTracking` विधि का उपयोग करें:

<Tabs>
<TabItem label="Java">
```java
PushwooshLocation.startLocationTracking();
```
</TabItem>

<TabItem label="Kotlin">
```kotlin
PushwooshLocation.startLocationTracking()
```
</TabItem>
</Tabs>

<Aside type="note">
`pushwoosh-location` मॉड्यूल उपयोगकर्ता से सभी आवश्यक अनुमतियों (ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION) का अनुरोध करेगा।
</Aside>

## जब आपका एप्लिकेशन बैकग्राउंड में हो तो लोकेशन अनुरोध करने के लिए ForegroundService का उपयोग करना

<Aside type="caution" title="पदावनत">

एंड्रॉइड 12 अपडेट के कारण, ForegroundService सही ढंग से प्रदर्शन नहीं कर सकता है, इसलिए इसे पदावनत कर दिया गया है और आगे Pushwoosh SDK से हटा दिया जाएगा।

बैकग्राउंड में उपयोगकर्ताओं के लोकेशन को ट्रैक करने के लिए यहां कुछ समाधान दिए गए हैं:

1.  targetSdkVersion 31 के बजाय 30 का उपयोग करें। कृपया ध्यान रखें कि इस मामले में एंड्रॉइड 12 में मौजूद सुविधाएँ उपलब्ध नहीं होंगी।
2.  अपने उपयोगकर्ताओं से अपने ऐप के लिए बैटरी ऑप्टिमाइज़ेशन को अक्षम करने के लिए कहें ताकि ForegroundService बैकग्राउंड में शुरू हो सके।
</Aside>

जब `startLocationTracking` विधि को कॉल किया जाता है, तो **ForegroundService** को लॉन्च करने के लिए, जो आपके एप्लिकेशन के बैकग्राउंड में होने पर उपयोगकर्ता के जियोलोकेशन को प्राप्त करने की अनुमति देता है, [पिछले पैराग्राफ](#foreground-location-access) में वर्णित चरणों का पालन करें, फिर अपने **AndroidManifest.xml** में निम्नलिखित मेटा-डेटा जोड़ें:

```txt
...
<application>
....
    <meta-data
        android:name="com.pushwoosh.start_foreground_service"
        android:value="true" />
...
</application>
...
```

जब **ForegroundService** लॉन्च होता है, तो एक सूचना बनाई जाती है। आप अपने प्रोजेक्ट के **AndroidManifest.xml** में अतिरिक्त मेटा-डेटा निर्दिष्ट करके सूचना को अनुकूलित कर सकते हैं:

```txt
...
<application>
....
    <meta-data
        android:name="com.pushwoosh.foreground_service_notification_text"
        android:value="My notification text" />
    <meta-data
        android:name="com.pushwoosh.foreground_service_notification_channel_name"
        android:value="My notification channel name" />
...
</application>
...
```

## बैकग्राउंड लोकेशन एक्सेस

ForegroundService लॉन्च किए बिना बैकग्राउंड में जियोलोकेशन को अपडेट करने के लिए, आपको निम्नलिखित की आवश्यकता होगी:

*   बैकग्राउंड में लोकेशन तक आपके ऐप की पहुंच के लिए Google Play से अनुमोदन प्राप्त करें (विवरण के लिए [https://support.google.com/googleplay/android-developer/answer/9799150?hl=en](https://support.google.com/googleplay/android-developer/answer/9799150?hl=en) देखें)
*   अपने AndroidManifest.xml में अनुमति जोड़ें:

```txt
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
```

*   फोरग्राउंड लोकेशन अनुमति प्राप्त होने के बाद बैकग्राउंड में लोकेशन अपडेट करने के लिए उपयोगकर्ता की अनुमति का अनुरोध करें (एंड्रॉइड डेवलपर दस्तावेज़ीकरण में दिशानिर्देश खोजें: [https://developer.android.com/training/location/permissions#background-dialog-target-android-11](https://developer.android.com/training/location/permissions#background-dialog-target-android-11))

6.3.2 `pushwoosh-location` मॉड्यूल संस्करण में, हमने एक अतिरिक्त विधि शामिल की है जो लोकेशन अनुमति सेटिंग्स स्क्रीन खोलती है यदि निम्नलिखित शर्तें पूरी होती हैं:

*   ऐप के लिए फोरग्राउंड लोकेशन अनुमति दी गई है;
*   ऐप के AndroidManifest.xml में `ACCESS_BACKGROUND_LOCATION` उपयोगकर्ता-अनुमति मौजूद है।

<Aside type="caution">
कृपया सुनिश्चित करें कि उपयोगकर्ताओं को स्पष्ट रूप से समझाएं कि आपके ऐप को किन कारणों और उद्देश्यों के लिए बैकग्राउंड में उनके लोकेशन तक पहुंच की आवश्यकता है। विवरण के लिए [एंड्रॉइड डेवलपर गाइड](https://developer.android.com/training/location/permissions#background-dialog-target-android-11) देखें।
</Aside>

विधि को इस प्रकार कॉल करें:

<Tabs>
<TabItem label="Java">
```java
PushwooshLocation.requestBackgroundLocationPermission();
```
</TabItem>

<TabItem label="Kotlin">
```
PushwooshLocation.requestBackgroundLocationPermission()
```
</TabItem>
</Tabs>

## एंड्रॉइड 12+ अनुमति प्रकार

[एंड्रॉइड 12 से शुरू होकर](https://developer.android.com/about/versions/12/approximate-location), जब फोरग्राउंड लोकेशन एक्सेस अनुमति के लिए पूछा जाता है, तो एक उपयोगकर्ता यह चुन सकता है कि ऐप कितनी बार और किस सटीकता के साथ उपयोगकर्ता का लोकेशन प्राप्त करेगा।

उस अनुमति के दो प्रकार हैं:

1.  अनुमानित लोकेशन, जो ACCESS_COARSE_LOCATION के बराबर है
2.  सटीक लोकेशन, जो ACCESS_FINE_LOCATION और ACCESS_COARSE_LOCATION के बराबर है

<Aside type="caution">
कृपया ध्यान दें कि Manifest.permission.ACCESS_COARSE_LOCATION वाले और Manifest.permission.ACCESS_FINE_LOCATION नहीं वाले एप्लिकेशन से लोकेशन अनुरोध स्वचालित रूप से एक धीमी अंतराल पर थ्रॉटल किए जाएंगे, और लोकेशन ऑब्जेक्ट को केवल सटीकता का एक मोटा स्तर दिखाने के लिए अस्पष्ट किया जाएगा। विवरण के लिए [https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest](https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest) देखें।
</Aside>

<Aside type="note">
ध्यान रखें कि सटीकता का स्तर इस बात पर निर्भर करता है कि आप कौन सी अनुमति का अनुरोध करते हैं:

*   ACCESS_COARSE_LOCATION – डिवाइस के लोकेशन का एक अनुमान प्रदान करता है, जो लगभग 1 मील (1.6 किमी) के भीतर होता है।
*   ACCESS_FINE_LOCATION – डिवाइस के लोकेशन का एक अनुमान प्रदान करता है जो यथासंभव सटीक होता है, आमतौर पर लगभग 160 फीट (50 मीटर) के भीतर और कभी-कभी 10 फीट (कुछ मीटर) या बेहतर के भीतर सटीक होता है।

स्रोत: [https://developer.android.com/training/location/permissions](https://developer.android.com/training/location/permissions)
</Aside>

## अपनी प्रतिक्रिया हमारे साथ साझा करें

आपकी प्रतिक्रिया हमें एक बेहतर अनुभव बनाने में मदद करती है, इसलिए यदि आपको SDK एकीकरण प्रक्रिया के दौरान कोई समस्या आती है तो हम आपसे सुनना पसंद करेंगे। यदि आपको कोई कठिनाई आती है, तो कृपया [इस फॉर्म के माध्यम से](https://docs.google.com/forms/d/e/1FAIpQLSd_0b8jwn-V_JmoPLIxIFYbHACCQhrzidOZV3ELywoQPXRSxw/viewform) हमारे साथ अपने विचार साझा करने में संकोच न करें।