iOS পুশ প্রাইমার
পুশ প্রাইমার হলো একটি সফট অপ্ট-ইন ডায়ালগ যা আপনি iOS সিস্টেম পুশ পারমিশন প্রম্পটের আগে দেখান। iOS প্রতিটি ইন্সটলের জন্য সিস্টেম প্রম্পট মাত্র একবার দেখায় — যদি ব্যবহারকারী Don’t Allow ট্যাপ করে, তাহলে পুশ নোটিফিকেশন বন্ধ হয়ে যায় যতক্ষণ না তারা Settings থেকে এটি আবার চালু করে। প্রাইমার আপনাকে প্রথমে এর সুবিধা ব্যাখ্যা করতে এবং সঠিক মুহূর্তে জিজ্ঞাসা করতে দেয়, যাতে আপনি সেইসব ব্যবহারকারীদের জন্য ওয়ান-শট সিস্টেম প্রম্পট ব্যবহার করতে পারেন যারা ইতিমধ্যেই হ্যাঁ বলেছে।
ভার্সন 7.1.1 থেকে উপলব্ধ। প্রাইমারটি PushwooshFramework-এর একটি অংশ; কোনো অতিরিক্ত মডিউলের প্রয়োজন নেই।

এটি কীভাবে কাজ করে
Anchor link toপ্রাইমারটি সম্পূর্ণভাবে স্টেট-অ্যাওয়ার। এটি বর্তমান নোটিফিকেশন অথরাইজেশন স্ট্যাটাস পড়ে এবং কী করতে হবে তা নির্ধারণ করে, তাই প্রতিটি লঞ্চে এটি কল করা নিরাপদ:
- Not determined — প্রাইমার দেখায়; গ্রহণ করলে এটি সিস্টেম পারমিশন প্রম্পট ট্রিগার করে।
- Authorized or provisional — নিঃশব্দে প্রাইমারটি দমন করে (কিছুই দেখানো হয় না)।
- Denied — প্রাইমার দেখায়; গ্রহণ করলে এটি ব্যবহারকারীকে অ্যাপের নোটিফিকেশন সেটিংসে নিয়ে যায় (যখন
fallbackToSettingsসক্রিয় থাকে)।
আপনি সিদ্ধান্ত নেন কখন প্রাইমার কল করবেন (উদাহরণস্বরূপ, অনবোর্ডিংয়ের পরে বা কোনো মূল অ্যাকশনের পরে)। SDK নিজে থেকে কোনো টাইমিং আরোপ করে না, শুধুমাত্র নিচে বর্ণিত ঐচ্ছিক minInterval থ্রটল ছাড়া।
বেসিক ব্যবহার
Anchor link toএকটি ফ্লুয়েন্ট বিল্ডার দিয়ে প্রাইমার কনফিগার করুন এবং present কল করুন। ন্যূনতম সেটআপের জন্য একটি টাইটেল, একটি মেসেজ এবং দুটি বাটনের টাইটেল প্রয়োজন।
import PushwooshFramework
Pushwoosh.configure.pushPrimer .title("Stay in the loop") .message("Get notified about deals and order updates first") .acceptButton("Enable notifications") .declineButton("Not now") .present()স্টাইল এবং পজিশন
Anchor link toসিস্টেম অ্যালার্ট এবং কাস্টম শিটের মধ্যে বেছে নিতে style ব্যবহার করুন, এবং কাস্টম শিট স্থাপন করতে position ব্যবহার করুন। প্রতিটি পজিশনের নিজস্ব ডিফল্ট ডিজাইন রয়েছে।
| Value | Description |
|---|---|
.alert | সিস্টেম UIAlertController। পজিশন উপেক্ষা করা হয়। |
.sheet + .bottom | নিচের শিট যা উপরে স্লাইড করে, একটি গ্র্যাবার এবং সম্পূর্ণ-প্রস্থের বাটন সহ (ডিফল্ট)। |
.sheet + .top | কমপ্যাক্ট ব্যানার যা উপর থেকে নোটিফিকেশনের মতো নেমে আসে। |
.sheet + .center | কেন্দ্রিক ডায়ালগ যা স্কেল এবং ফেইড ইন হয়। |
Pushwoosh.configure.pushPrimer .style(.sheet) .position(.top) .title("Stay in the loop") .message("Get notified about deals and order updates first") .acceptButton("Enable notifications") .declineButton("Not now") .present()
কাস্টমাইজেশন
Anchor link toসমস্ত ভিজ্যুয়াল সেটিংস ঐচ্ছিক — লাইট এবং ডার্ক মোডের সাথে খাপ খাইয়ে নেওয়া নেটিভ ডিফল্টগুলি ব্যবহার করতে এগুলি বাদ দিন।
Pushwoosh.configure.pushPrimer .style(.sheet) .position(.center) .title("Stay in the loop") .message("Get notified about deals and order updates first") .acceptButton("Enable notifications") .declineButton("Not now") .image(UIImage(named: "PrimerHero")) // local image, or .imageURL("https://…") .backgroundColor(.systemBackground) .titleColor(.label) .messageColor(.secondaryLabel) .acceptButtonColor(.systemBlue) .acceptButtonTextColor(.white) .declineButtonColor(.clear) .declineButtonTextColor(.secondaryLabel) .cornerRadius(24) .buttonCornerRadius(14) .buttonBorderColor(.separator) .present()কাস্টমাইজেশন রেফারেন্স:
| Setter | Description |
|---|---|
image / imageURL | একটি লোকাল UIImage বা একটি রিমোট URL। সেন্টার এবং বটম লেআউটে একটি বৃত্ত হিসাবে এবং টপ ব্যানারে আইকন হিসাবে রেন্ডার করা হয়। একটি লোকাল ইমেজ URL-এর চেয়ে অগ্রাধিকার পায়। |
backgroundColor | কার্ডের সলিড ব্যাকগ্রাউন্ড রঙ। |
backgroundGradient | রঙের একটি অ্যারে যা একটি সফট মাল্টি-কালার গ্রেডিয়েন্ট হিসাবে রেন্ডার করা হয়। backgroundColor-কে ওভাররাইড করে। |
titleColor / messageColor | টাইটেল এবং মেসেজের টেক্সট রঙ। |
acceptButtonColor / acceptButtonTextColor | অ্যাক্সেপ্ট বাটনের ব্যাকগ্রাউন্ড এবং টেক্সট রঙ। অ্যাক্সেপ্ট রঙটি ডিফল্ট আইকনকেও রঙিন করে। |
declineButtonColor / declineButtonTextColor | ডিক্লাইন বাটনের ব্যাকগ্রাউন্ড এবং টেক্সট রঙ। |
cornerRadius | কার্ডের কর্নার রেডিয়াস। |
buttonCornerRadius / buttonBorderColor | উভয় বাটনের কর্নার রেডিয়াস এবং বর্ডার রঙ। |
আচরণগত সেটিংস
Anchor link toসেটিংস ফলব্যাক
Anchor link toডিফল্টরূপে, যখন নোটিফিকেশন ইতিমধ্যেই ডিনাইড থাকে, তখন প্রাইমার দেখানো হয় এবং অ্যাক্সেপ্ট বাটন ব্যবহারকারীকে অ্যাপের নোটিফিকেশন সেটিংসে নিয়ে যায়। ডিনাইড স্টেটে প্রাইমারটি সম্পূর্ণভাবে দমন করতে false পাস করুন।
.fallbackToSettings(false)প্রদর্শনের ফ্রিকোয়েন্সি
Anchor link toডিফল্টরূপে প্রাইমারের কোনো বিল্ট-ইন থ্রটলিং নেই — আপনি যখনই present কল করেন তখনই এটি দেখায় (এবং নোটিফিকেশন অথরাইজড হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে দমন করা হয়)। প্রাইমারটি কত ঘন ঘন পুনরায় প্রদর্শিত হবে তা সীমাবদ্ধ করতে minInterval ব্যবহার করুন। শেষ প্রদর্শনের সময়টি লঞ্চ জুড়ে সংরক্ষিত থাকে।
.minInterval(7 * 24 * 60 * 60) // show at most once a weekফলাফল হ্যান্ডলিং
Anchor link toফলাফলের প্রতিক্রিয়া জানাতে present-এ একটি কমপ্লিশন পাস করুন।
Pushwoosh.configure.pushPrimer .title("Stay in the loop") .message("Get notified about deals and order updates first") .acceptButton("Enable notifications") .declineButton("Not now") .present { outcome in switch outcome { case .accepted: break // shown, user accepted, system prompt requested case .declined: break // shown, user declined case .suppressed: break // not shown (already authorized, or throttled) case .redirectedToSettings: break // denied state, user sent to Settings @unknown default: break } }চূড়ান্ত সিস্টেম-প্রম্পটের ফলাফল (গ্রান্টেড/ডিনাইড স্টেট এবং ডিভাইস টোকেন) নিয়মিত রেজিস্ট্রেশন কলব্যাকের মাধ্যমে আসে — প্রাইমারটি অ্যাক্সেপ্ট করার সময় registerForPushNotifications পুনরায় ব্যবহার করে এবং সেই চেইনটি ডুপ্লিকেট করে না।