تسجيل الدخول في العاب اندرويد

الإعلانات

إنشاء تجربة تسجيل دخول سلسة

 

 

تسجيل الدخول في العاب اندرويد

 

من أجل الوصول إلى وظائف “خدمات ألعاب قوقل بلاي”، يجب على لعبتك أن توفر حساب اللاعب الذي سجل الدخول. 

إذا لم تتم المصادقة على اللاعب، فقد تواجه اللعبة أخطاءً عند إجراء إستدعاءات، لواجهات برمجة تطبيقات “خدمات ألعاب قوقل بلاي”.

توضح هذه الوثائق كيفية تنفيذ تجربة تسجيل دخول سلسة في لعبتك.

 

 

 

تنفيذ تسجيل الدخول للاعب

تعتبر الفئة GoogleSignInClient نقطة الدخول الرئيسية لإستيراد حساب اللاعب الذي سجل دخوله حالياً، ولتسجيل دخول اللاعب، إذا لم يكن قد فعل ذلك من قبل، على تطبيقك على الجهاز.

ملاحظة: تقوم الفئة GoogleSignInClient بإستخدام فئة المهام Task الخاصة بخدمات قوقل بلاي، لعرض النتائج بشكلٍ غير متزامن.

لمعرفة المزيد حول كيفية إستخدام المهام لإدارة العمل المتسلسل، راجع دليل مطوري واجهة برمجة المهام.

 

لإنشاء عميل تسجيل الدخول، اتبع الخطوات التاليه:

1- قم بإنشاء عميل تسجيل الدخول من خلال الكائن GoogleSignInOptions كما هو موضح في مقتطف الكود التالي.

في GoogleSignInOptions.Builder لتكوين تسجيل الدخول الخاص بك، يجب عليك تحديد GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN.

GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;

 

2- إذا أردت إستخدام SnapshotsClient، فأنت بحاجة لإضافة (requestScopes(Drive.SCOPE_APPFOLDER.

إلى GoogleSignInOptions.Builder الخاصة بك، كما هو موضح في مقتطف الكود التالي.

GoogleSignInOptions  signInOptions =
    new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestScopes(Drive.SCOPE_APPFOLDER)
        .build();
تحذير: لا تطلب أي نطاقات أخرى، أو بيانات الملف الشخصي لقوقل، ما لم تكن ضرورية لحالة الإستخدام الخاصة بك.

يؤدي أي نطاق آخر، إلى فشل تسجيل الدخول الصامت لأول مرة، بإستثناء المستخدمين الذين قاموا بالفعل بتسجيل الدخول بنجاح على جهاز مختلف.

3- قم بإستدعاء الداله ()GoogleSignIn.getClient وقم بتمرير الخيارات التي قمت بتكوينها في الخطوات السابقة.

في حالة نجاح الإستدعاء، تقوم واجهة برمجة تسجيل الدخول لقوقل بإرجاع مثيل من GoogleSignInClient.

 

 

 

تحقق من تسجيل دخول اللاعب بالفعل أم لا

يمكنك التحقق مما إذا كان الحساب قد تم تسجيل الدخول به بالفعل أم لا، على الجهاز الحالي بإستخدام ()GoogleSignIn.getLastSignedInAccount.

وما إذا كان لدى الحساب الحالي الأذونات المطلوبة، و الممنوحة بالفعل أم لا، بإستخدام ()GoogleSignIn.hasPermissions.

إذا كان كلا الشرطين “صحيح”، بمعنى أن الداله ()getLastSignedInAccount تقوم بإرجاع قيمة غير فارغة، وتقوم الداله ()hasPermissions بإرجاع “صحيح”.

يمكنك إستخدام الحساب المرجع بأمان، من الداله ()getLastSignedInAccount، حتى لو كان الجهاز غير متصل.

 

 

 

تنفيذ تسجيل دخول آمن

يمكنك إستدعاء ()silentSignIn لإستيراد حساب اللاعب الذي سجل دخوله حالياً، وتحاول تسجيل دخول اللاعبين بدون عرض واجهة المستخدم..

إذا قاموا بتسجيل الدخول بنجاح إلى تطبيقك، على جهاز مختلف.

تقوم الداله ()silentSignIn بإرجاع <Task<GoogleSignInAccount. عند إكتمال المهمة، تقوم بتعيين الحقل GoogleSignInAccount الذي أعلنته مسبقاً

للحساب الذي سجل دخوله، والذي قامت المهمة بإرجاعه كنتيجة، أو إلى فارغ null، والتي تشير إلى عدم وجود مستخدم تم تسجيل دخوله.

إذا فشلت محاولة تسجيل الدخول الصامت، يمكنك إختيارياً إرسال غرض تسجيل الدخَوُل، لعرض واجهة مستخدم تسجيل الدخُول..

كما هو موضح في تنفيذ تسجيل دخول تفاعلي.

بما أن حالة اللاعب الذي قام بتسجيل الدخول يمكن أن تتغير عندما لا يكون النشاط في المقدمة، نوصي بإستدعاء ()silentSignIn

من دالة ()onResume الخاصة بالنشاط.

 

لتنفيذ تسجيل الدخول الصامت، اتبع الخطوات التالية:

1- قم بإستدعاء الداله ()silentSignIn على GoogleSignInClient لبدء تدفق تسجيل الدخول الصامت. يقوم هذا الإستدعاء بإرجاع الكائن <Task<GoogleSignInAccount

والذي يحتوي على GoogleSignInAccount إذا كان تَسجيل الدخول الصامت، ناجحاً.

 

2- تعامل مع فشل أو نجاح، تسجيل دخول اللاعب، من خلال تجاوز OnCompleteListener

-إذا كانت مهمة تسجيل الدَخول ناجحة، فأحصل على كائن GoogleSignInAccount من خلال إستدعاء ()getResult.

– إذا لم يكن تسجَيل الدخول ناجحاً، يمكنك إرسال غرض تسَجيل الدخول لكي يقوم بإطلاق تدفق تسجيَل دخول تفاعلي.

للحصول على قائمة بمستمعي إستدعاء إضافيه، والتي يمكنك إستخدامها، راجع دليل مطوري واجهة برمجة المهام و مرجع واجهة برمجة المهام.

 

مقتطف الكود التالي يعرض كيف يمكن لتطبيقك إجراء تسجيل دخول صامت:

private void signInSilently() {
  GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
  GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
  if (GoogleSignIn.hasPermissions(account, signInOptions.getScopeArray())) {
    // Already signed in.
    // The signed in account is stored in the 'account' variable.
    GoogleSignInAccount signedInAccount = account;
  } else {
    // Haven't been signed-in before. Try the silent sign-in first.
    GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOptions);
    signInClient
        .silentSignIn()
        .addOnCompleteListener(
            this,
            new OnCompleteListener<GoogleSignInAccount>() {
              @Override
              public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
                if (task.isSuccessful()) {
                  // The signed in account is stored in the task's result.
                  GoogleSignInAccount signedInAccount = task.getResult();
                } else {
                  // Player will need to sign-in explicitly using via UI.
                  // See [sign-in best practices](http://developers.google.com/games/services/checklist) for guidance on how and when to implement Interactive Sign-in,
                  // and [Performing Interactive Sign-in](http://developers.google.com/games/services/android/signin#performing_interactive_sign-in) for details on how to implement
                  // Interactive Sign-in.
                }
              }
            });
  }
}

