سرویس پوش ناتیفیکشن گوگل
با سلام
دوستان 2 تا سوال دارم
1 - کسی میدونه که چجوری حتما یه ناتیفیکشن رو 100 در صد به بدست کاربر برسونیم
منظورم اینکه من تو اپم هر وقت تو کنسول یه ناتیفیکشن تولید می کنم اگر همون لحظه دستگاه به نت وصل باشه ناتیفیکشن رو میبینه و بدستش میرسه در حالی که اگر وصل نباشه و من تو اون موقه براش نات ارسال کنم اصلا بدستش نمیرسه و حتی اون قسمت مدت زمان Time Expire رو هم رو بالاترین که 4 هفته است گذاشتم بازم هیچی
دومین سوالم اینکه برای گرفتن نات گوگل از سرویس FirebaseMessageService استفاده کرده و این سرویسم هر وقت برنامه در حال اجرا باشه نات رو میگره و نمایش میده و یا هر موقه برنامه در پس زمینه باشه نات رو میگیره و من یه چیزی مثل مثال استاد که اگه یادتون باشه تو درس ارسال و دریافت SMS بهش میگفت فضول یا همون BroadCast Reciever میخوام که اگه برنامه اصلا رو حافظه هم نباشه و یا گوشی ریست شد باز نات های من قابل دیدن باشه برای کاربراش
لطف میکنید راهنمایی کنید دوستان عزیزم پیشاپیش از جواب های شما متشکرم
سلام
سوال اول: میتونید بعد از گرفتن ناتیف، یک Post Request سمت سرور ارسال کنید که مطمئن بشید دریافت با موفقیت انجام شده. سمت سرورتون هم میتونید یک Queue داشته باشید که افرادی که دریافت نکردن رو هر مثلا 4 ساعتی یک بار ناتیف کنه دوباره.
سوال دوم: روند Gcm به این شکل بود (هنوز داکیومنت های fcm رو بررسی نکردم ببینم به همین شکله یا خیر):
1- کاربر از گوگل یک UserId دریافت میکرد. 2- UserId رو برای سرور خودمون ارسال میکردیم و اون ذخیرش میکرد. 3- زمانی که میخواستیم پوش ارسال کنیم، سرورمون اون یوزر آیدی و دیتا رو برای سرور گوگل ارسال میکرد. 4- سرور گوگل از طریق یک Session باز مقادیر رو برای Google Play Services ارسال میکرد. 5- Google Play Services تمامی مقادیر رو به اپلیکیشن ما ارسال میکرد و بله، دریافت در یک BroadCastReceiver انجام میشد.
سلام استاد واقعا ممنون که جوابمو دادید اگر منظورتون code Request خود گوگله که میگه بله من پیغام شما رو ارسال کردم ولی من بعنوان یوزر نهایی هیچ وقت اون پیام آقای گوگول رو ندیدم من نمی دونم ایشون با چه حسابی میگه request code من 200 ینی Ok هستش بعدش شما در نظر بگیرید من اپم در آینده 200 هزار کاربر داشته باشه اون 200 هزارو کجا باید ذخیره کرد و دید که کی کیا نگرفتن !؟ حالا اپ بنده رسیده به 37 تا که همشونم دوستاوو خونواده ام هستن
سول دوم بنده این بود که تو خوده fcm یه سرویس رو به این کار اختصاص داده که بگیر نگیر داره ، مثه مثال استاد نیست که حتما بیاد فضولی کنه البته فضولی میکنه ولی بعضی مواقع خواب میمونه منم فک میکنم مشکل اینجا باشه که آقای فضول کارشو خوب انجام نمی ده بخاطره اینکه من نات رو نمی بینم وگرنه آقای گوگل کارشو انجام میده و من میخوام این سرویس firebaseMessageService رو تبدیل کنم به Broadcast reciever که هیچوقت خواب نمونه آیا برای این کار راه حلی وجود داره ؟
تا اونجایی که من میدونم Fcm مخفف Firebase Cloud Messaging هست و اگر منظورتون چیزه دیگه ایه شاید من اشتباه متوجه شدم.
سوال اول: اون 200 و OK به معنای ارسال پیغام به کاربره، در حقیقت شما 200 رو به معنای Delivery نمیگیرید، بلکه به معنای ارسال شد میگیرید.
سوال دوم: هر سرویس نوتیفیکیشنی که وجود داره، یک TimeOut داره. بدین معنا که پیغام به کلاینت ارسال میشه، اگر دریافت نشد امکان داره تا زمانی مشخص، چند باره دیگه ارسال انجام شه. ولی پس از اون دیگه ارسالی انجام نمیشه. در حال حاضر Fcm یکی از بهترین سرویس های Push Notification هست که داره کار میکنه، درسته باگ داره ولی با روشی که توی پاسخ بالا گفتم میشه مطمئن شید که کاربر دریافت کرده یا خیر، و دوباره ارسال کنید.
در مورد BroudCastReceiver میتونم بگم خوده GooglePlayServices داره این مورد رو هندل میکنه و نیازی نیست شما کاری بکنید.
در مورد محل ذخیره سازی 200 هزار یوزر، هم مسلما الان اپلیکیشنی نیست که نیاز به سرور و اینترنت نداشته باشه، شما باید توی دیتابیس سرورتون اطلاعات کاربران رو نگه دارید.
روش سخت، پیچیده، سنگین و غیر منطقی، اما کاربردی برای پوش نوتیفیکیشن:
توی کشور 4-5 شرکت هستن که Fcm رو به صورت دستی و از 0 تا 100 با پروتوکل های مختلف نوشتن. بهترین آنها Xmpp هست ولی با موارد دیگه ای هم نوشته شده که در حال حاضر برای مارکت ها، بانک ها، سرویس هایی که امنیت بالایی دارن و به گوگل اعتماد ندارن و ... پیاده سازی شده. من حدود 4-5 مورد رو در جریانم ولی ممکنه بیشتر باشن. کمترین زمانی که پیاده سازی نوشتن همچین سرویسی برده، حدود 1.5 تا 2 سال بوده (طبق مشاهدات من). ولی تونستن حتی سبک تر از گوگل، این سرویس رو پیاده سازی کنن (مسلما در Scale و با قابلیت های گوگل قابل پیاده سازی نبوده ولی برای چند میلیون یوزر کاربرد داره و سریع تره). شما ممکنه علاقه داشته باشید در این مورد تحقیق کنید پس من توضیحات بیشتر رو ادامه نمیدم تا دوستانی که میخونن خوابشون نگیره D:
روشی که استاد آقاجانی تدریس کردن:
اون روش در حقیقت Pull Notification یا در مواردی Custom Push Notification خوانده میشه. روش به این صورته که شما طبق یک زمانی (در آلارم منیجر ست میشه) به سرور Request ارسال میکنی تا ببینی خبری هست یا خیر. و سرور نمیتونه با اختیار خودش به کلاینت دسترسی داشته باشه. این روش ضعف های زیادی داره، مثلا استفاده بسیار بالای باتری گوشی، یا ارسال Request های بیهوده، یا هم زمان نبودن دریاف پیام ها (مثلا بخواید همه کاربرا همزمان پیام دریافت کنن). ولی برای کار راه انداختن بد نیست. در آموزش ها از سرویس استفاده نشده ولی با سرویس ها هم قابل پیاده سازیه.
در کل پیشنهاد من همون پوش نوتیفیکیشنه با روشی که در پاسخ بالا گفتم (اگر حتما کاربرا باید پوش رو دریافت کنن)
موفق باشید
** برای تشکر میتونید از دکمه ^ کنار عدد سبز استفاده کنید و اگر جوابی صحیح و کامل بود میتونید به عنوان جواب صحیح انتخابش کنید.
سلام ببخشيد پست را بالا ميارم ايا سرويس Firebase Cloud Messaging تو ايران کار ميکنه يعني بعد پياده سازيش نوتيفکشن مياد ؟
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .