PDA

View Full Version : آپدیت اتوماتیک نرم افزار بعد از بروزرسانی سمت سرور



yaser773
یک شنبه 17 فروردین 1393, 18:11 عصر
چجوری میشه وقتی که سرور آپدیت شد (یک رکورد جدید به دیتابیس اضافه شد) اندروید آپدیت شدن سرور رو تو قسمت notificationbar نشون بده ( بدون باز کردن نرم افزار اندروید ما)

Nevercom
دوشنبه 18 فروردین 1393, 02:44 صبح
راه حل منطقی و بهینه استفاده از سرویس Push Notification هست، درواقع Push-To-Sync
برای اینکار میتونی از Google Cloud Messaging یا Parse SDK استفاده کنی.

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

اگر اشتباه نکنم اپلیکیشن GMail هم از روشی مشابه استفاده می کنه.

#root#
دوشنبه 18 فروردین 1393, 08:38 صبح
راه حل منطقی و بهینه استفاده از سرویس Push Notification هست، درواقع Push-To-Sync
برای اینکار میتونی از Google Cloud Messaging یا Parse SDK استفاده کنی.

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

اگر اشتباه نکنم اپلیکیشن GMail هم از روشی مشابه استفاده می کنه.

دوست عزیز شما میدونید این GCM تو ایران جواب میده یا نه؟

Nevercom
دوشنبه 18 فروردین 1393, 11:08 صبح
ایران و غیر ایران نداره، خیلی خوب کار می کنه. اگر هم درصدی احساس کردید GCM خدماتش رو محدود کرده، از Parse استفاده کنید، من دارم استفاده می کنم و ازش راضی ام.

#root#
دوشنبه 18 فروردین 1393, 12:24 عصر
ایران و غیر ایران نداره، خیلی خوب کار می کنه. اگر هم درصدی احساس کردید GCM خدماتش رو محدود کرده، از Parse استفاده کنید، من دارم استفاده می کنم و ازش راضی ام.

آخه سایتش که برا من حداقل بدون تمهیدات(!) لازم باز نمیشه ، بخاطر همین گفتم ممکنه اصلا کار نکنه ، دوبار چند ساعت وقت گذاشتم و نتونستم نتیجه بگیرم.

Nevercom
دوشنبه 18 فروردین 1393, 14:22 عصر
نه از اون بابت مشکلی نخواهید داشت، سرویس Google Analytics رو من استفاده کردم، با اینکه بدون تغییر IP نمیتونید وارد پنلش بشید، اما داده ها رو از کاربران حتی اگر با IP ایران باشن به درستی جمع آوری می کنه.

yaser773
سه شنبه 19 فروردین 1393, 11:58 صبح
راه حل منطقی و بهینه استفاده از سرویس Push Notification هست، درواقع Push-To-Sync
برای اینکار میتونی از Google Cloud Messaging یا Parse SDK استفاده کنی.

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

اگر اشتباه نکنم اپلیکیشن GMail هم از روشی مشابه استفاده می کنه.


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

ali-star
سه شنبه 19 فروردین 1393, 13:42 عصر
yaser773 راست میگن کسی سورس نداره؟ من هم بهش نیاز دارم...

Nevercom
سه شنبه 19 فروردین 1393, 19:30 عصر
اینجا کامل توضیح داده: http://developer.android.com/google/gcm/index.html

تو پروژه ی قبلیم نیاز به قابلیت Push Notification داشتم، اما چون وقت کمی داشتم، از Parse SDK استفاده کردم، به همین دلیل کدهای آماده برای GCM ندارم.

Parse قابلیت مشابهی ارائه میده که دستگاه فقط پیغام رو دریافت می کنه و Notification نمایش داده نمیشه.
اینجا توضیحات تکمیلی برای Parse رو بخونید: https://www.parse.com/apps/quickstart#parse_push/android

#root#
چهارشنبه 27 فروردین 1393, 20:30 عصر
دوستان یه لطفی بکنن ببینن میتونن با حساب کاربریشون (gmail) وارد این سایت بشن (البته با رعایت اصول دور زدن تحریم!) :

https://code.google.com/apis/console/

به من اینو میگه :

Sorry, this product isn't available in your country at this time. We apologize for the inconvenience.



با اینکه ip رو هم چک میکنم که ایران نباشه ، بازم نمیزاره، از کجا میفهمه یعنی؟ نکنه از شماره موبایل میفهمه؟

abbasalim
چهارشنبه 27 فروردین 1393, 20:52 عصر
دوستان یه لطفی بکنن ببینن میتونن با حساب کاربریشون (gmail) وارد این سایت بشن (البته با رعایت اصول دور زدن تحریم!) :

