# iOS SDK প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

### iOS ইন্টিগ্রেশন প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

#### প্রশ্ন: আমি কীভাবে আমার iOS প্রজেক্টে Pushwoosh SDK ইনস্টল করতে পারি?
আপনি Swift Package Manager অথবা CocoaPods ব্যবহার করে Pushwoosh SDK ইন্টিগ্রেট করতে পারেন।

#### প্রশ্ন: আমি কীভাবে Swift Package Manager ব্যবহার করে Pushwoosh SDK ইনস্টল করব?
Xcode-এ, **Package Dependencies** বিভাগে যান এবং নিম্নলিখিত URL ব্যবহার করে প্যাকেজটি যোগ করুন: `https://github.com/Pushwoosh/Pushwoosh-XCFramework`।

#### প্রশ্ন: আমি কীভাবে CocoaPods ব্যবহার করে Pushwoosh SDK ইনস্টল করব?
আপনার প্রজেক্টের `Podfile` খুলুন এবং `pod 'PushwooshXCFramework'` লাইনটি যোগ করুন। তারপর, টার্মিনালে `pod install` কমান্ডটি চালান।

#### প্রশ্ন: পুশ নোটিফিকেশন সক্রিয় করতে আমার প্রজেক্টে কোন capabilities যোগ করতে হবে?
আপনার প্রজেক্টের সেটিংসে Signing & Capabilities বিভাগে, আপনাকে `Push Notifications` এবং `Background Modes` capabilities যোগ করতে হবে। `Background Modes` যোগ করার সময়, নিশ্চিত করুন যে আপনি `Remote notifications` এর জন্য বক্সটি চেক করেছেন।

#### প্রশ্ন: Time Sensitive Notifications-এর জন্য কোন অতিরিক্ত capability প্রয়োজন?
আপনি যদি Time Sensitive Notifications (iOS 15+) ব্যবহার করতে চান, তাহলে আপনাকে `Time Sensitive Notifications` capability-টিও যোগ করতে হবে।

#### প্রশ্ন: আমাকে Pushwoosh ইনিশিয়ালাইজেশন কোড কোথায় যোগ করতে হবে?
ইনিশিয়ালাইজেশন কোডটি আপনার `AppDelegate` ক্লাসে যোগ করতে হবে।

#### প্রশ্ন: SwiftUI-এর AppDelegate-এ আমার কোন ইনিশিয়ালাইজেশন কোড যোগ করা উচিত?
অনুগ্রহ করে [একটি SwiftUI প্রজেক্টে Pushwoosh ইন্টিগ্রেট করার জন্য প্রদত্ত Swift কোড উদাহরণ](/bn/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate) দেখুন।


#### প্রশ্ন: একটি স্ট্যান্ডার্ড Swift AppDelegate-এ আমার কোন ইনিশিয়ালাইজেশন কোড যোগ করা উচিত?
অনুগ্রহ করে [একটি স্ট্যান্ডার্ড Swift প্রজেক্টে Pushwoosh ইন্টিগ্রেট করার জন্য প্রদত্ত Swift কোড উদাহরণ](/bn/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate) দেখুন।

#### প্রশ্ন: একটি Objective-C AppDelegate-এ আমার কোন ইনিশিয়ালাইজেশন কোড যোগ করা উচিত?
অনুগ্রহ করে [একটি Objective-C প্রজেক্টে Pushwoosh ইন্টিগ্রেট করার জন্য প্রদত্ত Objective-C কোড উদাহরণ](/bn/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate) দেখুন।

#### প্রশ্ন: আমার Info.plist ফাইলে কোন কী যোগ করতে হবে?
আপনাকে আপনার অ্যাপের `Info.plist` ফাইলে `Pushwoosh_APPID` কী আপনার অ্যাপ্লিকেশন কোডে সেট করতে হবে এবং `PW_API_TOKEN` কী আপনার API টোকেনে সেট করতে হবে।

#### প্রশ্ন: মেসেজ ডেলিভারি ট্র্যাকিংয়ের উদ্দেশ্য কী?
Pushwoosh Notification Service Extension ব্যবহার করে পুশ নোটিফিকেশনের জন্য ডেলিভারি ইভেন্ট ট্র্যাকিং সমর্থন করে।

