পুশ বিজ্ঞপ্তি সহ খাদ্য সরবরাহের জন্য অ্যাপ তৈরি করতে কীভাবে সুইফট ব্যবহার করবেন use

পেনসেল থেকে ফ্যানসিক্রাভের ছবি

এই টিউটোরিয়ালটি অনুসরণ করার জন্য সুইফট এবং নোড.জেএস সম্পর্কে একটি প্রাথমিক বোঝার প্রয়োজন।

শেষ মাইল বিতরণ পরিষেবা বাজারে, আপনি সহজেই কোনও মোবাইল ডিভাইস থেকে মুদিগুলি অর্ডার করতে পারেন এবং তারা এখনও গরম থাকা অবস্থায় তাদের ব্যবহারকারীর দ্বারে পৌঁছে দিতে পারেন।

ডেলিভারু, পোস্টমেটস বা উবার ইটসের মতো বাজারের স্থানগুলি আপনাকে আপনার কাছাকাছি অবস্থিত রেস্তোঁরাগুলির একটি তালিকা দেখানোর জন্য আপনার ডিভাইসের অবস্থান ব্যবহার করে (এবং উন্মুক্ত) যাতে আপনি যত তাড়াতাড়ি সম্ভব আপনার ডেলিভারিটি পেতে পারেন।

গ্রাহক, রেস্তোঁরা এবং ড্রাইভারের মধ্যে এই বাস্তব সময়ের অভিজ্ঞতাটি নির্বিঘ্নে রান্নাঘর থেকে টেবিলের দিকে অর্ডার সরিয়ে নিতে লেনদেনের সময় পুশ বিজ্ঞপ্তিগুলির উপর নির্ভর করে। গ্রাহকরা যখন তাদের অর্ডারটি চলবে এবং যখন তাদের দরজার ড্রাইভারটির সাথে দেখা করতে হবে তখন পুশ নোটিফিকেশনের মাধ্যমে অবহিত হতে চান।

পুশ বিজ্ঞপ্তিগুলি সেট আপ করা বিভ্রান্তিকর এবং সময়সাপেক্ষ হতে পারে। পুশারের পুশ নোটিফিকেশনস এপিআই সহ তবে প্রক্রিয়াটি অনেক সহজ এবং দ্রুত।

এই নিবন্ধে, আমরা কীভাবে আইওএসের জন্য লেনদেনের পুশ বিজ্ঞপ্তিগুলি সহ অ্যাপ্লিকেশনগুলি তৈরি করবেন সে সম্পর্কে চিন্তা করতে যাচ্ছি। এই উদ্দেশ্যে, আমরা খাবার সরবরাহের জন্য একটি ফ্যান্টাসি অ্যাপ বিকাশ করব।

পূর্বশর্ত

  • এক্সকোড সহ একটি ম্যাক ইনস্টল করা হয়েছে। এক্সকোডটি এখানে ডাউনলোড করুন।
  • এক্সকোড ব্যবহারের জ্ঞান।
  • সুইফ্ট জ্ঞান।
  • একটি পুশার অ্যাকাউন্ট এখানে একটি তৈরি করুন।
  • জাভাস্ক্রিপ্ট / নোড.জেএস এর প্রাথমিক জ্ঞান (এই টিউটোরিয়ালটি দেখুন)।
  • আপনার কম্পিউটারে কোকোপড ইনস্টল করা হয়েছে।

আপনার প্রয়োজনীয়তাগুলি একবার হয়ে গেলে আপনি যেতে প্রস্তুত।

আমাদের আবেদনের কাঠামো - পরিকল্পনা

আমরা আমাদের অ্যাপ্লিকেশন তৈরি শুরু করার আগে, অ্যাপ্লিকেশনটি কীভাবে কাজ করা উচিত সে সম্পর্কে আমাদের কিছু পরিকল্পনা করা দরকার।

আমরা তিনটি অনুরোধ করব:

  • ব্যাকএন্ড অ্যাপ্লিকেশন (ওয়েব Node.js ব্যবহার করে)।
  • ক্লায়েন্ট অ্যাপ্লিকেশন (সুইফট সহ আইওএস)।
  • অ্যাডমিন অ্যাপ্লিকেশন (সুইফট সহ আইওএস)।

ব্যাকএন্ড অ্যাপ্লিকেশন

এটি হবে এপিআই। সরলতার জন্য, আমরা এপিআই-তে কোনও প্রমাণীকরণ যুক্ত করব না। আমরা আমাদের আইওএস অ্যাপ্লিকেশনগুলি থেকে এপিআই কল করব। API টি খাদ্য তালিকা এবং আদেশ সরবরাহের পাশাপাশি অর্ডারগুলি পরিচালনা করতে সক্ষম হওয়া উচিত। আমরা ব্যাকএন্ড অ্যাপ্লিকেশন থেকে পুশ বিজ্ঞপ্তিগুলিও প্রেরণ করব।

ক্লায়েন্ট অ্যাপ্লিকেশন

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

অ্যাডমিন অ্যাপ্লিকেশন

এটি সেই অ্যাপ্লিকেশন যার সাহায্যে পরিষেবা সরবরাহকারী সংস্থা আদেশ কার্যকর করে। অ্যাপ্লিকেশনটি উপলভ্য অর্ডারগুলি প্রদর্শন করে এবং প্রশাসক প্রতিটি আদেশের জন্য স্থিতি সেট করতে পারেন।

ব্যাকএন্ড অ্যাপ্লিকেশন (এপিআই) তৈরি করা হচ্ছে

আমরা প্রথম যে জিনিসটি তৈরি করতে চাই তা হ'ল এপিআই। আমাদের আইওএস অ্যাপ্লিকেশনগুলিকে সমর্থন করার জন্য প্রয়োজনীয় সমস্ত কিছু আমরা যুক্ত করব এবং পরে পুশ বিজ্ঞপ্তি যুক্ত করব।

প্রথমে API এর জন্য একটি প্রকল্প ডিরেক্টরি তৈরি করুন। ডিরেক্টরিতে, প্যাকেজ.জসন নামে একটি নতুন ফাইল তৈরি করুন। ফাইলটিতে নিম্নলিখিতগুলি যুক্ত করুন:

main "প্রধান": "index.js", "স্ক্রিপ্ট": {}, "নির্ভরতা": body "বডি পার্সার": "^ 1.18.2", "এক্সপ্রেস": "^ 4.16.2"}

তারপরে আপনার টার্মিনালে নিম্নলিখিত কমান্ডটি প্রয়োগ করুন:

Install n pm ইনস্টল করুন

এটি তালিকাভুক্ত সমস্ত নির্ভরতা ইনস্টল করবে। এরপরে, প্যাকেজ.জসন ফাইলের মতো একই ডিরেক্টরিতে একটি index.js ফাইল তৈরি করুন এবং নিম্নলিখিত কোডটি আটকে দিন:

// ------------------------------------------------ -------- // পাঠাগারগুলি পড়ুন // ------------------------------------ ------------ -------- কনট অ্যাপ = প্রয়োজন ('এক্সপ্রেস') () কনস্ট বডি পার্সার = প্রয়োজন ('বডি পার্সার') // ------ ------------------------------------------------ // সহায়ক // --------------------------------------------- --- -------- ফাংশন uuidv4 () {রিটার্ন 'এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স -4xxx-ইএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সপ্লেস (/ [এক্সওয়াই] / জি, ফাংশন (সি) {ভের আর = ম্যাথ.রেন্ডম ( ) * 16 | 0, v = c == 'x'? আর: (আর & 0x3 | 0x8); রিটার্ন v.toString (16);}); } // ----------------------------------------------- - -------- // ইন-মেমরি ডাটাবেস // -------------------------------- ---------------- -------- var ইউজার_আইডি = নাল ওয়ার অর্ডার = [] ইনভেন্টরি ছেড়ে দিন = [: আইডি: uuidv4 (), নাম: "পিজ্জা মার্গারিটা" , বর্ণনা: "টমেটো, মোজারেলা, তুলসী এবং অতিরিক্ত কুমারী জলপাইয়ের তেল দিয়ে" "পরিমাণ: 39.99, চিত্র: 'পিজা1'}, {আইডি: uuidv4 (), নাম:" বেকন চিজ ফ্রাই ", বর্ণনা:" টমেটো বৈশিষ্ট্যযুক্ত , বেকন, পনির, তুলসী এবং তেল ", পরিমাণ: 29.99, চিত্র: 'পিজা 2'}] // ------------------------- ----------------------- -------- // এক্সপ্রেস মিডলওয়্যার // ------------- ----------------------------------- -------- app.use (বডি পার্সার.জসন ()) app.use (বডি পার্সার.উরলিনকোড ({প্রসারিত: মিথ্যা})) // ------------------------------ ------------------ -------- // রো uten // ----------------------------------------------- - -------- app.get ('/ অর্ডার', (req, res) => res.json (আদেশ)) app.post ('/ আদেশ', (req, res) => {যাক আইডি = uuidv4 () ব্যবহারকারীর_আইডি = req.body.user_id পিজ্জা = ইনভেন্টরি.ফাইন্ড (আইটেম => আইটেম ["আইডি"] === req.body.p পিজা_id) যদি (! পিজ্জা) {রিটার্ন রেস.জসন ({স্ট্যাটাস: মিথ্যা})} অর্ডারস.উনশিফ্ট ({আইডি, ইউজার_আইডি, পিজ্জা, স্ট্যাটাস: "মুলতুবি"}) রেজ.জসন ({স্ট্যাটাস: ট্রু})}) অ্যাপ.পুট (' / আদেশ /: id ', (req, res) => {আদেশ দিন = আদেশ.ফাইন্ড করুন (অর্ডার => অর্ডার ["আইডি"] === req.params.id) যদি (! আদেশ) {রিটার্ন করুন.জসন ({স্থিতি: মিথ্যা})} আদেশ [আদেশ.indexOf (আদেশ)] ["স্থিতি"] = req.body.status রিটার্ন res.json ({অবস্থা: সত্য})}) app.get ('/ ইনভেন্টরি', (req, res) => res.json (ইনভেন্টরি)) app.get ('/', (req, res) => res.json ({স্ট্যাটাস: "সাফল্য"})) // ------ ------------------------------------------------ // বিতরণ আবেদন // -------------------------------------------- ---- -------- app.listen (4000, _ => কনসোল.লগ ('অ্যাপ 4000 পোর্টে শুনছে!'))

