PDA

View Full Version : اطلاع رسانی رویدادهای سایت از طریق notification



mohsen22
جمعه 27 دی 1392, 06:50 صبح
با سلام . . . از اساتید خصوصا مدیریت محترم انجمن تقاضا دارم ما رو مورد محبت خودشون قرار دهند ...

راستش میخوام رویدادهای سایتم از قبیل تعداد بازدید - درج نظر- کامنتهای کذاشته شده و .... رو از طریق notification در نرم افزار اندرویدم به اطلاع کاربران برسونم

اطلاعاتی که تا الان بدست اوردم:
1-بزای اینکه رویدادها به صورت عدد نشون داده بشه(چیزی شبیه ف.ی.س.ب.وک) که تعداد رویدادها رو نشون میده وبه محض دیدن تک تک اونها ازتعداشون کم میشه می توان فیلدی دی دیتابیس تهیه کرد و مقدار اون رو یک گذاشت (boolean) بعد ازمراجعه لینک و بازدید اون امقدار رو برابر صفر قرار داد
2- جمع تعداد یک ها هم میشه تعداد notification های دیده نشده
3- طریقه ایجاد notification ساده رو هم از این (http://barnamenevis.org/showthread.php?434544-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%A8%D9%87-notification)پست مطالعه کرده ام اما اینجا بحث ازتباط با سایت مطرح هستش !
4- حدس خودم هم اینه که این کار از طریق rss , xml این کار باید انجام بشه اما چگونه !؟

ممنون از همه

mohsen22
جمعه 27 دی 1392, 17:23 عصر
باورم نمیشه 40 تا مشاهده بدون حتی یک جواب !؟

mohsen22
یک شنبه 29 دی 1392, 07:39 صبح
یعنی کسی تا حالا به این فکر نکرده؟!

hamedjj
یک شنبه 29 دی 1392, 11:01 صبح
http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

mohsen22
یک شنبه 29 دی 1392, 11:21 صبح
ممنون حامد جان . . خیر ببینی ایشالله- لینک خیلی خوبیه روش کار می کنم . . ان شا الله که با مشارکت سایر دوستان به نتیجه دلخواه برسیم و همه ازش استفاده کنیم

mohsen22
یک شنبه 29 دی 1392, 21:37 عصر
اقا حامد مقاله میگه دیتابیس باید my sql باشه اما دیتابیس منsql server هستش.....! چه باید بکنم؟؟

سوال دیگه اینکه همه برنامه ها (فارسی) از این روش استفاده می کنند یعنی GCM؟؟ یاروش دیگر بدون واسطه هم هست؟
مرسی

hamedjj
یک شنبه 29 دی 1392, 23:28 عصر
چرا تو github سرچ نمیکنی
اوجا که خیلی پروژه آموزشی هست و کارتو سریع راه میاندازه

این لینک را ببین:
https://github.com/search?l=Java&q=push+notification&ref=cmdform&type=Repositories

mohsen22
جمعه 11 بهمن 1392, 07:54 صبح
یه سوال فیلترینگ گوگل (https://cloud.google.com/) ممکنه تاثیری در ارسال notification داشته باشه ؟

rubiks.kde
جمعه 11 بهمن 1392, 11:07 صبح
ساده ترین راه که خیلی ها از این روش استفاده میکنن اینه که خودشون این سیستم رو پیاده میکنن.

برای این کار هم لازمه تا شما یه هاست داشته باشی.بعد یک وب سرویس برای ارسال پیام خواهید نوشت تا با ارسال تاریخ به وب سرویس پیام جدید رو در صورت موجود بودن ارسال کنه.
در برنامه آندورید هم با یه AlarmManager مثلا برای هر 5 ساعت یا هر زمان دیگه درخواست چک کردن پیام رو بدید.به این صورت دستگاهایی که به اینترنت وصل باشن پیام رو دریافت میکنند و پیامی رو جهت تایید دریافت به سرور ارسال میکنن.این طوری شما متوجه میشی چند نفر پیام رو دریافت کردن.

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

hamedjj
جمعه 11 بهمن 1392, 11:51 صبح
اینجا را یه نگاه بندازین :

https://parse.com/tutorials/android-push-notifications

mohsen22
شنبه 12 بهمن 1392, 23:12 عصر
ممنون اما هنوز موفق نشدم . . .از دوستان کسی کد یا قطعه کدی که باهاش جواب گرفته باشه نداره ؟
مرسی

reza_azizi2010
شنبه 12 بهمن 1392, 23:21 عصر
من خودم از جی سان استفاده کردئم ، کد خودم رو میذارم واست
این قسمت سرور


<?php




if (isset($_REQUEST['action'])){
$action = $_REQUEST['action'];
$local_id = intval($_REQUEST['local_id']);
} else {
echo "Invalid Data";
exit;
}

if ($action=="read"){
read();
} else if ($action=="insert"){
insert();
} else if ($action=="update"){
update();
} else if ($action=="remove"){
remove();
} else if ($action=="remove"){
echo "salam";
}

/**
*
*/
function connectToDatabase(){
$connection=mysqli_connect("localhost", "_reza", "", "_");
# $connection=mysqli_connect("http://-.ir", "_", "","_");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

return $connection;
}

/**
*
*/


//. intval($_REQUEST['local_id'])
function read(){
$connection = connectToDatabase();
$result = mysqli_query($connection, "SET CHARACTER SET utf8");

$result = mysqli_query($connection, "SELECT * FROM karyab WHERE ad_id > ". intval($_REQUEST['local_id']));

$output = array();
while($row = mysqli_fetch_array($result)) {
$record = array();
$record['title'] = $row['title'];
$record['state'] = $row['state'];
$record['source'] = $row['source'];
$record['adres'] = $row['adres'];
$record['desc'] = $row['desc'];
$record['prc_date'] = $row['prc_date'];
$record['exp_date'] = $row['exp_date'];
$record['miladi_date'] = time();;
$record['server_id'] = $row['ad_id'];

$output[] = $record;
}
//print_r($output);
echo json_encode($output);
mysqli_close($connection);
}

?>

خب اگه یا php آشنا باشی میبینی که هیچی ننوشتم درواقع! فقط یه کوئری گرفتم و ریختم توی یک آرایه و بعدش آرایه رو بصورت جی سان اکو کردم. همین! فقط دقت کن اینو باید توی یک صفحه مجزا بنویسی، چون هیچ خروجی دیگه ای بجز جی سان نباید داشته باشی، حتی یک br . یعنی هیچی اکو نکنی
من از طریق اندروید درخواستم رو با اکشن مورد نظر میفرستم و اونجا هم بمن خروجی جی سان میده.بعدش دوباره باید جی سان رو پارس کنم:

این کلاس وب سرویس که میاد با سایت ارتباط برقرار میکنه و رشته جی سان رو میگیره :البته با یه سرچ میتونی بهترشو پیدا کنی


public class Webservice {

public static String readUrl(String url, ArrayList<NameValuePair> params) {
try {
HttpResponse response;
HttpClient client = new DefaultHttpClient();
final HttpParams para = client.getParams();
// HttpConnectionParams.setConnectionTimeout(para, G.Time_Out);
// HttpConnectionParams.setSoTimeout(para, G.Time_Out * 2);
// HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);

HttpPost method = new HttpPost(url);
if (params != null) {
method.setEntity(new UrlEncodedFormEntity(params));
}
response = client.execute(method);
G.response_temp = response.getStatusLine().getStatusCode();
InputStream inputStream = response.getEntity().getContent();
String result = convertInputStreamToString(inputStream);

return result;
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}

return null;
}


public static String convertInputStreamToString(InputStream inputStream) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();

String line = "";

while ((line = reader.readLine()) != null) {
builder.append(line);
}

return builder.toString();
}
catch (IOException e) {
e.printStackTrace();
}

return null;
}

این کلاس دوتا ورودی داره، یکی آدرس سایت مورد نظر و یکی هم پارامترهای لازم، مثلا من اینجا اسم تابع رو ارسال میکردم .شما میتونی هرچی خواستی ارسال کنی و سمت سرور باهاش کار کنی
اینم قسمت که جی سان رو ازین کلاس دریافت و پارس میکنه :

String url = "http://adrese site morede nazar.php";

ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("action", "read"));
params.add(new BasicNameValuePair("local_id", Integer.toString(local_id)));

