اذهب إلى المحتوى

عبدالرشيد احمد

الأعضاء
  • المساهمات

    20
  • تاريخ الانضمام

  • تاريخ آخر زيارة

أجوبة بواسطة عبدالرشيد احمد

  1. السلام عليكم ورحمة الله وبركاته،

    Express مكتبة مبنية على JavaScript, ويمكن تركيبها مع nodejs ليسهل وصول البرنامج اليه. إذا اردت ان اعمل API لبرنامج nodejs, هاذا اسهل واسرع مكتب اعرفه. رابط المكتبة: https://www.npmjs.com/package/express

    Nodejs برنامج يسهل ان تعمل خلفية لبرنلمج بلغة JavaScript.

    NPM مكتبة لمكتبات JavaScript لnodejs. تصفح هنا https://www.npmjs.com اضن تعدو اكثر من مليون مكتبة. المكاتب هاذي عبارة عن ملفات كود ممكن تسهل في تصنيع برنامجك بدل ان تعمل شي تم عمله من قبل من جديد.

    اذا كان تعلمك لسبب معين كعمل برنامج او تعلم شخص اخر او تشتغل في المجال هاذا. اضن مش ضروري ان تتعلم كل شيء. و تتعلم ما تحتاجه فقط لمهمة معينة. معضم هاذي الاشياء تتطور بشكل سريع و الحضر يمكن ان يكون غير كافي لبكرة.

    نصيحة مني كمطور برامج، ان تتعلم بشكل عملي. اعمل برامج واستخدم احدث الغات حتى ولو كان لك فقط.

    وإنشاء الله خير.

    • أعجبني 1
  2. السلام عليكم ورحمة الله وبركاته،

    كما بين احمد ريحاوي، إذا كان البنك المركزي هو المصدر الرسمي، إسالهم إذا كان لديهم قاعدة بيانات يوفر API يمكن تواصل عبره لجلب احدث الاسعار.

  3. وعليكم السلام ورحمه الله وبركاته، 

    أضن SharedPreferences يمكن استعماله لخفض بيانات لاستعمال في اي جزء من البرنامج. في طرق غير لتحويل المعلومات من شاشة لشاشة.

    اذا تريد تحويل معلومات في String من Activity الى Activity استعمل putExtra.

    مثال في اكتيفيتي الاولى: : 

    String text1 = editText.getText().toString();
    Intent intent = new Intent(MainActivity.this, Activity2.class);
    intent.putExtra("text1", text1);
    startActivity(intent);

    بعدين في اكتيفيتي الثانية:

      editText.setText(getIntent().getStringExtra("text1"));

     

    و اذا تريد تحويل معلومات في String من  Fragment الى Fragment استعمل Bundle.

    مثال في فراجمنت الاولى:

    // بعد انشاء و ابداء الفراجمنت
    String text1 = editText.getText().toString();
    Bundle bundle = new Bundle();
    bundle.putString("text1", text1);
    fragmentName.setArguments(bundle);

    بعدين في فراجمنت الثانية:

    Bundle bundle = getArguments();
    if(bundle! = null){
    	editText.setText(bundle.getString("text1"));
    }

     

    • أعجبني 1
  4. طيب، جرب هاذي الحين:

    MainActivitytt.java

    public class MainActivitytt extends AppCompatActivity {
    
    
        private Spinner spinner;
        private EditText editText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            spinner = findViewById(R.id.spinnerCountries);
            spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, CountryData.countryNames));
    
            editText = findViewById(R.id.editTextPhone);
    
            findViewById(R.id.buttonContinue).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String code = CountryData.countryAreaCodes[spinner.getSelectedItemPosition()];
    
                    String number = editText.getText().toString().trim();
    
                    if (number.isEmpty() || number.length() < 6) {
                        editText.setError("Valid number is required");
                        editText.requestFocus();
                        return;
                    }
    
                    String phoneNumber = "+" + code + number;
    
                    PhoneAuthProvider.getInstance().verifyPhoneNumber(
                    phoneNumber,
                    60,
                    TimeUnit.SECONDS,
                    TaskExecutors.MAIN_THREAD,
                    mCallBack
                 );
    
                }
            });
    
            mCallBack = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
    
                @Override
                public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                    super.onCodeSent(s, forceResendingToken);
                    
                    new android.os.Handler().postDelayed(
                        new Runnable(){
                            public void run(){
    
                            }
                        },
                    10000);
    
                    Intent intent = new Intent(MainActivitytt.this, VerifyPhoneActivity.class);
                    intent.putExtra("AuthCredentials", s);
                    startActivity(intent);
                    finish();
                }
        
                @Override
                public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                    signInWithCredential(phoneAuthCredential);
                }
        
                @Override
                public void onVerificationFailed(FirebaseException e) {
                    Toast.makeText(VerifyPhoneActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                }
            };
        }
    
        private void signInWithCredential(PhoneAuthCredential credential) {
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
    
                                Intent intent = new Intent(MainActivitytt.this, ProfileActivitytt.class);
                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    
                                startActivity(intent);
    
                            } else {
                                Toast.makeText(MainActivitytt.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
                            }
                        }
                    });
        }
        @Override
        protected void onStart() {
            super.onStart();
    
            if (FirebaseAuth.getInstance().getCurrentUser() != null) {
                Intent intent = new Intent(this, ProfileActivitytt.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(intent);
            }
        }
    }

     

    VerifyPhoneActivity.java

    public class VerifyPhoneActivity extends AppCompatActivity {
    
    
        private String verificationId;
        private FirebaseAuth mAuth;
        private ProgressBar progressBar;
        private EditText editText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_verify_phone);
    
            mAuth = FirebaseAuth.getInstance();
    
            progressBar = findViewById(R.id.progressbar);
            editText = findViewById(R.id.editTextCode);
    
            verificationId = getIntent().getStringExtra("AuthCredentials");
    
            findViewById(R.id.buttonSignIn).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    String code = editText.getText().toString().trim();
    
                    if (code.isEmpty() || code.length() < 6) {
    
                        editText.setError("Enter code...");
                        editText.requestFocus();
                        return;
                    }
                    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
                    signInWithCredential(credential);
                }
            });
    
        }
    
    
        private void signInWithCredential(PhoneAuthCredential credential){
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(VerifyPhoneActivity.this, new OnCompleteListener<AuthResult>(){
                        public void onComplete(@NonNull Task<AuthResult> task){
                            if(task.isSuccessful()){
                                         
                            } else {
                                if(task.getException() instanceof FirebaseAuthInvalidCredentialsException){
                                    
                                }
                            }
                        }
                    });
            }
    
    }

     

  5. اسف، خطا صغير في اجابة الاولة جرب هاذا. اذا تريد ان يقرا الكود من الsms اوتوماتك، عدل زيادا. الحين يجب ان تدخل الكود من الsms بالكيبورد.

     

    MainActivitytt.java

    public class MainActivitytt extends AppCompatActivity {
    
    
        private Spinner spinner;
        private EditText editText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            spinner = findViewById(R.id.spinnerCountries);
            spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, CountryData.countryNames));
    
            editText = findViewById(R.id.editTextPhone);
    
            findViewById(R.id.buttonContinue).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String code = CountryData.countryAreaCodes[spinner.getSelectedItemPosition()];
    
                    String number = editText.getText().toString().trim();
    
                    if (number.isEmpty() || number.length() < 6) {
                        editText.setError("Valid number is required");
                        editText.requestFocus();
                        return;
                    }
    
                    String phoneNumber = "+" + code + number;
    
                    PhoneAuthProvider.getInstance().verifyPhoneNumber(
                    phoneNumber,
                    60,
                    TimeUnit.SECONDS,
                    TaskExecutors.MAIN_THREAD,
                    mCallBack
                 );
    
                }
            });
    
            mCallBack = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
    
                @Override
                public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                    super.onCodeSent(s, forceResendingToken);
                    
                    new android.os.Handler().postDelayed(
                        new Runnable(){
                            public void run(){
    
                            }
                        },
                    10000);
    
                    Intent intent = new Intent(MainActivitytt.this, VerifyPhoneActivity.class);
                    intent.putExtra("AuthCredentials", s);
                    startActivity(intent);
                    finish();
                }
        
                @Override
                public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                    signInWithCredential(phoneAuthCredential);
                }
        
                @Override
                public void onVerificationFailed(FirebaseException e) {
                    Toast.makeText(VerifyPhoneActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                }
            };
        }
    
        private void signInWithCredential(PhoneAuthCredential credential) {
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
    
                                Intent intent = new Intent(MainActivitytt.this, ProfileActivitytt.class);
                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    
                                startActivity(intent);
    
                            } else {
                                Toast.makeText(VerifyPhoneActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
                            }
                        }
                    });
        }
        @Override
        protected void onStart() {
            super.onStart();
    
            if (FirebaseAuth.getInstance().getCurrentUser() != null) {
                Intent intent = new Intent(this, ProfileActivitytt.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    
                startActivity(intent);
            }
        }
    }

     

    VerifyPhoneActivity.java

    public class VerifyPhoneActivity extends AppCompatActivity {
    
    
        private String verificationId;
        private FirebaseAuth mAuth;
        private ProgressBar progressBar;
        private EditText editText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_verify_phone);
    
            mAuth = FirebaseAuth.getInstance();
    
            progressBar = findViewById(R.id.progressbar);
            editText = findViewById(R.id.editTextCode);
    
            verificationId = getIntent().getStringExtra("AuthCredentials");
    
            findViewById(R.id.buttonSignIn).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    String code = editText.getText().toString().trim();
    
                    if (code.isEmpty() || code.length() < 6) {
    
                        editText.setError("Enter code...");
                        editText.requestFocus();
                        return;
                    }
                    verifyCode(code);
                }
            });
    
        }
    
        private void verifyCode(String code) {
            PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
            signInWithCredential(credential);
        }
    
        private void signInWithCredential(PhoneAuthCredential credential){
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(VerifyPhoneActivity.this, new OnCompleteListener<AuthResult>(){
                        public void onComplete(@NonNull Task<AuthResult> task){
                            if(task.isSuccessful()){
                            } else {
                                if(task.getException() instanceof FirebaseAuthInvalidCredentialsException){
                                    
                                }
                            }
                        }
                    });
            }
    
    }

     

    • أعجبني 1
  6. عدلت الكود. جرب هاذا. اذا تريد ان يقرا الكود من الsms اوتوماتك، عدل زيادا. الحين يجب ان تدخل الكود من الsms بالكيبورد.

     

    MainActivitytt.java

    public class MainActivitytt extends AppCompatActivity {
    
    
        private Spinner spinner;
        private EditText editText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            spinner = findViewById(R.id.spinnerCountries);
            spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, CountryData.countryNames));
    
            editText = findViewById(R.id.editTextPhone);
    
            findViewById(R.id.buttonContinue).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String code = CountryData.countryAreaCodes[spinner.getSelectedItemPosition()];
    
                    String number = editText.getText().toString().trim();
    
                    if (number.isEmpty() || number.length() < 6) {
                        editText.setError("Valid number is required");
                        editText.requestFocus();
                        return;
                    }
    
                    String phoneNumber = "+" + code + number;
    
                    PhoneAuthProvider.getInstance().verifyPhoneNumber(
                    phoneNumber,
                    60,
                    TimeUnit.SECONDS,
                    TaskExecutors.MAIN_THREAD,
                    mCallBack
                 );
    
                }
            });
    
            mCallBack = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
    
                @Override
                public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                    super.onCodeSent(s, forceResendingToken);
                    
                    new android.os.Handler().postDelayed(
                        new Runnable(){
                            public void run(){
    
                            }
                        },
                    10000);
    
                    Intent intent = new Intent(MainActivitytt.this, VerifyPhoneActivity.class);
                    intent.putExtra("AuthCredentials", s);
                    startActivity(intent);
                    finish();
                }
        
                @Override
                public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                    signInWithCredential(phoneAuthCredential);
                }
        
                @Override
                public void onVerificationFailed(FirebaseException e) {
                    Toast.makeText(VerifyPhoneActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
                }
            };
        }
    
        private void signInWithCredential(PhoneAuthCredential credential) {
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
    
                                Intent intent = new Intent(VerifyPhoneActivity.this, ProfileActivitytt.class);
                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    
                                startActivity(intent);
    
                            } else {
                                Toast.makeText(VerifyPhoneActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
                            }
                        }
                    });
        }
        @Override
        protected void onStart() {
            super.onStart();
    
            if (FirebaseAuth.getInstance().getCurrentUser() != null) {
                Intent intent = new Intent(this, ProfileActivitytt.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    
                startActivity(intent);
            }
        }
    }

     

    VerifyPhoneActivity.java

    public class VerifyPhoneActivity extends AppCompatActivity {
    
    
        private String verificationId;
        private FirebaseAuth mAuth;
        private ProgressBar progressBar;
        private EditText editText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_verify_phone);
    
            mAuth = FirebaseAuth.getInstance();
    
            progressBar = findViewById(R.id.progressbar);
            editText = findViewById(R.id.editTextCode);
    
            verificationId = getIntent().getStringExtra("AuthCredentials");
    
            findViewById(R.id.buttonSignIn).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    String code = editText.getText().toString().trim();
    
                    if (code.isEmpty() || code.length() < 6) {
    
                        editText.setError("Enter code...");
                        editText.requestFocus();
                        return;
                    }
                    verifyCode(code);
                }
            });
    
        }
    
        private void verifyCode(String code) {
            PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
            signInWithCredential(credential);
        }
    
        private void signInWithCredential(PhoneAuthCredential credential){
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(VerifyPhoneActivity.this, new OnCompleteListener<AuthResult>(){
                        public void onComplete(@NonNull Task<AuthResult> task){
                            if(task.isSuccessful()){
                            } else {
                                if(task.getException() instanceof FirebaseAuthInvalidCredentialsException){
                                    
                                }
                            }
                        }
                    });
            }
    
    }

     

    • أعجبني 1
  7. وايضا شوف https://www.heroku.com أضن يمكن تحميل البرامج ببلاش. و في https://pages.github.com و https://www.netlify.com لتحميل الصفحات ببلاش.

    Firebase أيضاً عندها firebase hosting و firebase functions لتركيب البرامج بلغة الجافا سكريبت على node.js. بس أضن قاعدة البيانات مبنية على noSQL.

     

  8. مش متاكد إذا كان النضام من عندهم للتوفير sms ولاكن يوفر.

    نعم أذا تقوم بالتجارب فقط، عادي! ولاكن للمستخدم الحقيقي أذا تعرض لاهاذا السيناريو, إذا خرج وحاول أن يدخل مرة أخرى، عشان لا ينتصر لساعات ولا يستطيع أن يدخل البرنامج تعامل مع هاذا السيناريو. 

    طيب السلام عليكم ورحمه الله وبركاته

    • أعجبني 1
  9. طيب شفت المشكلة، إذا تم إستخدام الرمز وتم التحقيق مع تجربتي لم يرسل رمز جديد أيضاً وهاذا عشان لا داعي، هاذا الطريق توفر sms و جميل. 

    عندنا ثلاثة سيناريوهات هنا: 

    ١. onCodeSent هنا إذا تم إرسال رمز روح لإشاشة التحقيق مع intent

    ٢. onVerificationCompleted هنا إذا تم التحقيق من قبل و خرج المستخدم ب singout ولم يمر مدة كثيرة والبرنامج في نفس الهاتف، لا داعي لإرسال رمز جديد. هنا firebase تتعامل مع هاذا وعليك أن تعمل signin with credentials فقت ثم intent الذي تريد بعده

    ٣.onVerificationFailed هنا تعامل بالمشاكل بطريقتك الخاصة.

     

    رابط للمعلومات https://firebase.google.com/docs/auth/android/phone-auth

    • أعجبني 1
×
×
  • أضف...