উপরের কোডটি একটি সাধারণ এক্সপ্রেস অ্যাপ্লিকেশন। সবকিছু স্ব-বর্ণনামূলক এবং মন্তব্য সহ সরবরাহ করা।

প্রথম রুট / অর্ডারগুলি মেমরির ডেটা স্টোরগুলিতে উপলব্ধ অর্ডারগুলির তালিকা প্রদর্শন করে। দ্বিতীয় রুটে, পোষ্ট / অর্ডারগুলি, আমরা কেবলমাত্র আদেশের তালিকায় একটি নতুন আদেশ যুক্ত করি। তৃতীয় রুটে, পুট / অর্ডার /: আইডি, আমরা কেবলমাত্র আদেশের তালিকা থেকে একটি একক আদেশের স্থিতি পরিবর্তন করি। চতুর্থ রুটে, জিইটি / ইনভেন্টরিতে, আমরা ডাটাবেজে ইনভেন্টরি তালিকা থেকে পাওয়া তালিকাটি তালিকাভুক্ত করি।

আমরা আপাতত এপিআই দিয়ে শেষ করেছি এবং যখন পুশ নোটিফিকেশন কোড যুক্ত করা দরকার তখন এটি আবার কল করব। API কাজ করে কিনা তা পরীক্ষা করতে আপনার টার্মিনালে নিম্নলিখিত কমান্ডটি চালান:

ode নোড index.js

এটি একটি নতুন নোড সার্ভার শুরু করে যা 4000 পোর্ট পর্যবেক্ষণ করে।

একটি ক্লায়েন্ট অ্যাপ্লিকেশন তৈরি করুন

এরপরে আমাদের এক্সকোডে ক্লায়েন্ট অ্যাপ্লিকেশনটি তৈরি করতে হবে। প্রথমে এক্সকোড শুরু করুন এবং একটি নতুন "একক অ্যাপ্লিকেশন" প্রকল্প তৈরি করুন। আমরা আমাদের প্রজেক্টটিকে পিজাজারিয়া ক্লায়েন্ট বলব।

প্রকল্পটি তৈরি করার পরে, এক্সকোড থেকে প্রস্থান করুন এবং আপনার সদ্য নির্মিত এক্সকোড প্রকল্পের মূল ডিরেক্টরিতে পডফিল নামে একটি নতুন ফাইল তৈরি করুন। নিম্নলিখিত কোডটি ফাইলটিতে আটকান:

প্ল্যাটফর্ম: আইওএস, '11 .0 '
'পিজ্জারিয়া ক্লায়েন্ট' ব্যবহারের_ফ্রেমওয়ার্কগুলি করার লক্ষ্য! পড 'পুশারসুইফ্ট', '5> 5.1.1' পড 'অ্যালামোফায়ার', '~> 4.6.0' শেষ

উপরের ফাইলে, আমরা নির্ভরশীলতাগুলি নির্দিষ্ট করেছি যা প্রকল্পটি অবশ্যই কার্যকর করা উচিত। উপরের লক্ষ্যটি আপনার প্রকল্পের নামে পরিবর্তন করতে ভুলবেন না। নির্ভরতা ইনস্টল করতে এখন আপনার টার্মিনালে নিম্নলিখিত কমান্ডটি চালান:

$ শুঁটি ইনস্টল করুন

ইনস্টলেশন সমাপ্ত হলে, কোকোপডস দ্বারা উত্পাদিত Xcode ওয়ার্কস্পেস ফাইলটি খুলুন। এটি এক্সকোড পুনরায় আরম্ভ করা উচিত।

এক্সকোড পুনরায় চালু করার পরে, মেইন.স্টরিবোর্ড ফাইলটি খুলুন। এটিতে আমরা আমাদের ক্লায়েন্ট অ্যাপ্লিকেশনটির জন্য স্টোরিবোর্ড তৈরি করি। নীচে আমরা কীভাবে আমাদের স্টোরিবোর্ডটি তৈরি করেছি তার একটি স্ক্রিনশট রয়েছে:

প্রথম দৃশ্যটি নেভিগেশন ভিউ কন্ট্রোলার, এতে রুট কন্ট্রোলার হিসাবে একটি টেবিল ভিউ নিয়ামক রয়েছে। নেভিগেশন নিয়ন্ত্রক হ'ল আসল নিয়ামক যা অ্যাপ্লিকেশন শুরু হওয়ার পরে লোড হয়।

পিজ্জা তালিকার দৃশ্য তৈরি করুন

দ্বিতীয় দৃশ্যটি ভিউ কন্ট্রোলার যা উপলভ্য তালিকাটি তালিকাভুক্ত করে।

এক্সকোডে, পিজ্জাটবেললিস্টভিউ কন্ট্রোলআর সুইফট নামে একটি নতুন ফাইল তৈরি করুন, এটি দ্বিতীয় দৃশ্যের জন্য কাস্টম ক্লাস করুন এবং নীচের কোডটি আটকে দিন:

