मुझे सिंगल एंड्रॉइड ऐप के लिए दो फायरबेस प्रोजेक्ट चाहिए। एक प्रोजेक्ट यूजर्स के लिए है, और दूसरा एडमिन के लिए है। मैं कुछ कारणों से admins firebase प्रोजेक्ट का उपयोग कर रहा हूं।

अब मुझे इन दो परियोजनाओं को व्यवस्थापक ऐप में जोड़ने की ज़रूरत है, और मैं व्यवस्थापक ऐप से दोनों फायरबेस परियोजनाओं में एक समय में फायरस्टोर डेटा जोड़ना या संशोधित करना चाहता हूं।

एंड्रॉइड में एक ही समय में दो फायरबेस प्रोजेक्ट के उदाहरण कैसे प्राप्त करें?

मैंने इसके बारे में कुछ स्टैक ओवरफ्लो प्रश्न देखे हैं लेकिन उन्हें एक ही समय में दो उदाहरण नहीं मिल रहे हैं।

क्या कोई मेरे प्रश्न का उत्तर दे सकता है...

1
Real Tech Hacks 14 अक्टूबर 2021, 12:36

3 जवाब

सबसे बढ़िया उत्तर

आपके डिफ़ॉल्ट ऐप को बदलने के लिए कुछ भी नहीं है। अपने ऐप को सामान्य रूप से मुख्य फायरबेस प्रोजेक्ट से कनेक्ट करें। साथ ही, अपने ऐप को दूसरे फायरबेस प्रोजेक्ट के साथ पंजीकृत करें। अब एंड्रॉइड प्रोजेक्ट में google-services.json फ़ाइल आयात करने के बजाय सीधे नीचे की तरह सिंगलटन क्लास बनाएं और इसे अपने दूसरे फायरबेस प्रोजेक्ट विवरण से बदलें।

public class MySecondaryProject {
    private static FirebaseApp INSTANCE;

    public static FirebaseApp getInstance(Context context) {
        if (INSTANCE == null) {
            INSTANCE = getSecondProject(context);
        }
        return INSTANCE;
    }

    private static FirebaseApp getSecondProject(Context context) {
        FirebaseOptions options1 = new FirebaseOptions.Builder()
                .setApiKey("AI...gs")
                .setApplicationId("1:5...46")
                .setProjectId("my-project-id")
                // setDatabaseURL(...)      // in case you need firebase Realtime database
                // setStorageBucket(...)    // in case you need firebase storage MySecondaryProject
                .build();

        FirebaseApp.initializeApp(context, options1, "admin");
        return FirebaseApp.getInstance("admin");
    }
}

अब जहां भी आपको इस दूसरे प्रोजेक्ट इंस्टेंस की आवश्यकता है, आप नीचे की तरह उपयोग कर सकते हैं।

  FirebaseFirestore db = FirebaseFirestore.getInstance(); //- DEFAULT PROJECT
  FirebaseFirestore secondDB = FirebaseFirestore.getInstance(MySecondaryProject.getInstance(this)); // - SECOND PROJECT

डुप्लिकेट इंस्टेंस से बचने के लिए आपको सिंगलटन पैटर्न का पालन करना होगा अन्यथा ऐप क्रैश हो जाएगा। आप दोनों उदाहरणों का एक साथ उपयोग कर सकते हैं।

अधिक जानकारी के लिए कुछ उपयोगी लिंक

मुझे लगता है कि यह आपके प्रश्न का सही उत्तर होगा।

1
Venkat 22 अक्टूबर 2021, 15:21
मैंने इस कामकाजी समाधान को खोजने में काफी समय बिताया था। अगर इससे मदद मिलती है, तो मेरे जवाब को अपवोट करें।
 – 
Venkat
22 अक्टूबर 2021, 15:34
यह काम कर रहा है, बहुत बहुत धन्यवाद।
 – 
Real Tech Hacks
23 अक्टूबर 2021, 06:21

संक्षिप्त उत्तर: नहीं।

व्यवस्थापकों के लिए एक प्रोजेक्ट और उपयोगकर्ताओं के लिए एक के बजाय, आप किसी एकल प्रोजेक्ट पर भूमिका आधारित अभिगम नियंत्रण रखना चाहते हैं। उदाहरण के लिए, व्यवस्थापक फ़ाइलों को हटा सकते हैं, जबकि उपयोगकर्ता नहीं कर सकते।

Firebase डॉक्स में भूमिका आधारित एक्सेस के लिए पूरी गाइड उपलब्ध है a>, कुछ विविधताओं के साथ। आपके नियम कुछ इस तरह दिख सकते हैं:

service cloud.firestore {
   match /databases/{database}/documents {
     match /stories/{story} {
        function isSignedIn() {
          return request.auth != null;
        }

        function getRole(rsc) {
          // Read from the "roles" map in the resource (rsc).
          return rsc.data.roles[request.auth.uid];
        }

        function isOneOfRoles(rsc, array) {
          // Determine if the user is one of an array of roles
          return isSignedIn() && (getRole(rsc) in array);
        }

        function isValidNewStory() {
          // Valid if story does not exist and the new story has the correct owner.
          return resource == null && isOneOfRoles(request.resource, ['owner']);
        }

        // Owners can read, write, and delete stories
        allow write: if isValidNewStory() || isOneOfRoles(resource, ['owner']);

         match /comments/{comment} {
            // ...
         }
     }
   }
}
1
Jake Lee 14 अक्टूबर 2021, 13:02
आपकी प्रतिक्रिया के लिए धन्यवाद @ जेक ली। मुझे फायरबेस कस्टम क्लाइम्स के साथ भूमिका आधारित उपयोगकर्ताओं के कार्यान्वयन पर एक विचार था। लेकिन मेरे मामले में न केवल व्यवस्थापक भूमिका के लिए एक और परियोजना। यह व्यवस्थापक द्वारा बनाई गई ऐप सामग्री के डेटा बैकअप के रूप में कार्य करता है, और उस विशिष्ट सामग्री के बारे में कुछ अतिरिक्त गोपनीय विवरण संग्रहीत करता है। कुछ अतिरिक्त कारणों से भी।
 – 
Real Tech Hacks
14 अक्टूबर 2021, 13:39
आपने जो कुछ भी कहा है उसके लिए एक अलग परियोजना की आवश्यकता नहीं है। सुरक्षा नियम और भूमिकाएं सभी गोपनीयता को संभालती हैं - मैं इसे काफी निर्णायक रूप से कह सकता हूं - मैं इसे अभी कर रहा हूं।
 – 
LeadDreamer
21 अक्टूबर 2021, 19:04

अगर आपके पास केवल मानक उपयोगकर्ता और व्यवस्थापक हैं, तो बस कस्टम दावे का उपयोग करें। फायरस्टोर को भूमिकाएं न लिखें।

यह सेटअप को बहुत आसान बना देगा और आपके नियमों में महंगी get कॉलों में आपको खर्च नहीं करना पड़ेगा।

0
l1b3rty 22 अक्टूबर 2021, 11:21