https://code.google.com/apis/console/

به من اینو میگه :

Sorry, this product isn't available in your country at this time. We apologize for the inconvenience.



با اینکه ip رو هم چک میکنم که ایران نباشه ، بازم نمیزاره، از کجا میفهمه یعنی؟ نکنه از شماره موبایل میفهمه؟

من با تمهیدات لازم! نمیتونم وارد سایت های تحریم شده توسط گوگل با لپتاپم برم چون آی پی سروری که من استفاده میکنم رو گوگل میشناسه اگه آی پی یه سرور دیگه رو بدم دیگه گیر نمیده

mohsen22
پنج شنبه 28 فروردین 1393, 00:07 صبح
منم خیلی بهش ور رفتم..اما نشد و ناامید شدم ... کاش یه بزرگوار یه مثال ولو سادده اینجا میزاشت .. شاید یه نوری تابیده میشد!

saeed_g21
پنج شنبه 28 فروردین 1393, 20:10 عصر
منم خیلی بهش ور رفتم..اما نشد و ناامید شدم ... کاش یه بزرگوار یه مثال ولو سادده اینجا میزاشت .. شاید یه نوری تابیده میشد!

منم يک راه حل ميگم ببينين شدني هست يا نه
يک Json راه ميندازيم و هردفعه که ورژن جديد آمد مقدار دهي ميکنيم مثلا ورژن اول : 1 ورژن دوم : 2 به اينصورت
و هرگاه کاربر برنامه رو اجرا ميکنه اگه به نت دسترسي داشته باشه بياد اين مقدار رو کنترل کنه اگه بزرگتر از ورژني که رو دستگاه نصب هست پيغام بده , Notification بده يا هرکاري که بخواين وگرنه هيچ حتي اگه کوچکتر کني ميتوني به ورژن قبلي برگردوني البته هردفعه که بروزرساني انجام ميشه بايد نسخه اون رو هم در ديتابيس ثبت کنيم تا آخرين ورژن از دست نپره واسه چک کردنش

slr560
پنج شنبه 28 فروردین 1393, 20:47 عصر
برای اینکه وارد سایت بشین باید حتما از Open وی p ان استفاده کنید
نه kریو جواب میده نه پروکسی نه ...
دلیلشو نمیدونم ولی گوگل از الگوریتم های پیشرفته ای واسه تشخیص آی پی استفاده میکنه
واسه من وارد شد



118097

#root#
پنج شنبه 28 فروردین 1393, 21:51 عصر
برای اینکه وارد سایت بشین باید حتما از Open وی p ان استفاده کنید
نه kریو جواب میده نه پروکسی نه ...
دلیلشو نمیدونم ولی گوگل از الگوریتم های پیشرفته ای واسه تشخیص آی پی استفاده میکنه
واسه من وارد شد


خیلی ممنون ، بله اینطوری منم تونستم وارد بشم

badname
یک شنبه 28 اردیبهشت 1393, 01:22 صبح
سلام خسته نباشد
من از parse استفاده کردم کار میکنه ولی وقتی برنامه رو از Reacent app پاک میکنم سرویس پوش نوتیفش از کار میفوته یه فورس کلوز ام میده ...
چیکار باید بکنم تا سرویسش بسته نشه ؟

Nevercom
یک شنبه 28 اردیبهشت 1393, 01:51 صبح
من چک کردم و مشکلی ندیدم، علاوه بر اون از Parse در برنامه م استفاده کردم که کاربرهای زیادی داره و در این 7-8 ماه حتی یک خطا هم ندیدم که بخاطر Parse بوده باشه یا باعث کرش بشه (از Flurry برای Analytics و Crash Reporting استفاده کردم و خطاها رو می تونم در پنل مشاهده کنم).

بر اساس توضیحات سایت Parse رو در اپلیکیشن استفاده کردید ؟
تمام مجوزها ی لازم رو در منیفست قرار دادید ؟

badname
یک شنبه 28 اردیبهشت 1393, 02:03 صبح
من چک کردم و مشکلی ندیدم، علاوه بر اون از Parse در برنامه م استفاده کردم که کاربرهای زیادی داره و در این 7-8 ماه حتی یک خطا هم ندیدم که بخاطر Parse بوده باشه یا باعث کرش بشه (از Flurry برای Analytics و Crash Reporting استفاده کردم و خطاها رو می تونم در پنل مشاهده کنم).