ইউআইকিট আমদানি আলমোফায়ার আমদানি করুন
ক্লাস পিজ্জালিস্টেবল ভিউ কন্ট্রোলার: ইউআইটিএবলভিউকন্ট্রোলার {
বিভিন্ন পিজ্জা: [পিজ্জা] = []
ওভাররাইড ফানক ভিডডিলডোড ()। সুপার.ভিউডিডলড ()
নেভিগেশনআইটেম.টাইটেল = "পিজ্জা নির্বাচন করুন"
ফিচারআইভেন্টরি {গার্ড পিজ্জাতে পিজ্জা! = আর কিছুই নয় {ফিরুন} স্ব.পিজা = পিজ্জা! self.tableView.reloadData ()}}
প্রাইভেট ফান ফ্যাচ ইনভেন্টরি (সমাপ্তি: @ এস্কেপিং ([পিজ্জা]?) -> শূন্য) {অ্যালামোফায়ার.রেইকুয়েস্ট ("http://127.0.0.1:4000/inventory", পদ্ধতি: .get)। কনফার্ম () .গ্রাহ্য জেএসএন {উত্তর in গার্ড রেসপন্স.সাল্ট.আইসসসেস অ্যাক্সেস {রিটার্নের সমাপ্তি (নাল)} ঘড়িটি কাঁচা রেখে দিন? [[স্ট্রিং: যে কোনও]?] অন্য {রিটার্ন সমাপ্তি (শূন্য)}
যাক ইনভেন্টরি = কাঁচালাইভেন্টরি.ফ্ল্যাটম্যাপ {পিজাডিক্ট -> পিজ্জা? ভার ডেটাতে = পিজাডিক্ট! ডেটা ["চিত্র"] = ইউআইআইমেজ (নাম দেওয়া হয়েছে: পিজাডিক্ট! ["চিত্র"] হিসাবে! স্ট্রিং)
পিজ্জা রিটার্ন (তারিখ: তারিখ)}
সমাপ্তি (তালিকা)}
@ আইবিএশন ফানক অর্ডারগুলি বাটনপ্রেসড (_ প্রেরক: যে কোনও) {পারফর্মসেসু (সাথে পরিচয়দাতা: "অর্ডারগুলি", প্রেরক: শূন্য) il
ওভাররাইট ফান নম্বর অফসেকশন (টেবিল ভিউতে: ইউআইটিএলভিউ) -> ইনট {রিটার্ন 1}
ওভাররাইট ফান্ট টেবিলভিউ (_ টেবিল ভিউ: ইউআইটিবেল ভিউ, নম্বরঅফ্রাউসআইনসেকশন বিভাগ: আন্ত) -> ইনট {রিটার্ন পিজ্জা.কাউন্ট}
ওভাররাইট ফান্ট টেবিলভিউ (_ টেবিল ভিউ: ইউআইটিবেলভিউ, সেলফরওআউট ইনডেক্সপথ: ইনডেক্সপথ) -> ইউআইটিএবলভিউসেল cell সেল ছেড়ে দিন = টেবিল ভিউ.ডেকুই রিয়েজেবল সেল (আইডেন্টিফায়ার: "পিজ্জা", এর জন্য: সূচকপথ) হিসাবে! পিজা TableViewCell
সেল.নেম.টেক্সট = পিজ্জা [সূচকপথ.রো] .নাম সেল.আইমেজভিউ? .আইমেজ = পিজ্জা [সূচকপথ.রো] .আইমেজ সেল.অ্যামাউন্ট.টেক্সট = "$ \ (পিজ্জা [সূচকপাথ.রো]। পরিমাণ)" সেল.মিসিলেনিউসটেক্সট.টেক্সট = পিজ্জা [সূচকপথ.রো]। বিবরণ
সেলটি রিটার্ন করুন
ওভাররাইট ফান টেবিলভিউ (_ টেবিল ভিউ: ইউআইটিবেলভিউ, উচ্চতাের জন্য রোআউট সূচকপথ: সূচিপথ) -> সিজিফ্লোট 100 ফিরুন 100.0}
ওভাররাইট ফান্ট টেবিলভিউ (_ টেবিলভিউ: ইউআইটিবেল ভিউ, ডিডিলিটরোউ ইন্ডেক্সপ্যাথ: ইনডেক্সপথ) {পারফর্মসেজ (উইন্ডোজিডিফায়ার: "পিজ্জা", প্রেরক: সেলফ.পিজাস [সূচকপথ.রো] পিজ্জা হিসাবে)}
ওভাররাইট ফানক রেডি (সেগের জন্য: ইউআইএসটিরিবোর্ডসইগু, প্রেরক: কোন?) se যদি সেগা.অন্টিফায়ার == "পিজ্জা" {প্রহরী ভিসি = সেগা.ডেসটিনেশন হিসাবে ছেড়ে যায়? পিজ্জাভিউ কনট্রোলার আর কি {রিটার্ন} ভিসি.পিজ্জা = প্রেরক? পিজা}}}

ভিউডিডলড পদ্ধতিতে, আমরা আমাদের ব্যাকএন্ড এপিআই থেকে ইনভেন্টরি পেতে আলাফোফায়ারটি ফেচআইভেন্টরি পদ্ধতিটি কল করি। তারপরে আমরা উত্তরটি কন্ট্রোলারের অর্ডার সম্পত্তিতে সংরক্ষণ করি।

অর্ডারস বাটনপ্রেসড বোতামটি দৃশ্যের অর্ডার বোতামের সাথে যুক্ত রয়েছে। এটি কেবল নামযুক্ত সেগু অর্ডার ব্যবহার করে অর্ডারগুলির তালিকা সহ দৃশ্যটি দেখায়।

টেবিলভিউ * পদ্ধতিগুলি এমন পদ্ধতি প্রয়োগ করে যা ইউআইটিএবলভিডেলিগেট প্রোটোকলের জন্য উপলব্ধ এবং আপনার সাথে পরিচিত হওয়া উচিত।

চূড়ান্ত প্রস্তুতির পদ্ধতিটি নেভিগেশনের জন্য ভিউ কন্ট্রোলারে কেবল পিৎজা প্রেরণ করে। তবে এই পিজ্জা কেবল তখনই প্রেরণ করা হয় যদি ভিউ কন্ট্রোলারটি লোড করা হয় তবে তিনি পিৎজাভিউ কনট্রোলার।

আমরা তৃতীয় দৃশ্যটি তৈরি করার আগে একটি পিজ্জা টেবিলভিউসেল.সুইফ্ট ক্লাস তৈরি করুন এবং নিম্নলিখিতটি সন্নিবেশ করুন:

ইউআইকিট শ্রেণি পিজ্জা টেবিল ভিউসেল আমদানি করুন: ইউআইটিএবলভিউসেল {@ আইবিআউটলেট দুর্বল ভারী পিজ্জা আইমেজ ভিউ: ইউআইআইমেজভিউ! @ আইবিআউটলেট দুর্বল ভেরিয়েবলের নাম: ইউিলাবেল! @ আইবিউটলেট দুর্বল ভার বিবিধ পাঠ্য: ইউআইএলবেল! @ আইবিআউটলেট দুর্বল ভীড় ভিড়: ইউিলাবেল! ওভাররাইড ফানক জাগ্রত থেকে ফ্রেমনিব ()। সুপার.ওয়াকফ্রমনিব ()}}
দ্বিতীয় দৃশ্যের কক্ষের কাস্টম শ্রেণি হল পিজ্জা টেবিলভিউসেল এবং পুনরায় ব্যবহারযোগ্য সনাক্তকারী পিজ্জা তা নিশ্চিত করুন।

পিজ্জা দেখার দৃশ্য তৈরি করুন

আমাদের স্টোরিবোর্ডের তৃতীয় দৃশ্যটি হল পিজ্জা ভিউয়ের দৃশ্য। নির্বাচিত তালিকা এখানে প্রদর্শিত হতে পারে।

একটি পিজ্জাভিউকন্ট্রোলআর সুইফট ফাইল তৈরি করুন, এটি উপরের দৃশ্যের জন্য কাস্টম ক্লাস করুন এবং নীচের কোডটি আটকে দিন:

ইউআইকিট আমদানি আলমোফায়ার আমদানি করুন
শ্রেণি পিজ্জাভিউ কনট্রোলার: ইউআইভিউকন্ট্রোলার {
var পিজা: পিজ্জা?
@ আইবিআউটলেট দুর্বল ভীড় ভিড়: ইউিলাবেল! @ আইবিআউটলেট দুর্বল ভির পিজ্জার বর্ণনা: ইউিলাবেল! @ আইবিআউটলেট দুর্বল ভার পিজ্জা আইমেজভিউ: ইউআইআইমেজভিউ!
ওভাররাইড ফানক ভিডডিলডোড ()। সুপার.ভিউডিডলড ()
নেভিগেশনআইটেম টাইটেল = পিজ্জা! .name পিজাআইজেভিউ.ইমেজ = পিজ্জা! .image পিজাDescription.text = পিজা! .descript পরিমাণ.text = "$ \ (স্ট্রিং (বর্ণনামূলক: পিজা!। পরিমাণ))"}
@ আইবিএ ফাংশন কিনুন বাটনপ্রেসড (_ প্রেরক: যে কোনও) {প্যারামিটারগুলি = ["পিজা_id": পিজ্জা! "ব্যবহারকারী_আইডি": অ্যাপমিস্ক। ইউএসআইডিআইডি]
Alamofire.request ("http://127.0.0.1:4000/orders", পদ্ধতি: .পোস্ট, পরামিতি: পরামিতি)। কনফার্ম ()। রিসপন্স জেএসওএন guard গার্ডের প্রতিক্রিয়া। }
নজর রাখুন স্থিতি = উত্তর। ফলাফল.মূল্য হিসাবে? [স্ট্রিং: বুল], সফল = স্থিতি দেওয়া যাক ["স্থিতি"]] অন্যথায় self ফিরুন সেলফি.আরার্ট ()}
সফল? self.alertSuccess (): self.alertError ()}}
ব্যক্তিগত ফানক সতর্কতা ইরর () self স্ব.আরল্ট ফিরে (শিরোনাম: "ক্রয় সফল হয়নি!", বার্তা: "ক্রয় শেষ করা যাবে না। দয়া করে পরে আবার চেষ্টা করুন।")}
প্রাইভেট ফান্ক অ্যালার্টসুসসেস () {স্ব.আরল্ট ফিরে (শিরোনাম: "ক্রয় সফল", বার্তা: "আপনি সফলভাবে অর্ডার করেছেন, আপনার আদেশ শীঘ্রই নিশ্চিত হয়ে যাবে।")}
ব্যক্তিগত ফানক সতর্কতা (শিরোনাম: স্ট্রিং, বার্তা: স্ট্রিং) alert সতর্কতা Ctrl = UIAlertController (শিরোনাম: শিরোনাম, বার্তা: বার্তা, পছন্দসই স্টাইল: .alert)
সতর্কতা Ctrl.addAction (ইউআইএলআরএলট্যাকশন (শিরোনাম: "ঠিক আছে", শৈলী:। ক্যান্সেল))। স্ব। ন্যাভিগেশন নিয়ন্ত্রণকারী? পপভিউকন্ট্রোলার (অ্যানিমেটেড: সত্য) {)
উপলভ্য (সতর্কতন্ত্র, অ্যানিমেটেড: সত্য, সমাপ্তি: শূন্য) n