@Override
protected void onResume() {
  super.onResume();
  signInSilently();
}

إذا فشلت محاولة تسجيل الدخول الصامت، فيمكنك إستدعاء ()getException للحصول على ApiException مع رمز الحالة المفصل.

رمز حالة CommonStatusCodes.SIGN_IN_REQUIRED يشير إلى أن اللاعب بحاجة إلى إتخاذ إجراء صريح لتسجيل الدخول.

في هذه الحاله، ينبغي أن يبدأ تطبيقك تدفق تسجيل دخول تفاعلي، كما هو موضح في القسم التالي.

 

 

تنفيذ تسجيل دخول تفاعلي

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

تقوم Google Sign-In API بعرض واجهة مستخدم تطالب اللاعب بإدخال بياناته المعتمده لتسجيل الدخول.

يعمل هذا النهج على تبسيط عملية تطوير تطبيقك، بما أن نشاط تسجيل الدخول، يعالج سيناريوهات مثل، الحاجة إلى تحديث خدمات قوقل بلاي

أو إظهار مطالبات الموافقة، من أجل تطبيقك. يتم إرجاع النتيجة عبر إستدعاء onActivityResult.

 

لتنفيذ تسجيل الدخول التفاعلي، اتبع الخطوات التاليه:

1- قم بإستدعاء ()getSigninIntent على GoogleSignInClient للحصول على غرض تسجيل الدخول، ثم قم بإستدعاء ()startActivity ومرر ذاك الغرض.

يعرض مقتطف الكود التالي كيف يمكن لتطبيقك تشغيل تدفق “تسجيل دخول تفاعلي”:

private void startSignInIntent() {
  GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
      GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
  Intent intent = signInClient.getSignInIntent();
  startActivityForResult(intent, RC_SIGN_IN);
}

2- في الإستدعاء ()onActivityResult، عالج النتيجة من الغرض المُرجع.

-إذا كانت نتيجة تسجيل الدخول ناجحة، فقم بجلب كائن GoogleSignInAccount من GoogleSignInResult.

-إذا كانت نتيجة تسجيل الدخول غير ناجحة، فيجب عليك معالجة خطأ تسجيل الدخول (مثال، من خلال عرض رسالة خطأ في التنبيه).

