قد يتعذّر تنفيذ طلبات استرداد بيانات اعتماد المستخدم إذا لم يحفظ المستخدم بعد بيانات الاعتماد أو في حال لم يشترك المستخدم في تطبيقك بعد. في هذه يمكنك استخدام Credentials API لاسترداد تلميحات تسجيل الدخول، مثل اسم المستخدم وعنوان بريده الإلكتروني. استخدِم هذه النصائح لملء معلومات تسجيل الدخول إلى تطبيقك مسبقًا. ونماذج الاشتراك، لتسريع عملية إعداد التطبيق
على نظام التشغيل Android 6.0 (Marshmallow) والإصدارات الأحدث، لا يحتاج التطبيق إلى طلب أذونات أي جهاز أو بيئة تشغيل لاسترداد تلميحات تسجيل الدخول باستخدام Credentials API:
قبل البدء
إعداد مشروع "استوديو Android":
استرداد تلميحات تسجيل الدخول
لاسترداد تلميحات تسجيل الدخول، عليك أولاً ضبط مربع حوار أداة اختيار التلميحات من خلال
جارٍ إنشاء HintRequest
الخاص بك. مرِّر بعد ذلك الكائن HintRequest
إلى
CredentialsClient.getHintPickerIntent()
بغرض مطالبة المستخدم باختيار عنوان بريد إلكتروني أخيرًا، ابدأ
النية بالشراء من خلال startIntentSenderForResult()
.
HintRequest hintRequest = new HintRequest.Builder()
.setHintPickerConfig(new CredentialPickerConfig.Builder()
.setShowCancelButton(true)
.build())
.setEmailAddressIdentifierSupported(true)
.setAccountTypes(IdentityProviders.GOOGLE)
.build();
PendingIntent intent = mCredentialsClient.getHintPickerIntent(hintRequest);
try {
startIntentSenderForResult(intent.getIntentSender(), RC_HINT, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Could not start hint picker Intent", e);
}
سيُطلب من المستخدم اختيار عنوان بريد إلكتروني لاستخدامه.
بعد ذلك، في طريقة onActivityResult()
الخاصة بالنشاط، استرجع التلميحات من
حزمة Credential.EXTRA_KEY
، يُرجى التحقّق مما إذا كان المستخدم مدرَجًا في قاعدة بيانات المستخدم.
وبدء النشاط المناسب بتلميح بيانات الاعتماد.
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_HINT) { if (resultCode == RESULT_OK) { Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY); Intent intent; // Check for the user ID in your user database. if (userDatabaseContains(credential.getId())) { intent = new Intent(this, SignInActivity.class); } else { intent = new Intent(this, SignUpNewUserActivity.class); } intent.putExtra("com.mycompany.myapp.SIGNIN_HINTS", credential); startActivity(intent); } else { Log.e(TAG, "Hint Read: NOT OK"); Toast.makeText(this, "Hint Read Failed", Toast.LENGTH_SHORT).show(); } } ... }
ملء نموذج تسجيل الدخول مسبقًا
إذا كان المستخدم مُدرجًا في قاعدة بيانات المستخدمين وبدأت عملية تسجيل الدخول إلى تطبيقك
يمكنك (اختياريًا) التحقّق مما إذا كان العنصر Credential
يحتوي على رقم تعريف
الرمز المميز. إذا كان الأمر كذلك، يمكنك تسجيل دخول المستخدم باستخدام الرمز المميز للمعرّف،
دون مطالبة المستخدم بكتابة كلمة مرور.
إذا لم يكن الكائن Credential
يحتوي على رمز مميز للمعرّف (أو كنت لا تريد استخدامه
الرمز المميز للمعرّف)، واملأ مسبقًا حقول تسجيل الدخول بالتلميحات التي أضفتها إلى
والنية.
public class SignInActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");
// Pre-fill ID field
mUsernameView.setText(credential.getId());
...
}
...
}
ملء نموذج الاشتراك مسبقًا
إذا لم يكُن المستخدم مدرَجًا في قاعدة بيانات المستخدمين وبدأت عملية الاشتراك في تطبيقك فاملأ حقول الاشتراك مسبقًا بتلميحات تسجيل الدخول التي أضفتها إلى النية.
public class SignUpNewUserActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Credential credential = intent.getParcelableExtra("com.mycompany.myapp.SIGNIN_HINTS");
// Pre-fill sign-up fields
mUsernameView.setText(credential.getId());
mDisplaynameView.setText(credential.getName()); // Might be null.
...
}
...
}
يمكنك اختياريًا التحقّق ممّا إذا كان العنصر Credential
يحتوي على
الرمز المميّز للمعرّف الذي يتضمّن
عنوان بريد إلكتروني أثبت ملكيته. إذا كان الأمر كذلك، يمكنك تخطي خطوة التحقق من عنوان البريد الإلكتروني في تطبيقك،
لأنّه سبق أن تحقّقت Google من عنوان البريد الإلكتروني.