بر اساس توضیحات سایت Parse رو در اپلیکیشن استفاده کردید ؟
تمام مجوزها ی لازم رو در منیفست قرار دادید ؟
بله
بزارید نمونه کدمو بزارم تا شمام یه نگاه بندازید




public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);



Parse.initialize(this, "**************", "**************");
PushService.setDefaultPushCallback(this, MainActivity.class);
ParseInstallation.getCurrentInstallation().saveInB ackground();
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<!--
IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below
to match your app's package name + ".permission.C2D_MESSAGE".
-->
<permission android:protectionLevel="signature"
android:name="com.saeed.nasiri.permission.C2D_MESSAGE" />
<uses-permission android:name="com.saeed.nasiri.permission.C2D_MESSAGE" />

<service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParseBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
<receiver android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />

<!--
IMPORTANT: Change "com.parse.starter" to match your app's package name.
-->
<category android:name="com.saeed.nasiri" />
</intent-filter>
</receiver>

</application>

Nevercom
یک شنبه 28 اردیبهشت 1393, 02:31 صبح
احتمالاً تاثیری نداره، اما کدهای مرتبط با GCM رو از منیفست حذف کنید
یعنی این Receiver:
<receiverandroid:name="com.parse.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />

<!--
IMPORTANT: Change "com.parse.starter" to match your app's package name.
-->
<category android:name="com.parse.starter" />
</intent-filter>
</receiver>
و این مجوزها:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<!--
IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below
to match your app's package name + ".permission.C2D_MESSAGE".
-->
<permission android:protectionLevel="signature"
android:name="com.parse.starter.permission.C2D_MESSAGE" />
<uses-permissionandroid:name="com.parse.starter.permission.C2D_MESSAGE"/>

badname
یک شنبه 28 اردیبهشت 1393, 02:37 صبح
احتمالاً تاثیری نداره، اما کدهای مرتبط با GCM رو از منیفست حذف کنید
یعنی این Receiver:
<receiverandroid:name="com.parse.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />

<!--
IMPORTANT: Change "com.parse.starter" to match your app's package name.
-->
<category android:name="com.parse.starter" />
</intent-filter>
</receiver>
و این مجوزها:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<!--
IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below
to match your app's package name + ".permission.C2D_MESSAGE".
-->
<permission android:protectionLevel="signature"
android:name="com.parse.starter.permission.C2D_MESSAGE" />
<uses-permissionandroid:name="com.parse.starter.permission.C2D_MESSAGE"/>
مشکلی نداره یعنی ؟ پس چرا سرویسش بسته میشه وقتی ریسنت اپا رپ پاک میکنن یا صفحه گوشیو خاموش میکنم

Nevercom
یک شنبه 28 اردیبهشت 1393, 02:54 صبح
اون قسمت بعداً به پارس اضافه شده و اختیاری هست، یکمی به بهبود سرویسشون کمک می کنه اما اجباری نیست.
من در اپلیکیشن خودم بنا بر نیاز و نه توصیه ی مستقیم پارس، یک کلاس اپلیکیشن اضافه کرده بودم و Parse.initialize رو تنها در اون کلاس صدا زده بودم.
بهش اشاره ای نکردم چون بنا بر نیاز پروژه بود (برای کم کردن تعداد API Request ها بخاطر تعداد بالای کاربران)، اما بعد از جستجو این سوال رو دیدم که ظاهراً با انجام اینکار مشکل برطرف میشه
شاید بخاطر این من به
این مشکل روبرو نشده بودم، بد نیست امتحانش کنید: http://stackoverflow.com/questions/22749151/android-app-suddenly-crashes-when-enable-push-notifications

badname
یک شنبه 28 اردیبهشت 1393, 12:51 عصر
Nevercom (http://barnamenevis.org/member.php?89707-Nevercom) عزیز مچکرم حل شد :)

momayyezi_m
دوشنبه 29 اردیبهشت 1393, 20:24 عصر
اگه یه نمونه برنامه رو تو این زمینه تو بخش نمونه برنامه های اندروید انجمن بتونین بذارین خیلی عالی میشه
تو انجمن چند بار به همچین تاپیک هایی رسیده بودم ..خودمم بلد نیستم :خجالت:

moh355
چهارشنبه 13 اسفند 1393, 10:06 صبح
سلام اگه میشه توضیح بدید که چطور میشه برنامه رو در پس زمینه اجرا کرد مثلا وقتی کاربر یک زمانی رو تنظیم کنم وقتی ساعت دستگاه رسید به اون تایم توی نوتیفیکیشن یه پیغامی نشون بده.لطفا تا جایی که میشه ساده توضیح بدید چون مبتدی هستم