# অ্যান্ড্রয়েড অ্যাপে Pushwoosh লোকেশন মডিউল ব্যবহার করা

<Aside type="caution">
দয়া করে মনে রাখবেন যে জিও-ভিত্তিক মেসেজিং HMS (Huawei Mobile Services) ডিভাইসের জন্য উপলব্ধ নয় কারণ এটি Google লোকেশন সার্ভিসের উপর ভিত্তি করে তৈরি।
</Aside>

অ্যান্ড্রয়েডে দুটি লোকেশন অ্যাক্সেস বিভাগ রয়েছে:

*   **ফোরগ্রাউন্ড** লোকেশন অ্যাক্সেস
*   **ব্যাকগ্রাউন্ড** লোকেশন অ্যাক্সেস

**ফোরগ্রাউন্ডে** ব্যবহারকারীর লোকেশন আপডেট করার জন্য, নিম্নলিখিত শর্তগুলির মধ্যে একটি পূরণ করতে হবে:

*   অ্যাপের একটি অ্যাক্টিভিটি সক্রিয় আছে
*   অ্যাপের জন্য foregroundServiceType = “location” এর একটি ফোরগ্রাউন্ড সার্ভিস চালু করা হয়েছে

**ব্যাকগ্রাউন্ড** অ্যাক্সেস অ্যাপটিকে ব্যবহারকারীর জিওলোকেশন পেতে দেয় যখন অ্যাপটি নিষ্ক্রিয় থাকে, এবং সেই অ্যাপের জন্য “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="Deprecated">

Android 12 আপডেটের কারণে, ForegroundService সঠিকভাবে কাজ করতে পারে না, তাই এটি ডেপ্রিকেটেড এবং ভবিষ্যতে Pushwoosh SDK থেকে সরানো হবে।

ব্যাকগ্রাউন্ডে ব্যবহারকারীদের লোকেশন ট্র্যাক করার জন্য এখানে কিছু সমাধান রয়েছে:

1.  31 এর পরিবর্তে targetSdkVersion 30 ব্যবহার করুন। দয়া করে মনে রাখবেন যে Android 12-এ উপস্থিত বৈশিষ্ট্যগুলি সেক্ষেত্রে উপলব্ধ হবে না।
2.  আপনার ব্যবহারকারীদেরকে আপনার অ্যাপের জন্য ব্যাটারি অপটিমাইজেশন নিষ্ক্রিয় করতে বলুন যাতে ForegroundService ব্যাকগ্রাউন্ডে শুরু হতে পারে।
</Aside>

**ForegroundService** চালু করার জন্য যখন `startLocationTracking` মেথডটি কল করা হয়, যা আপনার অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে থাকাকালীন ব্যবহারকারীর জিওলোকেশন পেতে দেয়, [পূর্ববর্তী অনুচ্ছেদে](#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">
দয়া করে নিশ্চিত করুন যে ব্যবহারকারীদের কাছে স্পষ্টভাবে ব্যাখ্যা করা হয়েছে যে আপনার অ্যাপ কেন এবং কী উদ্দেশ্যে তাদের ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস করতে চায়। বিস্তারিত জানতে [Android ডেভেলপার গাইড](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>

## Android 12+ পারমিশনের প্রকারভেদ

[Android 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)।