قد يتعذّر تنفيذ طلبات استرداد بيانات اعتماد المستخدم إذا لم يحفظ المستخدم بعد بيانات الاعتماد أو إذا لم يشترك المستخدم بعد في تطبيقك. وفي هذه الحالات، يمكنك استخدام واجهة برمجة تطبيقات بيانات الاعتماد لاسترداد طلبات تسجيل الدخول، مثل اسم المستخدم وعنوان بريده الإلكتروني. استخدِم هذه النصائح لملء نماذج تسجيل الدخول إلى تطبيقك مسبقًا وعمليات الاشتراك، ما يؤدي إلى تسريع عملية إعداد تطبيقك.
في نظام التشغيل Android 6.0 (Marshmallow) والإصدارات الأحدث، لا يحتاج تطبيقك إلى طلب أي جهاز أو أذونات وقت تشغيل لاسترداد تعديلات تسجيل الدخول من خلال Credentials API.
قبل البدء
استرداد تعديلات تسجيل الدخول
لاسترداد تلميحات تسجيل الدخول، عليك أولاً إعداد مربّع حوار أداة اختيار التلميح عن طريق إنشاء كائن 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
لا يحتوي على رمز مميّز للمعرّف (أو لا تريد استخدام الرمز المميّز للمعرّف)، عليك ملء حقول تسجيل الدخول مسبقًا بالتلميحات التي أضفتها إلى عنصر intent.
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.