ورود

View Full Version : ارسال push از سرور با gcm



ho3ein.3ven
پنج شنبه 14 آبان 1394, 14:04 عصر
سلام

دوستان من توی برنامه جدیدم نیاز دارم یک سری push از سرور خودم به اپلیکیشن ارسال کنم . برای این کار سیستم gcm رو انتخاب کردم .
یک سری سوالات داشتم . اگر کاربر مورد نظر بعد از گذشت حدودا یک هفته آنلاین بشه باز هم Push رو دریافت می کنه (به عنوان مثال الان push ارسال بشه و کاربر آفلاین باشه یک هفته بعد آنلاین بشه )؟

بعد اینکه آیا این امکان وجود داره که یک push گم بشه ؟ یعنی اصلا به دست کاربر نرسه ؟ چون اینجوری کل سیستم من بهم میریزه

ho3ein.3ven
پنج شنبه 21 آبان 1394, 23:20 عصر
دوستان کسی تا حالا این سیستم رو استفاده نکرده ؟

M0TR!X
جمعه 22 آبان 1394, 00:37 صبح
سلام.

یبار که درمورد gcm تحقیق میکردم.جایی نوشته بود یکی از معایب این سیستم اینکه فقط پیغام نیم ساعت میمونه بعدش تا صد نفر رو دراپ میکنه.

یعنی شما یه صف رو در نظر بگیر اگه تعداد کاربرهات بیشتر از صد نفر باشه تا نیم ساعت فرصت دارن ان بشن و پیغام بهشون برسه چون این صف بعد از نیم ساعت فقط میتونه پیغام صد نفر رو نگه داره

البته قضیه ماله خیلی وقت پیشه کامل مطمئن نیستم. شاید اشتباه باشه

Nevercom
جمعه 22 آبان 1394, 02:41 صبح
اگر هنگام ارسال پیام، کاربر آفلاین باشه پیام در سرور گوگل ذخیره میشه تا زمانی که آنلاین شد، پوش رو برای کاربر بفرسته
پارامتر time_to_live (اگر ست بشه) مشخص می کنه که پیام حداکثر تا چه زمانی قبل از ارسال باید در سرور گوگل بمونه، مقدار پیشفرض ۴ هفته هست، یعنی اگر کاربر قبل از ۴ هفته آنلاین بشه، پیام به دستش میرسه.

اگر پارامتر time_to_live رو ست کردید، باید پارامتر collapse_key رو هم ست کنید. این کلید برای گروه بندی پیام ها مورد استفاده قرار میگیره.

اگر پیامی حاوی این کلید باشه، و ارسال بشه، سرور گوگل چک می کنه که آیا پیامی با کلید مشابه تو صف ارسال قرار داره یا نه (مثلاً ۳ روز پیش از طرف سرور شما ارسال شده ولی به دست کاربر نرسیده)، اگر وجود داشت پیام قبلی حذف میشه و فقط پیام جدید ارسال میشه. البته یک محدودیت وجود داره، اگر پیام ها Collapsible نباشن (کلید collapse_key رو نداشته باشن) به ازای هر دستگاه حداکثر ۱۰۰ پیام میتونه ذخیره بشه، و اگر از ۱۰۰ تا بیشتر بشه، همه ی پیام های ذخیره شده پاک میشن

برای اطلاعات بیشتر به سایت گوگل مراجعه کنید: https://developers.google.com/cloud-messaging/concept-options

ho3ein.3ven
جمعه 22 آبان 1394, 12:56 عصر
تشکر می کنم از توضیحات کاملتون .
در نظر بگیرید من بخوام یه نرم افزار چت بنویسم . کاربری داشته باشیم که به مدت یک هفته آنلاین نشه . اگر تو این مدت 200 پیام براش ارسال بشه . بعد از یک هفته آنلاین شدن فقط 100 تا رو دریافت می کنه ؟ به نظرتون gcm برای اینجور اپلیکیشنی که پیام ها حتما باید به دست کاربر برسن مناسبه ؟ راه حلی برای این مشکل هست ؟ یا سیستم دیگه ای رو پیشنهاد میکنید ؟

feryt20
جمعه 22 آبان 1394, 13:32 عصر
این یک نمونه سورس کد به همراه پنل مدیریت
http://www.shahrecode.ir/home/productdetails/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%B3%D9%88%D8%B1%D8%B3-push-notification-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF

ho3ein.3ven
جمعه 22 آبان 1394, 15:10 عصر
دوست عزیز من مشکلی با پیاده سازیش ندارم . مشکلم رو تو پست قبلی توضیح دادم .

Nevercom
جمعه 22 آبان 1394, 18:36 عصر
خب یک سیستم چت پیچیدگی هایی داره که سرویس های این چنینی نمیتونن تمام نیاز هاش رو برطرف کنن، مشکل اول اینه که GCM یا هر سرویس مشابه دیگری تعهدی نمیده که پیام شما همون لحظه ارسال بشه.

نزدیک ترین حالت اینه که پارامتر time_to_live رو مقدار 0 بهش بدید، این پیام رو گوگل اسم "Now or Never" بهش داده، یعنی سعی میکنه در سریع ترین زمان ممکن ارسالش کنه و اگر به دست یوزر نرسید، ذخیره هم نمیشه. گوگل اشاره می کنه که به این پیام ها اولویت بالاتری در ارسال میده، اما باز هم تعهدی نمیده که همون لحظه به دست کاربر برسه (با فرض آنلاین بودن)

برای چت سرویس های دیگه ای وجود دارن، کتابخانه ها و ابزارهای متفاوت دیگری هم هست که کنترل دست خودتون هست اما پیاده سازیش پیچیدگی های بیشتری داره.

در پاسخ سوالتون، بنا بر توضیحات گوگل، فرض می کنیم ۱۰۰ تا پیام در صف ارسال برای کاربر موندن، اگر یک پیام دیگه ارسال بشه، همه ی پیام ها پاک میشن و هیچ پیامی به دستش نمیرسه، احتمالاً بعد از اون پیام های دیگه ذخیره میشن تا به تعداد ۱۰۰ برسن و باز همه پاک میشن.

البته زمانی که پیام ها پاک بشن، کلاینت یک پیغام مبنی بر اینکه پیام ها پاک شدن دریافت می کنه، مثلاً در اون شرایط میتونید از سرور اطلاعات رو بخونید.

ho3ein.3ven
جمعه 22 آبان 1394, 21:42 عصر
تشکر می کنم بابت پاسختون . مثل همیشه کامل و دقیق
میشه یکم در مورد ابزار های دیگری که می تونم باهاش این سیستم رو پیاده سازی کنم توضیح بدین ؟

Nevercom
شنبه 23 آبان 1394, 16:31 عصر
اینا رو یه نگاهی بهشون بندازید:

http://quickblox.com/
https://www.chatimity.com/
http://getpeppertalk.com/
https://rocket.chat/ - open source
https://zulip.org/ - open source
http://telepat.io - open source
https://www.cometchat.com
http://www.binpress.com/app/chat-messaging-sdk-for-android/2326
https://www.firebase.com/
https://pusher.com/
https://www.pubnub.com/
https://www.sinch.com/products/instant-messaging/
http://beem-project.com/
https://developer.moxtra.com/docs/docs-android-sdk/chat/
http://getpeppertalk.com/

استفاده از اینها شاید سریعترین راه حل باشه، و البته به احتمال زیاد مجانی نیستن

راه حل بعدی استفاده از OpenFire برای XMPP Server و aSmack بعنوان کتابخانه ی ارتباط با سرور در اندروید هست. (اوپن فایر رایگان و اوپن سورس هست و بر مبنای جاوا نوشته شده)

یکی از راه حل های دیگه این هست که بجای XMPP از پروتوکل MQTT استفاده کنید که سبکتره، البته می دونید که در این شرایط باید کدهای کلاینت و سرور رو خودتون بنویسید. شاید کتابخانه های مناسب براش وجود داشته باشه، باید جستجو کنید

با توجه به اینکه Telegram اوپن سورس هست، بررسی سورس تلگرام هم میتونه ایده ی خوبی باشه.

اینکه از چه سرویسی استفاده کنید بستگی به نوع برنامه و نیازهای اون برنامه و تعداد کاربرانش داره، مثلاً برای یک اپ سازمانی که تعداد کاربران زیادی نداره، میتونید از اکانت مجانی خیلی از سرویس های بالا استفاده کنید. حتی شاید GCM یا Parse هم نیازتون رو برطرف کنه.