উপরের কোডে, আমাদের একাধিক @ আইবিআউটলেট এবং একটি একক @ আইবিএ রয়েছে। স্টোরিবোর্ডের মাধ্যমে আপনাকে আউটপুট এবং ক্রিয়াকলাপটিকে নিয়ামকের সাথে সংযুক্ত করতে হবে।

ভিউডিডলয়েডে আমরা আউটপুটগুলি সেট করি যাতে তারা পূর্ববর্তী ভিউ কন্ট্রোলার দ্বারা প্রেরিত পিজ্জার সাথে সঠিক মানগুলি প্রদর্শন করে। বায়ু বাটনপ্রেসড পদ্ধতিটি এআইপি-র কাছে একটি অনুরোধ প্রেরণ করে অর্ডার দেওয়ার জন্য অ্যালামোফায়ার ব্যবহার করে। বাকি পদ্ধতিগুলি এপিআই থেকে ত্রুটি বা সাফল্যের প্রতিক্রিয়া প্রদর্শন করে handle

কাজের তালিকার দৃশ্য তৈরি করুন

পরের দৃশ্যটি হ'ল কাজের তালিকার দৃশ্য। এই দৃশ্যে সমস্ত আদেশগুলি তালিকাভুক্ত করা হয়েছে যাতে ব্যবহারকারী তাদের এবং তাদের স্থিতি দেখতে পান:

অর্ডারটেবলভিউকন্ট্রোলআর সুইফট ফাইল তৈরি করুন, এটি উপরের দৃশ্যের জন্য কাস্টম শ্রেণি করুন এবং নিম্নলিখিত কোডটি আটকে দিন:

ইউআইকিট আমদানি আলমোফায়ার আমদানি করুন
অর্ডারটেবলভিউ নিয়ন্ত্রণকারী শ্রেণি: UITableViewController {
বিভিন্ন আদেশ: [আদেশ] = []
ওভাররাইড ফানক ভিডিডিলডোড () {সুপার.ভিউডিডলড () নেভিগেশনআইটেম.টাইটেল = "অর্ডার"
fetchOrders self অর্ডারে সেলফি.অর্ডার্স = অর্ডার! self.tableView.reloadData ()}}
বেসরকারী ফান ফ্যাচার অর্ডার (সমাপ্তি: @ এস্কেপিং ([অর্ডার]?) -> শূন্য) {আলমোফায়ার.রেইকুয়েস্ট ("http://127.0.0.1:4000/orders")। বৈধতা ()। প্রতিক্রিয়া জেএসওএন guard গার্ডের প্রতিক্রিয়া। রেসাল্ট.ইসসেসস অন্য {রিটার্ন সমাপ্তি (নাল)}
কাঁচাআর্ডার্স = রেসপন্স.সাল্ট.ভ্যালু হিসাবে রাখুন? [[স্ট্রিং: যে কোনও]?] অন্য {রিটার্ন সমাপ্তি (শূন্য)}
আদেশগুলি = RawOrders.flatMap {আদেশসমূহ ডিক্ট -> অর্ডার দিন? ওয়াচ এ অর্ডার আইডি = অর্ডারডিক্ট! ["আইডি"] হিসাবে? স্ট্রিং, অর্ডারস্ট্যাটাস = অর্ডারডিক্ট! ["স্ট্যাটাস"] হিসাবে? স্ট্রিং, বার পিজ্জা = অর্ডারডিক্ট! ["পিজ্জা"] হিসাবে? [স্ট্রিং: যে কোনও] অন্য {রিটার্ন শূন্য}
পিজা ["চিত্র"] = ইউআইআইমেজ (নামযুক্ত: পিজ্জা ["চিত্র"] হিসাবে! স্ট্রিং)
রিটার্ন নীতি (আইডি: অর্ডারআইডি, পিজ্জা: পিজা (ডেটা: পিজ্জা), স্থিতি: অর্ডারস্ট্যাটাস (কাঁচা মূল্য: অর্ডারস্ট্যাটাস))}
সমাপ্তি (আদেশ)}
@ আইবিএ ফানক ক্লোজবটন প্রেস (_ প্রেরক: যে কোনও) {বরখাস্ত (অ্যানিমেটেড: সত্য, সমাপ্তি: শূন্য)}
ওভাররাইট ফান নম্বর অফসেকশন (টেবিল ভিউতে: ইউআইটিএলভিউ) -> ইনট {রিটার্ন 1}
ওভাররাইট ফান্ট টেবিলভিউ (_ টেবিলভিউ: ইউআইটিএবলভিউ, নম্বরঅফ্রাউসআইনসেকশন বিভাগ: আন্ত) -> আন্তঃ right ডান ফিরে}
ওভাররাইট ফান্ট টেবিলভিউ (_ টেবিলভিউ: ইউআইটিবেলভিউ, সেলফরওআউট ইনডেক্সপথ: ইনডেক্সপথ) -> ইউআইটিএবলভিউসেল {সেল = টেবিল ভিউ.ডেক্যু রিয়েজেবলকেলকে (আইডেন্টিফায়ার: "অর্ডার", এর জন্য: সূচকপথ) চলুন অর্ডার = অর্ডার [সূচিপথ।]]
cell.textLabel? .text = অর্ডার.পিজ্জা.নাম সেল.আইমেজভিউ? .image = অর্ডার.পিজা.আইমেজ সেল.ডেটেলটেক্সটেলবেল? .text = "$ \ (অর্ডার.পিজা.অ্যামাউন্ট) - \ (অর্ডার.স্ট্যাটাস.রাউভ্যালু)"
সেলটি রিটার্ন করুন
ওভাররাইট ফান টেবিলভিউ (_ টেবিল ভিউ: ইউআইটিবেলভিউ, উচ্চতাের জন্য রোআউট সূচকপথ: সূচিপথ) -> সিজিফ্লোট 100 ফিরুন 100.0}
ওভাররাইট ফান্ট টেবিলভিউ (_ টেবিল ভিউ: ইউআইটিবেলভিউ, ডিডিলিটরোউ ইন্ডেক্সপ্যাথ: ইনডেক্সপথ) {পারফর্মসেট (উইন্ডি আইডেন্টিফায়ার: "অর্ডার", প্রেরক: অর্ডার [সূচিপত্র / সূচক হিসাবে)]
ওভাররাইট ফানক রেডি (সেগের জন্য: ইউআইএসটিরিবোর্ডসইগু, প্রেরক: কোন?) se যদি সেগা.অন্টিফায়ার == "অর্ডার" v ভিসি = সেগুন.ডেসটিনেশন হিসাবে রাখুন? অর্ডারভিউকন্ট্রোলার অন্য {ফেরত} ভিসিআর্ডার = প্রেরক হিসাবে? অর্ডার}}}

উপরের কোডটি উপরের পিজা টেবিলভিউ কনট্রোলারের কোডের মতো। তবে, তালিকা পুনরুদ্ধারের পরিবর্তে আদেশগুলি পুনরুদ্ধার করা হয়। শেষ পদ্ধতিতে পিজ্জা হস্তান্তর করার পরিবর্তে আদেশটি পরবর্তী নিয়ামককে দেওয়া হয়। কন্ট্রোলারের একটি ক্লোজবটনপ্রেসড পদ্ধতিও রয়েছে যা কেবলমাত্র নিয়ামককে বন্ধ করে এবং তালিকা তালিকার দৃশ্যে ফিরে আসে।

কাজের স্থিতির দৃশ্য তৈরি করুন

পরের দৃশ্যটি ধর্মীয় দৃশ্য। এই দৃশ্যে আমরা অর্ডারটির স্থিতি দেখতে পারি:

Szene উপরের দৃশ্যে স্ট্যাটাস লেবেলের উপরে সরাসরি একটি অদৃশ্য দৃশ্য রয়েছে। নিয়ামকের জন্য একটি @ আইবিআউটলেট তৈরি করতে আপনাকে অবশ্যই এই দৃশ্যটি ব্যবহার করতে হবে।

অর্ডারভিউকন্ট্রোলআর সুইফট ফাইল তৈরি করুন, এটি উপরের দৃশ্যের জন্য কাস্টম শ্রেণি করুন এবং নীচের কোডটি আটকে দিন:

ইউআইকিট আমদানি করুন
শ্রেণি অর্ডারভিউকন্ট্রোলার: ইউআইভিউকন্ট্রোলার {
আদেশ ক্রম: আদেশ?
@ আইবিউটলেট দুর্বল ভার স্থিতি: ইউআইএলবেল! @ আইবিআউটলেট দুর্বল ভার ক্রিয়াকলাপটি দেখুন: অ্যাক্টিভিটিআইডিকেটর
ওভাররাইড ফানক ভিডডিলডোড ()। সুপার.ভিউডিডলড ()
নেভিগেশন আইটেম.টাইটেল = অর্ডার? .pizza.name
ক্রিয়াকলাপটি দেখুন.স্টার্টলয়েডিং ()
অর্ডার পরিবর্তন! .status {কেস। পেন্ডিং: স্ট্যাটাস.টেক্সট = "প্রসেসিং অর্ডার" কেস। অ্যাকসেপ্টেড: স্ট্যাটাস.টেক্সট = "অর্ডার প্রস্তুত করুন" কেস। ডিসিপ্যাচড: স্ট্যাটাস.টেক্সট = "অর্ডার চলছে!" কেস। ডেলিভারড: স্ট্যাটাস.টেক্সট = "অর্ডার বিতরণ" ক্রিয়াকলাপটি দেখুন Col স্ট্রোকলক্লোর = ইউআইসিওলর.green ক্রিয়াকলিটভিউ ডট কমপ্লিট লোডিং (সাফল্য: সত্য)}}}

উপরের কোডে, আমরা আমাদের ভিডডিডোড পদ্ধতিতে সমস্ত কাজ করি। সেখানে আমাদের অ্যাক্টিভিটি ইন্ডিকেটর শ্রেণি রয়েছে, যা আমরা পরবর্তী তৈরি করব এবং যা @ আইবিআউটলেট হিসাবে উল্লেখ করা হবে।

অ্যাপ্লিকেশনটির অন্যান্য অংশগুলি তৈরি করুন