#### প্রশ্ন: আমি কীভাবে আমার প্রজেক্টে একটি Notification Service Extension যোগ করব?
Xcode-এ, **File** > **New** > **Target...**-এ যান, **Notification Service Extension** নির্বাচন করুন এবং **Next** চাপুন। একটি টার্গেট নাম লিখুন এবং **Finish** চাপুন। সক্রিয় করার জন্য অনুরোধ করা হলে, **Cancel** চাপুন।

#### প্রশ্ন: আমি কীভাবে Notification Service Extension-এ Pushwoosh SDK যোগ করব?
আপনার Notification Service Extension-এর প্রধান `.swift` বা `.m` ফাইলে [প্রদত্ত Swift বা Objective-C কোড স্নিপেট](/bn/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#add-pushwoosh-sdk-to-notification-service-extension) যোগ করুন। এই কোডটি নোটিফিকেশন অনুরোধ পরিচালনা করতে `PWNotificationExtensionManager` ব্যবহার করে।

#### প্রশ্ন: App Groups-এর উদ্দেশ্য কী?
Notification Service Extension-কে প্রধান অ্যাপ্লিকেশনের সাথে যোগাযোগ করার অনুমতি দেওয়ার জন্য App Groups capability প্রয়োজন।

#### প্রশ্ন: আমি কীভাবে আমার প্রধান টার্গেট এবং Notification Service Extension-এর জন্য App Groups সক্রিয় করব?
উভয় টার্গেটের জন্য, **Signing & Capabilities**-এ যান, **App Groups** capability যোগ করুন এবং + বোতাম টিপে একটি নতুন গ্রুপ তৈরি করুন। নিশ্চিত করুন যে গ্রুপের নাম `group.` দিয়ে শুরু হয় এবং উভয় টার্গেটের জন্য একই গ্রুপের নাম ব্যবহার করুন।

#### প্রশ্ন: App Groups-এর জন্য আমার প্রধান টার্গেটের Info.plist-এ কোন কী যোগ করতে হবে?
আপনার প্রধান টার্গেটের `Info.plist`-এ, `PW_APP_GROUPS_NAME` কী যোগ করুন এবং এর মান আপনার App Groups গ্রুপের নামে সেট করুন।

#### প্রশ্ন: আমার Notification Service Extension-এর Info.plist-এ কোন কী যোগ করতে হবে?
আপনার Notification Service Extension-এর `Info.plist`-এ, `PW_APP_GROUPS_NAME` কী (আপনার App Groups-এর নামে সেট করা) এবং `Pushwoosh_APPID` কী (আপনার অ্যাপ্লিকেশন কোডে সেট করা) যোগ করুন।

#### প্রশ্ন: আমি কীভাবে Pushwoosh ইন্টিগ্রেশন যাচাই করব?
আপনার প্রজেক্ট বিল্ড এবং রান করার পরে, Pushwoosh Control Panel-এ যান এবং আপনার অ্যাপ্লিকেশনে একটি পুশ নোটিফিকেশন পাঠান। আপনার ডিভাইসে নোটিফিকেশনটি দেখতে পাওয়া উচিত।

#### প্রশ্ন: Pushwoosh SDK-তে পুশ নোটিফিকেশন পরিচালনার জন্য দুটি প্রধান কলব্যাক কী কী?
দুটি প্রধান কলব্যাক হল `onMessageReceived` এবং `onMessageOpened`।

#### প্রশ্ন: `onMessageReceived` কলব্যাক কখন কল করা হয়?
অ্যাপ্লিকেশন দ্বারা একটি পুশ নোটিফিকেশন গৃহীত হলে `onMessageReceived` মেথডটি কল করা হয়।

#### প্রশ্ন: `onMessageOpened` কলব্যাক কখন কল করা হয়?
ব্যবহারকারী যখন একটি পুশ নোটিফিকেশনের সাথে ইন্টারঅ্যাক্ট করে এবং খোলে তখন `onMessageOpened` মেথডটি কল করা হয়।

#### প্রশ্ন: আমি কীভাবে একটি প্রাপ্ত বা খোলা পুশ নোটিফিকেশনের পেলোড অ্যাক্সেস করতে পারি?
একটি `PWMessage` অবজেক্টের পেলোড (`onMessageReceived` এবং `onMessageOpened` কলব্যাকে পাস করা) তার `payload` প্রপার্টির মাধ্যমে অ্যাক্সেস করা যেতে পারে।

#### প্রশ্ন: আমি কীভাবে Pushwoosh-এ একটি ইউজার আইডি সেট করতে পারি?
`Pushwoosh.sharedInstance()` অবজেক্টের `setUserId(_:)` মেথডটি ব্যবহার করুন, ব্যবহারকারীর আইডি একটি আর্গুমেন্ট হিসাবে পাস করে।

#### প্রশ্ন: আমি কীভাবে Pushwoosh-এ একজন ব্যবহারকারীর ইমেল ঠিকানা সেট করতে পারি?
`Pushwoosh.sharedInstance()` অবজেক্টের `setEmail(_:)` মেথডটি ব্যবহার করুন, ব্যবহারকারীর ইমেল সরবরাহ করে।

#### প্রশ্ন: আমি কীভাবে Pushwoosh-এ ট্যাগ হিসাবে অতিরিক্ত ব্যবহারকারীর তথ্য সেট করতে পারি?
`Pushwoosh.sharedInstance()` অবজেক্টের `setTags(_:)` মেথডটি ব্যবহার করুন, একটি ডিকশনারি পাস করে যেখানে কীগুলি হল ট্যাগের নাম এবং মানগুলি হল সংশ্লিষ্ট ট্যাগের মান।

#### প্রশ্ন: আমি কীভাবে অতিরিক্ত অ্যাট্রিবিউট সহ একটি ব্যবহারকারী ইভেন্ট ট্র্যাক করতে পারি?**
`PWInAppManager.shared()`-এর `postEvent(_:withAttributes:)` মেথডটি ব্যবহার করুন, ইভেন্টের নাম (যেমন, `"login"`) এবং অ্যাট্রিবিউটের একটি ডিকশনারি (যেমন, `"name"`, `"last_login"`) সরবরাহ করে।

#### প্রশ্ন: আমি কীভাবে পণ্যের বিবরণ সহ একটি ব্যবহারকারী ক্রয় ইভেন্ট ট্র্যাক করতে পারি?
`PWInAppManager.shared()`-এর `postEvent(_:withAttributes:)` মেথডটি `"purchase"` ইভেন্টের নাম এবং পণ্যের বিবরণ যেমন `"product_id"`, `"product_name"`, `"price"`, এবং `"quantity"` সম্বলিত একটি ডিকশনারি সহ ব্যবহার করুন।

#### প্রশ্ন: আমি কীভাবে রিচ মিডিয়া উপস্থাপনা পরিচালনা করার জন্য একটি ডেলিগেট সেট আপ করব?
আপনার ভিউ কন্ট্রোলার বা অন্য উপযুক্ত ক্লাসে, `PWRichMediaPresentingDelegate` প্রোটোকল মেনে চলুন এবং `PWRichMediaManager.shared()`-এর `delegate` প্রপার্টি আপনার কনফর্মিং ইনস্ট্যান্সে সেট করুন।

#### প্রশ্ন: আমি কীভাবে রিচ মিডিয়ার উপস্থাপনা শৈলী কনফিগার করতে পারি?
`PWModalWindowConfiguration.shared()` অবজেক্টটি ব্যবহার করে `configureModalWindow(with:present:dismiss:)` মেথডের মাধ্যমে মোডাল উইন্ডো পজিশন এবং প্রেজেন্ট/ডিসমিস অ্যানিমেশনের মতো প্রপার্টি কনফিগার করুন।

#### প্রশ্ন: রিচ মিডিয়া ডেলিগেট মেথডগুলিতে আমি কোন তথ্য অ্যাক্সেস করতে পারি?**
ডেলিগেট মেথডগুলি `PWRichMedia` অবজেক্টে অ্যাক্সেস প্রদান করে, যা রিচ মিডিয়া বিষয়বস্তু সম্পর্কে তথ্য ধারণ করে, যার মধ্যে তার `pushPayload` রয়েছে। `presentingDidFailForRichMedia:withError:` মেথডটি ব্যর্থতার বর্ণনা দিয়ে একটি `Error` অবজেক্টও প্রদান করে।


### সমস্যা সমাধান

<Aside type="caution">
লোড ব্যালেন্সিংয়ের উদ্দেশ্যে আমাদের আপনার অ্যাপ্লিকেশনে API এন্ডপয়েন্ট পরিবর্তন করার প্রয়োজন হতে পারে। এটি স্বয়ংক্রিয়ভাবে ঘটে এবং আমাদের SDK দ্বারা পরিচালিত হয়। **অনুগ্রহ করে নিশ্চিত করুন যে আপনার অ্যাপে \*.pushwoosh.com সম্বলিত কোনো URL-এ অ্যাক্সেস ব্লক করা নেই।**
</Aside>

<Aside type="note">
#### আপনি যদি ফায়ারওয়ালের পিছনে থাকেন বা আপনার ওয়াইফাই রাউটার ফায়ারওয়াল হিসাবে কাজ করে

যদি আপনার ডিভাইসটি ওয়াইফাইয়ের মাধ্যমে ইন্টারনেটের সাথে সংযুক্ত থাকে এবং মেসেজগুলি ডিভাইসে না পৌঁছায়, অনুগ্রহ করে **নিশ্চিত করুন যে APNs পোর্টগুলি আপনার ফায়ারওয়াল দ্বারা ব্লক করা নেই।**\
পুশ প্রোভাইডার, iOS ডিভাইস এবং ম্যাক কম্পিউটারগুলি প্রায়শই ফায়ারওয়ালের পিছনে থাকে। নোটিফিকেশন পাঠাতে, আপনাকে পোর্ট 2195-এর উপর ইনবাউন্ড এবং আউটবাউন্ড TCP প্যাকেটগুলিকে অনুমতি দিতে হবে। **ওয়াইফাইয়ের মাধ্যমে পুশ সার্ভিসে সংযোগকারী ডিভাইস এবং কম্পিউটারগুলিকে পোর্ট 5223-এর উপর ইনবাউন্ড এবং আউটবাউন্ড TCP প্যাকেটগুলিকে অনুমতি দিতে হবে।**\
পুশ সার্ভিসের জন্য আইপি ঠিকানার পরিসর পরিবর্তন হতে পারে; প্রোভাইডারদের আইপি ঠিকানার পরিবর্তে হোস্টনেম দ্বারা সংযোগ করার কথা। পুশ সার্ভিস একটি লোড ব্যালেন্সিং স্কিম ব্যবহার করে যা একই হোস্টনেমের জন্য একটি ভিন্ন আইপি ঠিকানা দেয়। যাইহোক, সম্পূর্ণ 17.0.0.0/8 ঠিকানা ব্লকটি অ্যাপলকে বরাদ্দ করা হয়েছে, তাই আপনি আপনার ফায়ারওয়াল নিয়মে সেই পরিসরটি নির্দিষ্ট করতে পারেন।
</Aside>

#### প্রশ্ন: "Your provisioning profile does not have APS entry" ত্রুটি

আপনি যদি "Your provisioning profile does not have APS entry." ত্রুটি বার্তাটি দেখেন, তাহলে নিশ্চিত করুন যে আপনার প্রভিশনিং প্রোফাইলটি পুশ সামঞ্জস্যপূর্ণ এবং এতে `production` বা `development` মান সহ `aps-environment` স্ট্রিং রয়েছে। এটি পরীক্ষা করার সবচেয়ে সহজ উপায় হল যেকোনো টেক্সট এডিটরে মোবাইল প্রভিশনিং প্রোফাইলটি খোলা এবং `aps-environment` স্ট্রিংটি খোঁজা। এটি সেখানে থাকা উচিত।

যদি এটি থাকে, এবং আপনি ত্রুটিটি পেতে থাকেন, তার মানে হল যে XCode এখনও একটি "নন পুশ-সামঞ্জস্যপূর্ণ" প্রোফাইল বেছে নিচ্ছে। অনুগ্রহ করে নিশ্চিত করুন যে আপনি সঠিকটি দিয়ে সাইন করছেন - কখনও কখনও যদি আপনার একই অ্যাপ আইডির জন্য দুটি প্রোফাইল থাকে তবে XCode জিনিসগুলি গোলমাল করে এবং পুরানোটি দিয়ে সাইন করে।

প্রস্তাবিত পদক্ষেপগুলি হল:

1. সমস্ত XCode প্রোফাইল [সরিয়ে ফেলুন](https://stackoverflow.com/questions/18923095/delete-provisioning-profile-from-xcode-5);
2. একটি এবং শুধুমাত্র নতুন প্রোফাইলটি যোগ করুন;
3. অ্যাপটি পুনরায় বিল্ড করুন।

#### প্রশ্ন: iOS পুশ টোকেন এবং hwid দেখতে কেমন?

iOS ডিভাইস পুশ টোকেন হল 64টি হেক্সাডেসিমেল প্রতীক সহ স্ট্রিং। পুশ টোকেনের উদাহরণ:\
`03df25c845d460bcdad7802d2vf6fc1dfde97283bf75cc993eb6dca835ea2e2f`\
নিশ্চিত করুন যে আপনার API অনুরোধে নির্দিষ্ট ডিভাইসগুলিকে টার্গেট করার সময় আপনি যে iOS পুশ টোকেনগুলি ব্যবহার করেন সেগুলি **ছোট হাতের অক্ষরে** আছে।

Pushwoosh IDFV-কে ডিভাইস HWID হিসাবে ব্যবহার করে। মনে রাখবেন যে ব্যবহারকারী যদি একটি নির্দিষ্ট বিক্রেতার সমস্ত অ্যাপ পুনরায় ইনস্টল করে তবে এটি পরিবর্তন হতে পারে।

`CBAF8ED1-17FB-49A3-73BD-DC79B63AEF93`

#### প্রশ্ন: আমার অ্যাপ চলার সময় আমি কীভাবে ব্যানার চালু এবং বন্ধ করব?

ডিফল্টরূপে আমাদের সর্বশেষ iOS SDK অ্যাপটি ফোরগ্রাউন্ডে চলার সময় নোটিফিকেশন ব্যানার প্রদর্শন করে।\
আপনি Info.plist-এ নিম্নলিখিত ফ্ল্যাগগুলি পরিবর্তন করে এই আচরণ নিয়ন্ত্রণ করতে পারেন:

ফ্ল্যাগ `Pushwoosh_ALERT_TYPE` – স্ট্রিং টাইপ, মানগুলি হল:

* `BANNER` – ডিফল্ট মান, ইন-অ্যাপ ব্যানার অ্যালার্ট প্রদর্শন করে
* `ALERT` – অ্যালার্ট নোটিফিকেশন
* `NONE` – অ্যাপটি ফোরগ্রাউন্ডে থাকলে নোটিফিকেশন দেখাবেন না

#### প্রশ্ন: আমি কীভাবে Test Devices-এ ব্যবহারের জন্য আমার iOS ডিভাইস পুশ টোকেন পেতে পারি?

আপনার iOS ডিভাইস পুশ টোকেন পেতে,

1. Xcode => Devices & Simulators খুলুন;
2. আপনার কম্পিউটারের সাথে টেস্ট ডিভাইসটি সংযুক্ত করুন;
3. বাম দিকের ডিভাইসের তালিকায় আপনার সংযুক্ত ডিভাইসটি নির্বাচন করুন;
4. Open Console বোতামে ক্লিক করুন।

<img src="/ios-push-notifications-ios-faq-1.webp" alt=""/>

যে অ্যাপ্লিকেশনটির জন্য আপনার ডিভাইস পুশ টোকেন প্রয়োজন সেটি চালু করুন, এবং "Registered for push notifications" লাইনে আপনার 64টি হেক্সাডেসিমেল অক্ষরের ডিভাইস পুশ টোকেনটি খুঁজুন:

<img src="/ios-push-notifications-ios-faq-2.webp" alt=""/>

#### প্রশ্ন: আমি আমার অ্যাপ আনইনস্টল করে অল্প সময়ের মধ্যে পুনরায় ইনস্টল করার পরে ব্যাজগুলি কেন ক্লিয়ার হয় না?

এটি একটি প্রত্যাশিত আচরণ - ব্যাজগুলি iOS নিজেই পরিচালনা করে এবং এর মানগুলি অ্যাপ্লিকেশন প্রেফারেন্সে সংরক্ষণ করা হয়, যা আপনি আপনার অ্যাপ আনইনস্টল করার সময় সঙ্গে সঙ্গে সরানো হয় না। অবিলম্বে পুনরায় ইনস্টলেশনের ক্ষেত্রে একটি ব্যাজের মান কিছু সময়ের জন্য সেখানে থেকে যায়, যার ফলে একটি অ্যাপ পুনরায় ইনস্টল করার পরে একই ব্যাজ দেখানো হয়।