مقتطف الكود التالي يعرض كيف يمكن لتطبيقك التعامل مع نتائج تسجيل دخول اللاعب:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == RC_SIGN_IN) {
    GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
    if (result.isSuccess()) {
      // The signed in account is stored in the result.
      GoogleSignInAccount signedInAccount = result.getSignInAccount();
    } else {
      String message = result.getStatus().getStatusMessage();
      if (message == null || message.isEmpty()) {
        message = getString(R.string.signin_other_error);
      }
      new AlertDialog.Builder(this).setMessage(message)
          .setNeutralButton(android.R.string.ok, null).show();
    }
  }
}

 

 

إستيراد معلومات اللاعب

الـGoogleSignInAccount الذي تقوم “واجهة برمجة قوقل لتسجيل الدخول” بإرجاعه، لا يحتوي على أي معلومات للاعب.

إذا كانت لعبتك تستخدم معلومات اللاعب، مثل “اسم عرض” اللاعب و “معرف” اللاعب، فيمكنك إتباع هذه الخطوات لإستيراد هذه المعلومات:

1- احصل على كائن PlayersClient من خلال إستدعاء الداله ()getPlayersClient وقم بتمرير GoogleSignInAccount كمعامل.

2- إستخدم دوال PlayersClient لتحميل كائن Player  والذي يحتوي على معلومات اللاعب بشكلٍ غير متزامن. مثال، يمكنك إستدعاء

()getCurrentPlayer لتحميل اللاعب الذي سجل دخوله حالياً. إذا قامت المهمة بإرجاع ApiException مع رمز الحاله

لـSIGN_IN_REQUIRED..فهذا يشير إلى أن اللاعب بحاجة إلى إعادة المصادقة.

للقيام بذلك، قم بإستدعاء ()GoogleSignInClient.getSignInIntent لتسجيل دخول اللاعب بشكلٍ فعال.

3- إذا أرجعت المهمة كائن Player بنجاح، يمكنك عندها إستدعاء دوال كائن Player لإستيراد تفاصيل معينة للاعب (على سبيل المثال، ()getDisplayName أو ()getPlayerId).

 

 

 

توفير زر تسجيل الدخول

لتوفير زر تسجيل الدخول القياسي الخاص بقوقل، في لعبتك، يمكنك إستخدام أحد هذه الأساليب:

-قم بتضمين com.google.android.gms.common.SignInButton في مخطط النشاط الرئيسي؛ أو

-صمم زر تسجيل دخول مخصص، وفقاً لإرشادات تسجيل الدخول الخاصة بشركة قوقل.

عندما ينقر المستخدمون على زر تسجيل الدخول، يجب أن تبدأ لعبتك في تدفق تسجيل الدخول عن طريق إرسال غرض تسجيل الدخول، كما هو موضح في تنفيذ تسجيل دخول تفاعلي.

 

يعرض مقتطف الكود هذا، كيف يمكنك إضافة زر تسجيل الدخول في دالة ()onCreate الخاصة بنشاطك.

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_sign_in);
  findViewById(R.id.sign_in_button).setOnClickListener(this);
  findViewById(R.id.sign_out_button).setOnClickListener(this);
}

يعرض مقتطف الكود التالي كيف يمكنك إرسال غرض تسجيل الدخول، عندما ينقر المستخدم على زر تسجيل الدخول.

@Override
public void onClick(View view) {
  if (view.getId() == R.id.sign_in_button) {
    // start the asynchronous sign in flow
    startSignInIntent();
  } else if (view.getId() == R.id.sign_out_button) {
    // sign out.
    signOut();
    // show sign-in button, hide the sign-out button
    findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
    findViewById(R.id.sign_out_button).setVisibility(View.GONE);
  }
}

 

 

 

عرض النافذة المنبثقة للعبه

يمكنك عرض معاينات النوافذ المنبثقه في لعبتك بإستخدام فئة GamesClient. كمثال، يمكن للعبتك عرض ناقذة منبثقة بـ”أهلاً بك مجدداً” أو “الإنجازات غير مغلقه”.

للسماح لخدمات “ألعاب قوقل بلاي”، بتشغيل النوافذ المنبثقه في معاينات، في لعبتك، قم بإستدعاء دالة ()setViewForPopups.

يمكنك كذلك تخصيص مكان ظهور النافذة المنبثقة، على الشاشة من خلال إستدعاء ()setGravityForPopups.

 

 

 

تسجيل خروج اللاعب

يتم تسجيل الخروج من خلال إستدعاء دالة ()signOut على GoogleSignInClient.

private void signOut() {
  GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
      GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
  signInClient.signOut().addOnCompleteListener(this,
      new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
          // at this point, the user is signed out.
        }
      });
}

 


للإطلاع على المقال باللغة الإنجليزية اضغط هنا.

الإعلانات

اترك رد