String result = Webservice.readUrl(url, params);

// Log.i("LOG", "json = " + result);
if (result != null) {
try {
JSONArray ads = new JSONArray(result);

for (i = 0; i < ads.length(); i++) {
JSONObject object = ads.getJSONObject(i);
String title = object.getString("title");
String state = object.getString("state");
String source = object.getString("source");
String adres = object.getString("adres");
String desc = object.getString("desc");
String prc_date = object.getString("prc_date");
String exp_date = object.getString("exp_date");
date_miladi = object.getInt("miladi_date");
server_id = object.getInt("server_id");

database.execSQL("INSERT INTO ...");

}

}
catch (JSONException e) {
e.printStackTrace();
}
}

reza_azizi2010
شنبه 12 بهمن 1392, 23:29 عصر
این کد واسه من کار میکنه اما اگه اساتید میبینند جایی مشکل داره ممنون میشم اصلاح کنند.

mohsen22
یک شنبه 13 بهمن 1392, 23:36 عصر
ممنون اقا رضا ... ببخشید از دیتابیستون می تونید یک اسکریپ بگیرید تا من عین این مثال رو تست کنم ؟
مرسی

mohsen22
یک شنبه 13 بهمن 1392, 23:40 عصر
$connection=mysqli_connect("localhost", "_reza", "", "_");

جاهای خالی رو ممکنه به ترتیب بفرمایید چی هستند؟( نام دیتابیس-یوز-رمز-هاست) مرسی

saeed_g21
یک شنبه 13 بهمن 1392, 23:46 عصر
localhost- username - password - database

magic69
شنبه 07 تیر 1393, 00:34 صبح
از این لینک هم می تونید استفاده کنید:
http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/