-
المساهمات
1070 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
15
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mohamd Imran
-
هي فعلياً تعمل دائما في الخلفية (تختلف في بعض إصدارات الأندرويد),أي لا تحتاج إلى تشغيلها كل مدة , لكن أفضل إداء أو أسلوب لعمل هكذا نوع من التطبيقات ,أن تقوم بعمل قاعدة بيانات محلية sqllite db وتخزين البيانات القادمة من ال API في تلك القاعدة حتى عند عدم توفر إتصال بالإنترنت ينطلق الإشعار بناء على البيانات المحملة مسبقاً من ال API ومن هنا تستطيع عمل كويري لقاعدة البيانات المحلية (أو من خلال عمل API لتلقي الطلبات وإعادة إرسال التعليقات بناء على Id مستخدم معين) لطلب التعليقات الجديدة لمستخدم معين
- 22 اجابة
-
- 2
-
مرحباً بك @البراء الحسني إذا كنت تقصد فيدوهات الدورات ,فالإجابة نعم لكي تستفيد من جميع تفاصيل الدورة لكي إن واجهت أي مشاكل في أي مرحلة من مراحل الدورة تستطيع حلها بدون عائق لأن المدرب يكون قد شرحها في فيدوهات أخرى
-
اه أعتذر لم أقم بتعريف ال notification manger في الكود فقط أضف التالي فوق جملة الشرط أي هكذا NotificationManager notifManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); if (notifManager == null) { notifManager = (NotificationManager)getSystemService(this.NOTIFICATION_SERVICE); } وبخصوص هذا من الأندرويد ستديو هذا تحذير للإصدارات القديمة لكن لا عليك منه
- 22 اجابة
-
- 2
-
صحيح ,لعمل إشعار لجميع إصدرات أندرويد قمت بعمل الكود التالي لك ,سيتفحص إصدار الأندرويد لديك وسيتم إطلاق الإشعار بالطريقة المناسبة للإصدار الجديد final int NOTIFY_ID = 1002; String name = "my_package_channel"; String id = "my_package_channel_1"; // يمكنك إبقائه كماهوid القناة String description = "my_package_first_channel"; // يمكنك إبقائه كما هو وصف القناة Intent intent; PendingIntent pendingIntent; NotificationCompat.Builder builder; if (notifManager == null) { notifManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { int importance = NotificationManager.IMPORTANCE_HIGH; NotificationChannel mChannel = notifManager.getNotificationChannel(id); if (mChannel == null) { mChannel = new NotificationChannel(id, name, importance); mChannel.setDescription(description); //تفعيل الرجاج mChannel.enableVibration(true); mChannel.setLightColor(Color.GREEN); //تشغيل الرجاج mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); notifManager.createNotificationChannel(mChannel); } builder = new NotificationCompat.Builder(this, id); intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); builder.setContentTitle("تعليق جديد") .setSmallIcon(android.R.drawable.ic_popup_reminder) // هنا ضع أيقونة من مجلد drawable .setContentText("قام مستخدم بالتعليق على منشورك") .setDefaults(Notification.DEFAULT_ALL) .setAutoCancel(true) .setContentIntent(pendingIntent) .setTicker(title) .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); } else { builder = new NotificationCompat.Builder(this); intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); builder.setContentTitle("تعليق جديد") .setSmallIcon(android.R.drawable.ic_popup_reminder) // هنا ضع أيقونة من مجلد drawable .setContentText("لديك تعليق جديد") .setDefaults(Notification.DEFAULT_ALL) .setAutoCancel(true) .setContentIntent(pendingIntent) .setTicker(title) .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}) .setPriority(Notification.PRIORITY_HIGH); } Notification notification = builder.build(); notifManager.notify(NOTIFY_ID, notification);
- 22 اجابة
-
- 1
-
صحيح ,وهو هكذا سيأتي لك بجميع السجلات التي يتم إرجاعها من ال API على عددها لاحظ هنا في ال for loop إستخدمنا طول المصفوفة jsonArray.length() أي مثلاً تم إرجاع ٣ سجلات فإنه سيظهر ٣ سجلات بناء على عدد العناصر في المصفوفة for (int i = 0; i < jsonArray.length(); i++) { JSONObject hit = jsonArray.getJSONObject(i); String idtopic =hit .getString("idtopic"); int lastThread=Integer.parseInt(String.valueOf(idtopic)); JSONObject jsonObject = null; Toast.makeText(MyService.this, lastThread+":", Toast.LENGTH_SHORT).show(); } لكن إن أردت فقط عرض سجل واحد يمكنك عمل التالي للوب بدل jsonArray.length() ضع الرقم - 1 for (int i = 0; i < 2; i++) { JSONObject hit = jsonArray.getJSONObject(i); String idtopic =hit .getString("idtopic"); int lastThread=Integer.parseInt(String.valueOf(idtopic)); JSONObject jsonObject = null; Toast.makeText(MyService.this, lastThread+":", Toast.LENGTH_SHORT).show(); } وهكذا سيرجع لك سجل واحد
- 22 اجابة
-
- 2
-
هنا كما يظهر يوجد لديك أخطاء 32.416 2432-2432/com.example.myapplication W/System.err: org.json.JSONException: No value for idtopic 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at org.json.JSONObject.get(JSONObject.java:354) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at org.json.JSONObject.getString(JSONObject.java:510) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.example.myapplication.MyService$1.onResponse(MyService.java:48) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.example.myapplication.MyService$1.onResponse(MyService.java:41) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:83) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at android.os.Handler.handleCallback(Handler.java:615) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at android.os.Handler.dispatchMessage(Handler.java:92) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at android.os.Looper.loop(Looper.java:137) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at android.app.ActivityThread.main(ActivityThread.java:4745) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at java.lang.reflect.Method.invokeNative(Native Method) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at java.lang.reflect.Method.invoke(Method.java:511) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 05-29 13:10:32.416 2432-2432/com.example.myapplication W/System.err: at dalvik.system.NativeStart.main(Native Method) الخطأ الأساسي هنا No value for idtopic أي لا يوجد قيمة ل idtopic هل ال API الخاص بك يحوي تلك القيمة ,وأيضا هنا لديك خطأ for (int i = 0; i < jsonArray.length(); i++) { JSONObject hit = jsonArray.getJSONObject(0); أنت تقوم بتمرير 0 للميثود getJSONObject وهذا خطأ يجب أن تمرر متغير ال i أي هكذا for (int i = 0; i < jsonArray.length(); i++) { JSONObject hit = jsonArray.getJSONObject(i); حتي يتم الوصول إلى البيانات المرجعة من اللوب ,إن لم يعمل بعد ذلك أعلمني سأقوم ببناء التطبيق وال API لدي وأحللك المشكلة
- 22 اجابة
-
- 2
-
أهلا بك @مروان مروان3 أتوقع أنك لم تقم بتعريف ال Background service في ملف ال mainfest , تأكد من ذلك ,وأيضاً إن كنت تقوم بتجربة التطبيق على جهاز ذو نظام أندرويد ٨,٩ سيظهر لك في شريط الإشعارات عند غلق التطبيق سيظهر لك أن هناك عملية تجري في الخلفية تأكد من ذلك ,وأيضاً إذهب إلى التطبيق من خلال إعدادات هاتفك وتأكد من إنك أعطيت الصلاحيات للسماح للتطبيق بالعمل في الخلفية ,وأيضا تفقد إن كان هناك أخطاء تظهر في شريط ال Logcat في الأندرويد ستديو وأنت موصل الهاتف بالجهاز
- 22 اجابة
-
- 2
-
أهلا بك @مروان مروان3 يمكنك ذلك من خلال عمل API للتواصل بين تطبيقك والسيرفر الخاص بك ,وإرجاع التعليقات الجديدة المربوطة بالمستخدم A وموضوعه من جهت السيرفر وبناءً على ذلك نقوم بعمل إشعار في التطبيق ,ولعمل إشعار تفضل هذا كود بسيط لإرسال إشعار للمستخدم إستبدل محتوى الإشعار بالنص الذي تريد وكذلك إسم الإشعار NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("تعليق جديد") .setContentText("لقد تم التعليق على منشورك") .setPriority(NotificationCompat.PRIORITY_DEFAULT);
-
وعليكم السلام أخي @Mohammed Saber يمكنك عمل ذلك من خلال css و htmlهكذا <!DOCTYPE html> <html lang="ar" charset="utf-8"> <head> <link href="style.css" rel="stylesheet" /> <title>multi level drawer</title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <header> <form action="javascript:"> <input id="left-menu" type="checkbox"> <input id="left-menu-reset" type="reset"> <nav class="left-navigation"> <main> <label class="menu-toggle" for="left-menu"><span> </span></label> <label class="menu-close" for="left-menu-reset"><span> </span></label> <menu> <menuitem> <span class="heading">القائمة</span> </menuitem> <menuitem> <label for="left-menu-item-1">عنصر 1</label> <input id="left-menu-item-1" type="checkbox"> <nav> <main> <label class="menu-toggle" for="left-menu-item-1"><span> </span></label> <menu> <menuitem> <span class="heading">عنصر 1</span> </menuitem> <menuitem> <label for="left-menu-item-1-1">عنصر 1.1</label> <input id="left-menu-item-1-1" type="checkbox"> <nav> <main> <label class="menu-toggle" for="left-menu-item-1-1"><span> </span></label> <menu> <menuitem> <span class="heading">عنصر 1.1</span> </menuitem> <menuitem> <span>عنصر 1.1.1</span> </menuitem> <menuitem> <span>عنصر 1.1.2</span> </menuitem> <menuitem> <span>عنصر 1.1.3</span> </menuitem> </menu> </main> </nav> </menuitem> <menuitem> <label for="left-menu-item-1-2">عنصر 1.2</label> <input id="left-menu-item-1-2" type="checkbox"> <nav> <main> <label class="menu-toggle" for="left-menu-item-1-2"><span> </span></label> <menu> <menuitem> <span class="heading">عنصر 1.2</span> </menuitem> <menuitem> <span>عنصر 1.2.1</span> </menuitem> <menuitem> <span>عنصر 1.2.2</span> </menuitem> <menuitem> <span>عنصر 1.2.3</span> </menuitem> </menu> </main> </nav> </menuitem> <menuitem> <label for="left-menu-item-1-3">عنصر 1.3</label> <input id="left-menu-item-1-3" type="checkbox"> <nav> <main> <label class="menu-toggle" for="left-menu-item-1-3"><span> </span></label> <menu> <menuitem> <span class="heading">عنصر 1.3</span> </menuitem> <menuitem> <span>عنصر 1.3.1</span> </menuitem> <menuitem> <span>عنصر 1.3.2</span> </menuitem> <menuitem> <span>عنصر 1.3.3</span> </menuitem> </menu> </main> </nav> </menuitem> </menu> </main> </nav> </menuitem> </menu> </main> </nav> </form> <svg height="100%" width="100%" xmlns="http://www.w3.org/2000/svg"> <text dx="45%" dy="60%">← الهيدر →</text> </svg> </header> <main> <div class="introduction"> <center> <h1>قائمة متعددة </h1> <p>قائمة متعددة بإستخدام css فقط</p> </center> </div> </main> </body> </html> وملف الستايل أرفقته لك ,لأنه كبير ,وسيعمل بشكل جميل لكن لا تنسى الإشارة إلى ملف الستايل في صفحة ال html هنا <link href="style.css" rel="stylesheet" /> style.css
- 1 جواب
-
- 1
-
السلام عليكم أخي ,حسب ما فهمت إنك تريد إرسال إشعار من التطبيق عند قيام المستخدم بوضع تعليق جديد على بوست معين ,يمكنك ذلك من خلال إرجاع عدد التعليقات الحالي والتحقق إن كان هناك زيادة في العدد إن حدث زيادة نقوم بتفحص التعليقات من أخر عدد للتعليقات ثم عمل إشعار بتلك التعليقات من الAPI او السيرفر الخاص بك,ولعمل إشعار يمكنك إستخدام الكود التالي مع تعديله بما يتناسب مع تطبيقك (جافا) NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("قام مستخدم بالتعليق على منشورك") .setContentText("قام مستخدم بإضافة تعليق جديد!") .setPriority(NotificationCompat.PRIORITY_DEFAULT); وأيضا لإرسال إشعار حتى عند إغلاق التطبيق ,يتم إستخدم Background service وهي تعمل بالخلفية حتى عند إغلاق التطبيق تستمر بالعمل وتقوم هنا بالتفحص للإشعارات الجديدة
- 22 اجابة
-
- 2
-
مرحباً @زياد العمدة يمكنك التواصل مع الدعم الفني من الدعم الفني وسيحلون لك مشكلتك إن شاء الله
-
@مروان مروان3 يمكنك إظهار ال Dialog هكذا ,عدلت الكود لك private void CheckEnableGPS(){ String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if(!provider.equals("")){ //GPS مفعل نبدأ الأكتيفتي Toast.makeText(this, "GPS Enabled: " + provider, Toast.LENGTH_LONG).show(); }else{ //نطلب تفعيله من المستخدم new AlertDialog.Builder(this) .setTitle(R.string.title_location_permission) .setMessage("يرجى تفعيل ال GPs") .setPositiveButton("موافق", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); startActivity(intent); } }) .create() .show(); } }
- 7 اجابة
-
- 1
-
اهلا بك @مروان مروان3 أنت تريد تفقد إذا المستخدم مفعل ال GPS أو لا إذا كذلك ,قمت بعمل فنكشن بسيط سيتفحص إذا ال GPS مفعل أو لا إن غير مفعل نظهر للمستخدم خيار تفعيل ال GPS private void CheckEnableGPS(){ String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if(!provider.equals("")){ //GPS مفعل نبدأ الأكتيفتي Toast.makeText(this, "GPS Enabled: " + provider, Toast.LENGTH_LONG).show(); }else{ //نطلب تفعيله من المستخدم Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); startActivity(intent); } } ثم نقوم بإستخدام الفنكشن في ال onCreate ميثود هكذا @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CheckEnableGPS(); }
- 7 اجابة
-
- 1
-
السلام عليكم @مروان مروان3 الخطأ لديك هو أنك يجب أن تطلب الأذونات من المستخدم قبل تشغيل الأكتفيتي الذي تريده ,بعد ما يتم إعطاء الأذونات من المستخدم ثم يتم المباشرة في تشغيل الكود وهذا فنكشن بسيط لطلب الأذونات من المستخدم بعد ذلك قم بتشغيل الأكتفيتي إذا المستخدم وافق على إعطاء الأذونات public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99; public boolean checkLocationPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) { //هنا نظهر للمستخدم لماذا نطلب الأذونات من خلال Dialog // sees the explanation, try again to request the permission. new AlertDialog.Builder(this) .setTitle(R.string.title_location_permission) .setMessage(R.string.text_location_permission) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //Prompt the user once explanation has been shown ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION); } }) .create() .show(); } else { // No explanation needed, we can request the permission. ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION); } return false; } else { return true; } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_LOCATION: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { // تم إعطاء الأذونات قم بتشغيل الأكتفيتي هنا } } else { // permission denied, boo! Disable the //في حال لم يعطي المستخدم الأذونات إذاً نلغي التشغيل أو تقوم بإظهر توست بفشل العملية } return; } } } الأن نقوم بإستخدام الفنكشن في ال onCreate ميثود هكذا @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); checkLocationPermission(); }
- 7 اجابة
-
- 1
-
السلام عليكم @Khaled Almousawi يمكنك الحماية من الإختراق أو الثغرات المشابه لما ذكرت ببساطة من خلال منع الفنكشنز المسؤولة عن فك التشفير أو تنفيذ الأكواد الخبيثة على موقعك حيث يتم تشفير المحتوى الخبيث عن طريق تشفير base 64 وتستخدم الفنكشن eval (وهي المسؤولة عن هذا النوع من الثغرات)لتشغيل ذلك النص وهو عبارة عن أكواد خبيثة ,لمنع ذلك من الأساس الحل هو تعطيل تلك الفنكشن في إستضافتك أو السيرفر الخاص بك من خلال إضافة الكونفجريشن التالي إلى ملف php.ini الخاص بإستضافتك وسيعطل عمل تلك الأكواد allow_url_fopen = off allow_url_include = off disable_functions = "apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, mysql_pconnect, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode" حيث هذه الفنكشنز معروفة بثغراتها
- 6 اجابة
-
- 1
-
السلام عليكم @Abo Abdullah Abo Abdullah الخطأ معناه أنه مشكلة من الإتصال بالسيرفر أتوقع سببها عدم إستخدام شهادة ssl مع السيرفر غير الكود إلى التالي لكن تأكد من أن السيرفر الخاص بك يمتلك إضافة openssl مفعلة <?php if($_POST["message"]) { ini_set("SMTP","ssl://smtp.gmail.com"); ini_set("smtp_port","465"); ini_set('sendmail_from', "email@domain.com"); mail("your@email.address", "Form to email message", $_POST["message"], "From: an@email.address"); } ?> <html> <head> <title>إرسال رسالة واتس أب </title> </head> <body> <form method="post" action=""> <textarea name="message"></textarea> <input type="submit"> </form> </body> </html> إن لم يعمل أو ظهر خطأ مشابه إستخدم تشفير tls هكذا الكود البديل في حال لم يعمل أعلاه <?php if($_POST["message"]) { ini_set('SMTP', "tls://smtp.gmail.com"); ini_set('smtp_port', "587"); ini_set('sendmail_from', "email@domain.com"); mail("your@email.address", "Form to email message", $_POST["message"], "From: an@email.address"); } ?> <html> <head> <title>إرسال رسالة واتس أب </title> </head> <body> <form method="post" action=""> <textarea name="message"></textarea> <input type="submit"> </form> </body> </html>
- 18 اجابة
-
- 1
-
@Abo Abdullah Abo Abdullah اه المشكلة من السيرفر الخاص بك حيث لم يتم ضبط إعدادت سيرفر ال SMTP الخاص بفنكشن mail() لحل المشكلة قم بتغيير الكود إلى التالي مع تغيير الإيميل email@domain.com إلى إيميلك المرسل منه <?php if($_POST["message"]) { ini_set('SMTP', "smtp.gmail.com"); ini_set('smtp_port', "25"); ini_set('sendmail_from', "email@domain.com"); mail("your@email.address", "Form to email message", $_POST["message"], "From: an@email.address"); } ?> <html> <head> <title>إرسال رسالة واتس أب </title> </head> <body> <form method="post" action=""> <textarea name="message"></textarea> <input type="submit"> </form> </body> </html>
- 18 اجابة
-
- 1
-
@Abo Abdullah Abo Abdullah إذا تريد إرسال الرسالة إلى إيميل من خلال المتصفح فهي ممكنة من خلال php قمت بعمل فورم بسيط لذلك من html ,php ثم إحفظ ملف الكود بصيغة .php مثال إسم الملف هكذا test.php وستحتاج إلى سيرفر أو إستضافة لتجربته لأن php تحتاج إلى سيرفر <?php if($_POST["message"]) { mail("your@email.address", "Form to email message", $_POST["message"], "From: an@email.address"); } ?> <html> <head> <title>إرسال رسالة واتس أب </title> </head> <body> <form method="post" action=""> <textarea name="message"></textarea> <input type="submit"> </form> </body> </html> وإستبدل your@email.address بالإيميل الذي تريد الإرسال له ,وإستبدل an@email.address بالإيميل الذي سيظهر لدي المستلم حيث ستظهر له من أي بريد تم إرسالها
- 18 اجابة
-
- 1
-
@Abo Abdullah Abo Abdullah اه فهمت عليك لكن هذا تقريباً شبه مستحيل لأغراض أمنية من قبل واتس أب ,إذا كان ذلك ممكناً لكانت ثغرة أمنية في التطبيق حيث الهاكر يستطيع إرسال رابط إلى مستخدم واتس أب وعند الضغط عليه مباشرة يرسل رسالة لرقم معرف من قبل الهاكر بدون علم صاحب الحساب
- 18 اجابة
-
- 1
-
@Abo Abdullah Abo Abdullah تفضل قمت بتعديل الكود قليلاً إستبدل "الرقم هنا " برقم الجوال (يجب أن يكون مسجل في جهات الإتصال لديك) <html> <head> <title>إرسال رسالة واتس أب </title> </head> <body> <a href="https://api.WhatsApp.com/send?phone=الرقم هنا &text=الرسالة هنا"> تواصل معنا من خلال الواتس اب.</a> </body> </html>
- 18 اجابة
-
- 1
-
صباح الخير @Abo Abdullah Abo Abdullah لإرسال رسالة من خلال الواتس اب من خلال صفحة ويب ,قمت بعمل الصفحة لك تفضل <html> <head> <title>إرسال رسالة واتس أب </title> </head> <body> <a href="whatsapp://send?text=الرسالة هنا"> تواصل معنا من خلال الواتس اب.</a> </body> </html> وبالنسبة للفرق بين php و html , يوجد عدة فروقات لكن سأذكر المعروفة ,أولاً PHP تستخدم لبرمجة لوحات التحكم الخاصة بالمواقع أي للباك إند بينما HTML تستخدم لعمل وتصميم واجهة المستخدم من خلال إستخدام لغات أخرى لتصميم والستايل مثل css ,و php تتحكم بكل ما في واجهة الموقع والموقع بشكل عام
- 18 اجابة
-
- 1
-
مرحباً @دانا دلول كل عام وأنت بخير لا يلزم إتقان اللغة الإنجليزية للتعامل مع البرمجة والتطبيقات ,بل فقط تعلم الأساسيات وبعض المصطلحات سيكون كافي للتعامل مع البرمجة بشكل عام
- 3 اجابة
-
- 2
-
صباح الخير @دانا دلول برنامج nox هو محاكي أندرويد أي تستطيعين تنزيل تطبيقات الأندرويد عليه بمجرد تشغيله سيعمل مثل الهاتف الذي يعمل بنظام أندرويد
- 4 اجابة
-
- 2
-
@Ahmed Hisham3 للباك إند أنصحك ب php إطار عمل لارافيل ,سواء لبناء لوحة تحكم للأندرويد أو لبناء لوحة تحكم لموقع ,الأندرويد لغة البرمجة الأصلية هي Java لذلك أنصحك بها
- 4 اجابة
-
- 1
-
مرحباً بك @Ahmed Hisham3 هذا يعتمد على عدة عوامل ,مثلاً إذا أردت بناء تطبيق أندرويد ناتيف(أي برمجة أصلية جافا ,أو كوتلن) فالإجابة لا فقط لغة واحدة من المذكورة ,أما إذا أردت بناء التطبيق أن يكون هجين بمعنى لغة برمجة هجينة فالإجابة نعن ستتعلم أكثر من لغة مثل HTML,Javascript,Jquery,css ولغات أخرى ,الفرق بين البرمجة الهجينة والبرمجة الأصلية هو البرمجة الهجينة بناء تطبيق واحد يعني بنائك لتطبيق على الأندرويد والأيفون والويب أما البرمجة الأصلية فهي فقط تبنيه لمنصة واحدة فقط مثلاً أندرويد فقط
- 4 اجابة
-
- 1