আমরা [ActivityIndicator] নামে পরিচিত একটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করি (https://github.com/abdulKarim002/activityIndicator)। তবে, যেহেতু প্যাকেজটি কোকোপডগুলির মাধ্যমে উপলভ্য নয়, তাই আমরা নিজেই এটি তৈরি এবং আমদানির সিদ্ধান্ত নিয়েছি।

এক্সকোডে, অ্যাক্টিভিটি ইন্ডিকেটর নামে একটি নতুন ফাইল তৈরি করুন এবং রেপো থেকে কোডটি এখানে আটকান।

এর পরে, একটি নতুন অর্ডার.সুইফ্ট ফাইল তৈরি করুন এবং নিম্নলিখিত কোডটি আটকে দিন:

আমদানি ভিত্তি
স্ট্রাক্ট অর্ডার {লেট আইডি: স্ট্রিং পিজ্জা ছেড়ে দিন: পিজা ভের স্ট্যাটাস: অর্ডারস্ট্যাটাস}
অর্ডারস্ট্যাটাস: স্ট্রিং {কেস মুলতুবি = "মুলতুবি" কেস অনুমোদিত = "স্বীকৃত" কেস প্রেরণ = "প্রেরণ" কেস বিতরণ = "বিতরণ"}

অবশেষে, একটি পিজা.সুইফ্ট তৈরি করুন এবং নিম্নলিখিত কোডটি পেস্ট করুন:

ইউআইকিট আমদানি করুন
স্ট্রাক পিজ্জা {লেড আইডি: স্ট্রিং লেট নাম: স্ট্রিং লেট বর্ণনা: স্ট্রিং ভাতা: ফ্লোট লেট ইমেজ: ইউআইআইমেজ
init (ডেটা: [স্ট্রিং: যে কোনও]) {স্ব.আইডি = ডেটা ["আইডি"] হিসাবে! স্ট্রিং স্ব.নাম = ডেটা ["নাম"] হিসাবে! স্ট্রিং স্ব.অ্যামাউন্ট = ডেটা ["পরিমাণ"] হিসাবে! ভাসা করুন স্ব। বিবরণ = ডেটা ["বিবরণ"] হিসাবে! স্ট্রিং স্ব.আইমেজ = ডেটা ["চিত্র"] হিসাবে! UIImage}}

এটিই ক্লায়েন্ট অ্যাপ্লিকেশনটির জন্য। শেষ অবধি, আমাদের তথ্য.পলিট ফাইলটি পরিবর্তন করতে হবে। আমাদের স্থানীয় সার্ভারের সাথে সংযোগ সক্ষম করতে আমাদের প্লাস্ট ফাইলটিতে একটি এন্ট্রি যুক্ত করতে হবে:

চলুন অ্যাডমিন অ্যাপ্লিকেশন দিয়ে চালিয়ে যান।

প্রশাসক অ্যাপ্লিকেশন তৈরি করুন

এক্সকোডের একটি নতুন উদাহরণ শুরু করুন এবং একটি নতুন "একক অ্যাপ্লিকেশন" প্রকল্প তৈরি করুন। আমরা আমাদের প্রকল্প পিজ্জারিয়া অ্যাডমিন বলব call

প্রকল্পটি তৈরি করার পরে, এক্সকোড থেকে প্রস্থান করুন এবং আপনার সদ্য নির্মিত এক্সকোড প্রকল্পের মূল ডিরেক্টরিতে পডফিল নামে একটি নতুন ফাইল তৈরি করুন। নিম্নলিখিত কোডটি ফাইলটিতে আটকান:

প্ল্যাটফর্ম: আইওএস, '11 .0 '
গোল_পিজারিয়া অ্যাডমিন 'ব্যবহারের জন্য_ ফ্রেমওয়ার্ক! পড 'পুশারসুইফ্ট', '5> 5.1.1' পড 'অ্যালামোফায়ার', '~> 4.6.0' শেষ

উপরের ফাইলে, আমরা নির্ভরশীলতাগুলি নির্দিষ্ট করেছি যা প্রকল্পটি অবশ্যই কার্যকর করা উচিত। আপনার প্রকল্পের নামের উপরে ** লক্ষ্য ** পরিবর্তন করতে ভুলবেন না।

নির্ভরতা ইনস্টল করতে এখন আপনার টার্মিনালে নিম্নলিখিত কমান্ডটি চালান:

$ শুঁটি ইনস্টল করুন

ইনস্টলেশন সমাপ্ত হলে, কোকোপডস দ্বারা উত্পাদিত Xcode ওয়ার্কস্পেস ফাইলটি খুলুন। এটি এক্সকোড পুনরায় আরম্ভ করা উচিত।

এক্সকোড পুনরায় চালু করার পরে, মেইন.স্টরিবোর্ড ফাইলটি খুলুন। সেখানে আমরা আমাদের ক্লায়েন্ট অ্যাপ্লিকেশনটির জন্য স্টোরিবোর্ড তৈরি করি। নীচে আমরা কীভাবে আমাদের স্টোরিবোর্ডটি তৈরি করেছি তার একটি স্ক্রিনশট রয়েছে:

উপরে আমাদের কাছে নেভিগেশন ভিউ কন্ট্রোলার রয়েছে, এটি প্রাথমিক ভিউ কন্ট্রোলার।

কাজের তালিকার দৃশ্য তৈরি করুন

অর্ডার তালিকার দৃশ্যে বিক্রয় আদেশের তালিকা প্রদর্শন করা উচিত। আমরা যথাযথ দেখতে দেখতে সেখান থেকে আমরা কোনও অর্ডারের স্থিতি পরিবর্তন করতে পারি।

এক্সকোডে, অর্ডারলিস্টভিউকন্ট্রোলআর সুইফট নামে একটি নতুন ফাইল তৈরি করুন, এটি দ্বিতীয় দৃশ্যের জন্য কাস্টম ক্লাস করুন এবং নীচের কোডটি আটকে দিন:

ইউআইকিট আমদানি আলমোফায়ার আমদানি করুন
অর্ডার টেবিলভিউ নিয়ন্ত্রণকারী শ্রেণি: UITableViewController ont
বিভিন্ন আদেশ: [আদেশ] = []
ওভাররাইড ফানক ভিডডিলডোড ()। সুপার.ভিউডিডলড ()
নেভিগেশনআইটেম.টাইটেল = "গ্রাহক আদেশ"
fetchOrders self অর্ডারে সেলফি.অর্ডার্স = অর্ডার! self.tableView.reloadData ()}}
বেসরকারী ফান ফ্যাচার অর্ডার (সমাপ্তি: @ এস্কেপিং ([অর্ডার]?) -> শূন্য) {আলমোফায়ার.রেইকোয়েস্ট ("http://127.0.0.1:4000/orders")। বৈধতা ()। প্রতিক্রিয়া জেএসওএন guard গার্ডের প্রতিক্রিয়া। রেসাল্ট.ইসসেসস অন্য {রিটার্ন সমাপ্তি (নাল)}
কাঁচাআর্ডার্স = রেসপন্স.সাল্ট.ভ্যালু হিসাবে রাখুন? [[স্ট্রিং: যে কোনও]?] অন্য {রিটার্ন সমাপ্তি (শূন্য)}
আদেশগুলি = RawOrders.flatMap {আদেশসমূহ ডিক্ট -> অর্ডার দিন? ওয়াচ এ অর্ডার আইডি = অর্ডারডিক্ট! ["আইডি"] হিসাবে? স্ট্রিং, অর্ডারস্ট্যাটাস = অর্ডারডিক্ট! ["স্ট্যাটাস"] হিসাবে? স্ট্রিং, বার পিজ্জা = অর্ডারডিক্ট! ["পিজ্জা"] হিসাবে? [স্ট্রিং: যে কোনও] অন্য {রিটার্ন শূন্য}
পিজা ["চিত্র"] = ইউআইআইমেজ (নামযুক্ত: পিজ্জা ["চিত্র"] হিসাবে! স্ট্রিং)
রিটার্ন নীতি (আইডি: অর্ডারআইডি, পিজ্জা: পিজা (ডেটা: পিজ্জা), স্থিতি: অর্ডারস্ট্যাটাস (কাঁচা মূল্য: অর্ডারস্ট্যাটাস))}
সমাপ্তি (আদেশ)}
ওভাররাইট ফান নম্বর অফসেকশন (টেবিল ভিউতে: ইউআইটিএলভিউ) -> ইনট {রিটার্ন 1}
ওভাররাইট ফান্ট টেবিলভিউ (_ টেবিল ভিউ: ইউআইটিএবলভিউ, নম্বরঅফ্রাউসআইনসেকশন বিভাগ: আন্ত) -> অন্তঃপ্রান্ত right ডানদিকে ফিরে আসুন
ওভাররাইট ফান্ট টেবিলভিউ (_ টেবিলভিউ: ইউআইটিবেলভিউ, সেলফরওআউট ইনডেক্সপথ: ইনডেক্সপথ) -> ইউআইটিএবলভিউসেল {সেল = টেবিল ভিউ.ডেক্যু রিয়েজেবলকেলকে (আইডেন্টিফায়ার: "অর্ডার", এর জন্য: সূচকপথ) চলুন অর্ডার = অর্ডার [সূচিপথ।]]
cell.textLabel? .text = অর্ডার.পিজ্জা.নাম সেল.আইমেজভিউ? .image = অর্ডার.পিজা.আইমেজ সেল.ডেটেলটেক্সটেলবেল? .text = "$ \ (অর্ডার.পিজা.অ্যামাউন্ট) - \ (অর্ডার.স্ট্যাটাস.রাউভ্যালু)"
সেলটি রিটার্ন করুন
ওভাররাইট ফান টেবিলভিউ (_ টেবিল ভিউ: ইউআইটিবেলভিউ, উচ্চতাের জন্য রোআউট সূচকপথ: সূচিপথ) -> সিজিফ্লোট 100 ফিরুন 100.0}
ওভাররাইট ফান টেবিলভিউ (_ টেবিলভিউ: ইউআইটিবেল ভিউ, ডডসিলিটরোউ ইন্ডেক্সপথ: ইনডেক্সপথ) {অর্ডার দিন: অর্ডার = অর্ডার [সূচিপথ.রো]
অ্যালার্টসিটিএলএল = ইউআইএলআরএল্ট কন্ট্রোলার (শিরোনাম: "স্ট্যাটাস পরিবর্তন করুন", বার্তা: "অগ্রগতির উপর ভিত্তি করে অর্ডারের স্থিতি পরিবর্তন করুন।", পছন্দসই স্টাইল: .অ্যাকশনশিট)
সতর্কতাআরসিআরএলএডএশন (ক্রিয়েটঅ্যাকশনফর স্ট্যাটাস (.পেন্ডিং, অর্ডার: অর্ডার)) অ্যালার্টসিআরটিএলডিএকশন (ক্রিয়াঅ্যাকশনফর স্ট্যাটাস (.অ্যাকসেপ্টেড, অর্ডার: অর্ডার)) এলার্টসিআরটিএলএডাকশন (ক্রিয়েটঅ্যাকশনফর স্ট্যাটাস (.ডিসপ্যাচড, অর্ডার: অর্ডার)) অ্যালার্টসিআরটিএলডাকশন (ক্রিয়েটঅ্যাকশন)। , অর্ডার: অর্ডার)) সতর্কতা Ctrl.addAction (createActionforStatus (শূন্য, আদেশ: শূন্য))
উপলভ্য (সতর্কতা সেন্ট্রাল, অ্যানিমেটেড: সত্য, সমাপ্তি: শূন্য))
বেসরকারী ফানেকএকশনফরস্ট্যাটাস (_ স্ট্যাটাস: অর্ডারস্ট্যাটাস ?, অর্ডার: অর্ডার?) -> ইউআইএলআর্টএকশন alert এলার্টটিটল = স্ট্যাটাস == নীল? "বাতিল": স্থিতি? .RawValue সতর্কতা স্টাইল: ইউআইএলআরএল্টএকশনস্টাইল = স্ট্যাটাস == নীল? .ক্যান্সেল: .ডিফল্ট
চলুন অ্যাকশন = ইউআইএলআর্টএ্যাকশন (শিরোনাম: সতর্কতা শিরোনাম, শৈলী: সতর্কতা স্টাইল) status যদি পদে পদে পদক্ষেপ! = নিল। স্ব.সেটস্ট্যাটাস (স্থিতি !, অর্ডার: ক্রম!)}
যদি স্ট্যাটাস! = শূন্য {ক্রিয়া.এইনেবলড = স্থিতি? .rawValue! = অর্ডার? .status.rawValue}
ফিরতি ক্রিয়া}
প্রাইভেট ফান সেটস্ট্যাটাস (_ স্ট্যাটাস: অর্ডারস্ট্যাটাস, অর্ডার: অর্ডার) {আপডেটঅর্ডার স্ট্যাটাস (স্ট্যাটাস, অর্ডার: অর্ডার) watch সাফল্যের সাথে অন্যথায় সূচক = স্ব.অর্ডার.ইন্ডেক্স (যেখানে: {$ 0.id == অর্ডার.আইডিতে দেখুন) সফল }) অন্য {ফিরে}
স্ব.অর্ডারস [সূচক]। স্ট্যাটাস = স্থিতি স্ব.ট্যাবলভিউ.রেলোডডাটা ()}
প্রাইভেট ফান আপডেট অর্ডারস্ট্যাটাস (_ স্ট্যাটাস: অর্ডারস্ট্যাটাস, অর্ডার: অর্ডার, সমাপ্তি: @ এস্কেপিং (মুল) -> অকার্যকর) {url = "http://127.0.0.1:4000/orders/" + অর্ডার.আইড পরমানস = [ "স্ট্যাটাস": status.rawValue]
অ্যালামোফায়ার.রিকয়েস্ট (ইউআরএল, পদ্ধতি: .পুট, পরামিতি: প্যারাম)। বৈধতা ()। ResponseJSON ON গার্ডের প্রতিক্রিয়া। [স্ট্রিং: বুল] অন্য {রিটার্ন সমাপ্তি (মিথ্যা)}
সমাপ্তি (ডেটা ["স্থিতি"]]!)}}}

উপরের কোডটি ক্লায়েন্ট অ্যাপ্লিকেশনে পিজ্জালিস্টটেবলভিউ কনট্রোলারের কোডের মতো। আপনার আরও ব্যাখ্যা প্রয়োজন হলে সেখানে পরীক্ষা করুন।

একটি ক্রিয়েএকশনফরস্ট্যাটাস রয়েছে, যা ইউআইএলআর্ট্যাকশন অবজেক্ট তৈরি এবং কনফিগার করার জন্য একটি সরঞ্জাম। একটি সেটস্ট্যাটাস পদ্ধতি রয়েছে যা কেবলমাত্র একটি আদেশের জন্য স্থিতি সেট করার চেষ্টা করে। এবং তারপরে আপডেটআর্ডার স্ট্যাটাস পদ্ধতি রয়েছে যা আলামোফায়ার ব্যবহার করে আপডেটের অনুরোধটি API এ প্রেরণ করে।

