सबसे पहले मुझे कहना है कि ग्रैडल फ़ाइलों या लॉगआउट को डाउनग्रेड करने की आवश्यकता नहीं है और उपयोगकर्ता नाम को प्रदर्शित करने के लिए दूसरों द्वारा बताए गए कई बार लॉगिन करें। मैंने इस मुद्दे को एक अलग तरीके से हल किया है जबकि अभी भी नवीनतम ग्रैडल फाइलें रख रहे हैं और उपयोगकर्ता को कई बार लॉग इन नहीं करना है। getDisplayName()
के साथ समस्या बहुत बड़ी है इसलिए मैं फ़ायरबेस के भविष्य के उपयोगकर्ताओं के लिए सिरदर्द छोड़ने के लिए जितना संभव हो उतना वर्णनात्मक होना चाहता हूं।
समाधान 1:
उपयोगकर्ताओं को, जो प्रमाणित (प्रवेश) इस तरह के फेसबुक, गूगल आदि और/या ईमेल/के रूप में कई प्रदाताओं के साथ के लिए
यहाँ समाधान के विवरण दिए गए हैं पासवर्ड जो उन्होंने साइन-अप पर बनाया था:
पहली चीज़ जो आप सुनिश्चित करना चाहते हैं वह यह है कि जब आपके पास पहली बार ऐप के साथ उपयोगकर्ता साइन-अप होता है तो आप अपना नाम अपने अद्वितीय रूप से डेटाबेस में संग्रहीत करते हैं आईडी। उपयोगकर्ता का नाम अपने Firebase डेटाबेस में संग्रहित किया गया है के बाद
// Method signature. Write current user's data to database
private void writeNewUser(String userId, String name, String email) {
DatabaseReference current_user_database = mDatabaseRef.child(userId);
current_user_database.child("username").setValue(name);
// Email here is not mandatory for the solution. Just here for clarity of the
// method signature
current_user_database.child("email").setValue(email);
}
और आप उन्हें अपने ऐप्लिकेशन में प्रवेश करें आप इस तरह अपने उपयोगकर्ता नाम कुछ प्राप्त कर सकते हैं: कुछ इस तरह लग सकता है कौन सा
// Method that displays the user's username
private void showUserName() {
// Get instance of the current user signed-in
mFirebaseUser = mAuth.getCurrentUser();
// Check if user using sign-in provider account is currently signed in
if (mFirebaseUser != null) {
// Get the profile information retrieved from the sign-in provider(s) linked to a user
for (UserInfo profile : mFirebaseUser.getProviderData()) {
// Name of the provider service the user signed in with (Facebook, Google, Twitter, Firebase, etc.)
String name = profile.getDisplayName();
// If displayName() is null this means that the user signed in using the email and password they created. This is the null issue we shouldn't get that we are gonna be solving below.
if(name == null){
mDatabaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get the name the user signed-up with using dataSnapshot
String nameOfCurrentUser = (String) dataSnapshot.child("name").getValue();
// Set username we retrieved using dataSnapshot to the view
mTestUsernameTextView.setTitle(nameOfCurrentUser);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
// If the name is not null that means the user signed in with a social Auth provider such as Facebook, Twitter, Google etc.
if(name != null) {
// Set the TextView (or whatever view you use) to the user's name.
mTestUsernameTextView.setText(name);
}
} // End for
} // End if
}
है कि यह। अब आप उस विधि को showUserName()
पर कॉल करें या जो कुछ भी आपकी विधि को आपके ऑनरेट के अंदर बुलाया जाएगा और उम्मीद है कि इससे मदद मिलती है।
समाधान 2:
उपयोगकर्ता जो आपके एप्लिकेशन में साइन इन तरह के फेसबुक, ट्विटर, गूगल या कोई अन्य विकल्प Firebase की अनुमति देता है के रूप में केवल एक सामाजिक मीडिया सेवा प्रदाता का उपयोग कर के लिए:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
for (UserInfo profile : user.getProviderData()) {
// Id of the provider (ex: google.com)
String providerId = profile.getProviderId();
// UID specific to the provider
String uid = profile.getUid();
// Name, email address, and profile photo Url
String name = profile.getDisplayName();
String email = profile.getEmail();
Uri photoUrl = profile.getPhotoUrl();
};
}
यह समाधान 2 के लिए है, बस इसके लिए फायरबेस पर दिशानिर्देशों का पालन करें और आपको अच्छा होना चाहिए। Get a user's profile information
मैं सच में आशा है कि यह getDisplayName()
मुद्दे के साथ संघर्ष कर किसी को भी मदद करता है:
यहाँ यदि आप उत्सुक हैं यह करने के लिए एक कड़ी है।
निष्कर्ष:
यदि आपका ऐप्लिकेशन केवल फेसबुक, ट्विटर, गूगल या जो कुछ भी किसी और सोशल मीडिया साइन-इन विकल्पों में Firebase तो बस पर वर्तमान में उपयोगकर्ता के प्रवेश किए getDisplayName()
विधि बुला दिखाने के लिए पर्याप्त होना चाहिए प्रदान करता है उनका उपयोगकर्ता नाम
अन्यथा यदि आपका ऐप उपयोगकर्ता द्वारा बनाए गए ईमेल/पासवर्ड का उपयोग करके साइन इन करने की अनुमति देता है तो सुनिश्चित करें कि आपको साइन-अप पर अपना नाम/उपयोगकर्ता नाम मिला है ताकि आप इसे बाद में प्रदर्शित करने के लिए इसका उपयोग कर सकें।
धन्यवाद! getProviderData() मुझे 2 उपयोगकर्ता सूचनाएं लौटाता है, इसलिए मैं google.com जानकारी का चयन कर सकता हूं, लेकिन फिर भी अजीब है कि अगर मैं नए उपयोगकर्ता को लिंक करता हूं तो मुझे केवल नया उपयोगकर्ता दिखाना चाहिए, न कि दोनों ... लेकिन अभी भी काम करता है;) –
हाँ मैंने कुछ फायरबेस अजीब सामान देखा है ..... उदाहरण के लिए आईओएस में अज्ञात कुंजी कस्टम प्रमाणीकरण के साथ अज्ञात = सत्य लौटाती है और अज्ञात प्रमाणीकरण के साथ एंड्रॉइड कस्टम = झूठी और अनाम = सत्य में – Ymmanuel