এরপরে, ক্লায়েন্ট অ্যাপ্লিকেশনটিতে আগের মতো অর্ডার.ইউইফ্ট এবং পিজ্জা.সুইফ্ট ক্লাস তৈরি করুন:

// আমদানি আদেশ.সুইফ্ট ফাউন্ডেশন
স্ট্রাক্ট অর্ডার {লেট আইডি: স্ট্রিং পিজ্জা ছেড়ে দিন: পিজা ভের স্ট্যাটাস: অর্ডারস্ট্যাটাস}
অর্ডারস্ট্যাটাস: স্ট্রিং {কেস মুলতুবি = "মুলতুবি" কেস অনুমোদিত = "স্বীকৃত" কেস প্রেরণ = "প্রেরণ" কেস বিতরণ = "বিতরণ"}
// আমদানি করুন পিজা.সুইফ্ট ইউআইকিট
স্ট্রাক পিজ্জা {লেড আইডি: স্ট্রিং লেট নাম: স্ট্রিং লেট বর্ণনা: স্ট্রিং ভাতা: ফ্লোট লেট ইমেজ: ইউআইআইমেজ
init (ডেটা: [স্ট্রিং: যে কোনও]) {স্ব.আইডি = ডেটা ["আইডি"] হিসাবে! স্ট্রিং স্ব.নাম = ডেটা ["নাম"] হিসাবে! স্ট্রিং স্ব.অ্যামাউন্ট = ডেটা ["পরিমাণ"] হিসাবে! ভাসা করুন স্ব। বিবরণ = ডেটা ["বিবরণ"] হিসাবে! স্ট্রিং স্ব.আইমেজ = ডেটা ["চিত্র"] হিসাবে! UIImage}}

এডমিন অ্যাপ্লিকেশনটির জন্য এটি সমস্ত। শেষ অবধি, আমাদের ক্লায়েন্ট অ্যাপ্লিকেশন হিসাবে তথ্য.পলিট ফাইলটি পরিবর্তন করতে হবে।

আমাদের আইওএস ফুড ডেলিভারি অ্যাপ্লিকেশনটিতে পুশ বিজ্ঞপ্তি যুক্ত করুন

এই মুহুর্তে, আবেদনটি প্রত্যাশার সাথে সাথে তত্ক্ষণাত্ কাজ করে। ব্যবহারকারী যখন অ্যাপ্লিকেশনটি ব্যবহার করছেন না তখনও আমাদের অ্যাপ্লিকেশনটিকে আরও আকর্ষণীয় করার জন্য পুশ বিজ্ঞপ্তিগুলি যুক্ত করতে হবে।

The পুশ বিজ্ঞপ্তি বৈশিষ্ট্যটি ব্যবহার করতে আপনাকে অবশ্যই অ্যাপল বিকাশকারী প্রোগ্রামের সাথে নিবন্ধিত হতে হবে। তদতিরিক্ত, সিমুলেটরগুলিতে বিজ্ঞপ্তিগুলি চাপুন যা কাজ করে না, তাই এগুলি পরীক্ষা করার জন্য আপনার একটি সত্যিকারের iOS ডিভাইস প্রয়োজন।

পুশারের কাছ থেকে পুশ নোটিফিকেশনস এপিআই স্থানীয় আইওএস অ্যাপ্লিকেশনগুলির জন্য প্রথম শ্রেণির সমর্থন সরবরাহ করে। আপনার আইওএস অ্যাপ্লিকেশন উদাহরণগুলি আগ্রহ ** এ সাবস্ক্রাইব করে এবং আপনার সার্ভারগুলি সেই আগ্রহগুলিতে পুশ বিজ্ঞপ্তিগুলি প্রেরণ করে। এই আগ্রহটিতে সাবস্ক্রাইব করা প্রতিটি অ্যাপ্লিকেশন উদাহরণস্বরূপ ডিভাইসটিতে অ্যাপটি খোলা না থাকলেও একটি বিজ্ঞপ্তি গ্রহণ করে।

এই বিভাগটি পুশারের মাধ্যমে আপনার খাদ্য সরবরাহের আদেশ সম্পর্কে লেনদেনের পুশ বিজ্ঞপ্তিগুলি গ্রহণ করার জন্য কীভাবে কোনও আইওএস অ্যাপ সেট আপ করবেন তা বর্ণনা করে।

এপিএন কনফিগার করুন

আপনার পক্ষে আইওএস অ্যাপ্লিকেশন ব্যবহারকারীদের পুশ নোটিফিকেশন সরবরাহ করতে পুষার অ্যাপল পুশ নোটিফিকেশন পরিষেবা (এপিএন) ব্যবহার করে। পুশ বিজ্ঞপ্তি দেওয়ার সময় আমরা আপনার এপিএন কী ব্যবহার করি। এই পৃষ্ঠাটি আপনাকে একটি এপিএন কী পাওয়ার এবং এটি পুশারদের প্রদানের প্রক্রিয়াটির জন্য গাইড করে।

অ্যাপল বিকাশকারী ড্যাশবোর্ডে যেতে এবং একটি নতুন কী তৈরি করতে এখানে ক্লিক করুন (নীচে দেখুন):

কীটি তৈরি হয়ে গেলে এটি ডাউনলোড করুন। এটি নিরাপদ রাখুন, আমাদের এটি পরবর্তী বিভাগে লাগবে।

আপনাকে অবশ্যই উত্পন্ন কীটি নিরাপদ রাখতে হবে, কারণ এটি হারিয়ে গেলে তা ফেরানো যাবে না।

আপনার পুশ অ্যাপ্লিকেশন তৈরি করুন

এর পরে, আপনাকে পুশার ড্যাশবোর্ড থেকে একটি নতুন পুশ বিজ্ঞপ্তি অ্যাপ্লিকেশন তৈরি করতে হবে।

আপনি অ্যাপ্লিকেশনটি তৈরি করার পরে, অ্যাপ্লিকেশনটি সেট আপ করতে সহায়তা করার জন্য একটি দ্রুত শুরু উইজার্ড উপস্থিত হওয়া উচিত।

পুশ বিজ্ঞপ্তিগুলি কনফিগার করতে আপনার একটি অ্যাপল এপিএন কী দরকার। এটি পূর্ববর্তী বিভাগে আমরা যে ডাউনলোড করেছি তার সমান কী। আপনি একবার কীটি পেয়ে গেলে তা দ্রুত শুরু উইজার্ডে আপলোড করুন।

আপনার অ্যাপল টিম আইডি দিন। আপনি এখানে টিম আইডি পেতে পারেন। পরবর্তী পদক্ষেপে এগিয়ে যেতে Next ক্লিক করুন।

পুশ বিজ্ঞপ্তিগুলি সমর্থন করতে আপনার ক্লায়েন্ট অ্যাপ্লিকেশন আপডেট করুন

আপনার ক্লায়েন্ট অ্যাপ্লিকেশনে পড ফাইলটি খুলুন এবং নির্ভরযোগ্যতার তালিকায় নিম্নলিখিত পডটি যুক্ত করুন:

পুশনোটিকেশনস পড

বিজ্ঞপ্তি প্যাকেজ পেতে এখন আগের মতো পড ইনস্টল কমান্ডটি চালান। ইনস্টলেশন সমাপ্ত হওয়ার পরে, একটি নতুন শ্রেণি অ্যাপমিস্ক.সুইফ্ট তৈরি করুন এবং নিম্নলিখিতগুলি যুক্ত করুন:

অ্যাপমিস্ক ক্লাস {স্ট্যাটিক যাক USER_ID = NSUID ()। uuidString.replacingOccurrences (থেকে: "-", এর সাথে: "_")

উপরের ছোট শ্রেণিতে আমরা সেশনের জন্য একটি ব্যবহারকারী আইডি তৈরি করি। সত্যিকারের অ্যাপ্লিকেশনটিতে, প্রমাণীকরণের পরে আপনার কাছে সাধারণত একটি আসল ব্যবহারকারী আইডি থাকে।

এরপরে, অ্যাপডেলিগেট ক্লাসটি খুলুন এবং পুশনোটিকেশন প্যাকেজ আমদানি করুন:

পুশনোটিকেশনগুলি আমদানি করুন

এবার অ্যাপডেলিগেট শ্রেণীর অংশ হিসাবে নিম্নলিখিতটি যুক্ত করুন:

পুশনোটিকেশনগুলি = পুশনোটিকেশনগুলি শেয়ার করুন
ফানক অ্যাপ্লিকেশন (_ অ্যাপ্লিকেশন: ইউআইএএপ্লিকেশন, ডিফিনিশ লঞ্চিং উইথঅপশনস লঞ্চঅ্যাপশনগুলি: [ইউআইএপ্লিকেশনল্যাঞ্চঅপশনসকি: কোনও]?) -> বুল {সেলফ.পুষনোটিকেশন.স্টার্ট (উদাহরণস্বরূপ: "PUSHER_NOTIF_INSTANCE_ID") স্ব.পোশ নোটফিকেশনস
রেডিও অ্যাপ্লিকেশন (_ অ্যাপ্লিকেশন: ইউআইএএপ্লিকেশন, ডিগ্রিফরআরমিটনোটিকেশনস উইথডভাইসটোকেন ডিভাইস টোকেন: ডেটা) {স্ব.পুশনোটিকেশন.রেজিস্টার ডিভাইস টোকেন (ডিভাইস টোকেন) {চেষ্টা করবেন? self.pushNotifications.subscribe (আগ্রহ: "অর্ডার_" + AppMisc.USER_ID)})
Us পুশার অ্যাপ্লিকেশন থেকে আপনি যে কীটি পেয়েছেন তা দিয়ে PUSHER_PUSH_NOTIF_INSTANCE_ID প্রতিস্থাপন করুন।

উপরের কোডে, আমরা অ্যাপ্লিকেশনটিতে ধাক্কা বিজ্ঞপ্তিগুলি সেট করেছি (didFinishLaunchingWithOptions :) পদ্ধতি এবং তারপরে অ্যাপ্লিকেশনটি সাবস্ক্রাইব করে (didRegisterForRemoteNotificationsWithDeviceToken :) পদ্ধতিতে।

এর পরে, আমাদের অ্যাপ্লিকেশনটির জন্য পুশ বিজ্ঞপ্তিগুলি সক্ষম করতে হবে। প্রকল্প নেভিগেটরে আপনার প্রকল্প নির্বাচন করুন এবং ফাংশন ট্যাবে ক্লিক করুন। স্যুইচ অন চালু করে পুশ বিজ্ঞপ্তিগুলি সক্রিয় করুন।

পুশ বিজ্ঞপ্তিগুলি সমর্থন করার জন্য আপনার প্রশাসক অ্যাপ্লিকেশনটি আপডেট করুন

আপনার অ্যাডমিন অ্যাপ্লিকেশন এছাড়াও পুশ বিজ্ঞপ্তি পেতে সক্ষম হতে হবে। প্রক্রিয়াটি উপরে বর্ণিত সমান। পার্থক্য হ'ল অ্যাপডেলিগেটে সাবস্ক্রাইব করা আগ্রহ, যা আদেশ হবে be

পুশ বিজ্ঞপ্তি প্রেরণের জন্য আপনার এপিআই আপডেট করুন

নোড.জেএস-তে লিখিত আমাদের ব্যাক-এন্ড সার্ভার এপিআইয়ের মাধ্যমে পুশ বিজ্ঞপ্তিগুলি প্রকাশিত হয় আমরা এর জন্য নোড.জেএস এসডিকে ব্যবহার করি। ব্যাকএন্ড প্রকল্প ডিরেক্টরিতে পরিবর্তন করুন এবং নিম্নলিখিত কমান্ডটি কার্যকর করুন:

ave npm পুশার-পুশ-নোটিফিকেশন-নোড - সেভ ইনস্টল করুন

এরপরে, index.js ফাইলটি খুলুন এবং প্যাকেজ-পুশ-নোটিফিকেশন-নোডটি আমদানি করুন:

কনস্ট পুশনোটিকেশন = প্রয়োজনীয় ('পুশ নোটিফিকেশন নোড');
পুশনোটিকেশনগুলি = নতুন পুশনোটিকেশনগুলি (I উদাহরণস্বরূপ: 'PUSHER_PUSH_NOTIF_INSTANCE_ID', সিক্রেটকি: 'PUSHER_PUSH_NOTIF_SECRET_KEY';);

এরপরে, আমরা একটি সহায়ক ফাংশন যুক্ত করতে চাই যা আদেশের স্থিতির উপর ভিত্তি করে একটি বিজ্ঞপ্তি বার্তা দেয়। Index.js ফাইলটিতে নিম্নলিখিতগুলি যুক্ত করুন:

ফাংশন getStatusNotificationsForOrder (অর্ডার) {যাক পিজ্জা = অর্ডার ['পিজ্জা'] স্যুইচ (আদেশ ['স্ট্যাটাস']] {কেস "পেন্ডিং": ভুল ফিরে আসুন; কেস "স্বীকৃত": প্রত্যাবর্তন করুন   আপনার "{[পিৎজা ['নাম'] sed" প্রক্রিয়াকরণ করা হয়েছে। কেস "প্রেরণ": রিটার্ন `আপনার" $ {ক্রম ['পিজ্জা'] ['নাম']} " পথে "কেস" বিতরণ করা হয়েছে: ফিরে ` আপনার" $ {পিৎজা ['নাম']} "বিতরণ করা হয়েছে। বন appetit.` মান: ভুল ফিরে; }}

এরপরে, পুট / অর্ডার /: আইডি রুটে, ফেরতের বিবৃতি দেওয়ার আগে নিম্নলিখিত কোডটি যুক্ত করুন:

অ্যালার্টমেসেজ = getStatusNotificationsForOrder (আদেশ) দিন
যদি (এলার্টমেসেজ! == মিথ্যা) {pushNotifications.publight ([[`অর্ডার _ $ {ব্যবহারকারী_id}`]], {অ্যাপস: ps এপস: {সতর্কতা: {শিরোনাম: "অর্ডার তথ্য", শরীর: সতর্কতা, শব্দ, "মান" "}}})। তারপর (প্রতিক্রিয়া => কনসোল.লগ ('সদ্য প্রকাশিত:', প্রতিক্রিয়া.পব্লিশআইডি))। ক্যাচ (ত্রুটি => কনসোল.লগ ('ত্রুটি:', ত্রুটি))); }

উপরের কোডে, আমরা অর্ডারের স্থিতি পরিবর্তিত হলে ** অর্ডার _ $ {ইউজার_আইডি} ** (ইউজার_আইডিটি ক্লায়েন্টের দ্বারা উত্পাদিত আইডি এবং ব্যাক-এন্ড সার্ভারে প্রেরণ করা হয়) to এটি একটি বিজ্ঞপ্তি যা আমাদের গ্রাহক অ্যাপ্লিকেশন দ্বারা প্রাপ্ত হওয়ায় আমরা আগে এই আগ্রহটি সাবস্ক্রাইব করেছি।

এরপরে, POST / অর্ডার রুটে, ফেরতের বিবৃতি দেওয়ার আগে নিম্নলিখিত কোডটি যুক্ত করুন:

pushNotifications.publish (['অর্ডার'], {অ্যাপেন্স: {এপস: {সতর্কতা: {শিরোনাম: "order নতুন অর্ডার এসেছে", বডি: "পিজ্জা ['নাম'] for এর জন্য একটি অর্ডার দেওয়া হয়েছে।",} , শব্দ: "স্ট্যান্ডার্ড"}}})। তারপর (প্রতিক্রিয়া => কনসোল.লগ ('সদ্য প্রকাশিত:', প্রতিক্রিয়া.পব্লিশআইডি))। ক্যাচ (ত্রুটি => কনসোল.লগ ('ফেহলার:', ফেহলার));

এই ক্ষেত্রে আমরা অর্ডার সুদে একটি পুশ বিজ্ঞপ্তি প্রেরণ করি। এটি প্রশাসকের অ্যাপ্লিকেশনটিতে পাঠানো হবে যা আদেশের আগ্রহের সাবস্ক্রাইব করেছে।

পুশারের সাথে পুশ বিজ্ঞপ্তি যুক্ত করতে আপনাকে যা করতে হবে তা হ'ল। এখানে আমাদের অ্যাপ্লিকেশনগুলির স্ক্রিন শট কার্যকর রয়েছে:

উপসংহার

এই নিবন্ধে, আমরা একটি বেসিক খাদ্য সরবরাহ সিস্টেম তৈরি করেছি এবং এটি একই ধরণের অ্যাপ্লিকেশন ব্যবহার করে একাধিক অ্যাপ্লিকেশন জুড়ে কীভাবে পুশারের সাথে পুশ বিজ্ঞপ্তি প্রেরণ করা হয় তা প্রদর্শন করতে এটি ব্যবহার করেছি। আশা করি আপনি কীভাবে পুষার আপনার ব্যবহারকারীদের কাছে পুশ বিজ্ঞপ্তি প্রেরণের প্রক্রিয়াটিকে সহজ করতে পারবেন তা শিখেছি।

এই পোস্টটি প্রথম পুষার দ্বারা প্রকাশিত হয়েছিল।