Apple और C++ का इस्तेमाल करके पुष्टि करें

आप अपने उपयोगकर्ताओं को उनके Apple ID का इस्तेमाल करके Firebase से पुष्टि करने दे सकते हैं. इसके लिए: शुरू से आखिर तक OAuth 2.0 साइन-इन फ़्लो लागू करने के लिए, Firebase SDK टूल का इस्तेमाल किया जाएगा.

शुरू करने से पहले

Apple का इस्तेमाल करके साइन इन करने के लिए, पहले 'Apple से साइन इन करें' सुविधा को कॉन्फ़िगर करें Apple की डेवलपर साइट पर जाएं, तो Apple को अपने Firebase प्रोजेक्ट.

Apple Developer Program में शामिल होना

'Apple से साइन इन करें' सुविधा को, सिर्फ़ Apple Developer के सदस्य कॉन्फ़िगर कर सकते हैं प्रोग्राम में शामिल हैं.

'Apple से साइन इन करें' सुविधा को कॉन्फ़िगर करें

आपके Firebase प्रोजेक्ट में, Apple साइन इन की सुविधा चालू होनी चाहिए और उसे ठीक से कॉन्फ़िगर किया जाना चाहिए. Android और Apple प्लैटफ़ॉर्म के हिसाब से कॉन्फ़िगरेशन अलग-अलग होता है. कृपया "Apple से साइन इन करने की सुविधा को कॉन्फ़िगर करना" सेक्शन में Apple प्लैटफ़ॉर्म और/या Android गाइड आगे बढ़ रहे हैं.

साइन इन की सेवा देने वाली कंपनी के तौर पर Apple की सेवाएं चालू करें

  1. Firebase कंसोल में, पुष्टि सेक्शन खोलें. साइन इन करने का तरीका टैब पर, Apple कंपनी को चालू करें.
  2. Apple की साइन इन सेवा देने वाली कंपनी की सेटिंग कॉन्फ़िगर करें:
    1. अगर ऐप्लिकेशन को सिर्फ़ Apple प्लैटफ़ॉर्म पर डिप्लॉय किया जा रहा है, तो सेवा आईडी, Apple टीम आईडी, निजी कुंजी और कुंजी आईडी फ़ील्ड खाली हैं.
    2. Android डिवाइसों पर सहायता पाने के लिए:
      1. अपने Android प्रोजेक्ट में Firebase जोड़ें. होना जब आप Firebase कंसोल.
      2. Firebase में कंसोल में जाकर, पुष्टि करें सेक्शन खोलें. साइन इन करने का तरीका टैब पर, Apple कंपनी को चालू करें. वह सेवा आईडी बताएं जिसमें आपने बनाया था पिछला सेक्शन देखें. साथ ही, OAuth कोड फ़्लो के कॉन्फ़िगरेशन सेक्शन में, अपना Apple टीम आईडी और आपका बनाया गया निजी पासकोड और पासकोड आईडी बताएं पर क्लिक करें.

उपयोगकर्ताओं की पहचान छिपाकर, Apple की डेटा से जुड़ी ज़रूरी शर्तों को पूरा करते हैं

'Apple से साइन इन करें' सुविधा की मदद से, उपयोगकर्ताओं को अपने डेटा की पहचान छिपाने का विकल्प मिलता है, और साइन इन करते समय उनका ईमेल पता शामिल करें. इस विकल्प को चुनने वाले उपयोगकर्ता privaterelay.appleid.com डोमेन वाले ईमेल पते हैं. टास्क कब शुरू होगा अगर आपने अपने ऐप्लिकेशन में 'Apple से साइन इन करें' सुविधा का इस्तेमाल किया है, तो आपको लागू होने वाली सभी ज़रूरी शर्तों का पालन करना होगा पहचान छिपाने वाले इन Apple के बारे में डेवलपर की नीतियां या Apple की शर्तें आईडी.

इसमें आपसे पहले उपयोगकर्ता की सहमति लेना भी शामिल है पहचान ज़ाहिर करने वाली किसी भी निजी जानकारी को, पहचान छिपाने वाले Apple खाते से जोड़ना आईडी. Firebase से पुष्टि करने की सुविधा का इस्तेमाल करते समय, इसमें ये चीज़ें शामिल हो सकती हैं कार्रवाइयां:

  • किसी ईमेल पते को पहचान छिपाने वाले Apple ID से लिंक करें. इसी तरह, पहचान छिपाने वाले Apple ID से किसी ईमेल पते को लिंक करें.
  • किसी फ़ोन नंबर को पहचान छिपाने वाले Apple ID से लिंक करें. इसी तरह, किसी फ़ोन नंबर को बिना पहचान वाले Apple ID से लिंक करें
  • बिना पहचान वाले सोशल क्रेडेंशियल (Facebook, Google वगैरह) को किसी पहचान छिपाने वाला Apple ID या पहचान छिपाने वाला Apple ID इस्तेमाल करने के लिए भी किया जा सकता है.

ऊपर दी गई सूची पूरी नहीं है. Apple Developer Program देखें अपने डेवलपर खाते के सदस्यता सेक्शन में जाकर, लाइसेंस देने के लिए कानूनी समझौता पक्का करें कि आपका ऐप्लिकेशन Apple की ज़रूरी शर्तों को पूरा करता हो.

firebase::auth::Auth क्लास को ऐक्सेस करें

Auth क्लास, सभी एपीआई कॉल के लिए गेटवे होती है.
  1. पुष्टि करने वाली और ऐप्लिकेशन की हेडर फ़ाइलें जोड़ें:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  2. अपने इनिशलाइज़ेशन कोड में, firebase::App क्लास.
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. अपनी firebase::App के लिए firebase::auth::Auth क्लास पाएं. App और Auth के बीच वन-टू-वन मैपिंग है.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Firebase SDK टूल की मदद से साइन-इन की प्रोसेस को मैनेज करना

'Apple से साइन इन करें' सुविधा, Apple और Android प्लैटफ़ॉर्म के हिसाब से अलग-अलग होती है.

Apple प्लैटफ़ॉर्म पर

Apple साइन इन के ज़रिए Firebase का इस्तेमाल करके अपने उपयोगकर्ताओं की पुष्टि करें आपके C++ कोड से Objective-C SDK टूल शुरू किया गया.

  1. हर साइन-इन अनुरोध के लिए, एक रैंडम स्ट्रिंग जनरेट करें—a "nonce"—इसका इस्तेमाल करके यह पक्का किया जा सकता है कि आपको मिला आईडी टोकन खास तौर पर, आपके ऐप्लिकेशन के पुष्टि करने के अनुरोध के जवाब में दी गई है. यह रीप्ले हमलों से बचने के लिए ज़रूरी है.

      - (NSString *)randomNonce:(NSInteger)length {
        NSAssert(length > 0, @"Expected nonce to have positive length");
        NSString *characterSet = @"0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._";
        NSMutableString *result = [NSMutableString string];
        NSInteger remainingLength = length;
    
        while (remainingLength > 0) {
          NSMutableArray *randoms = [NSMutableArray arrayWithCapacity:16];
          for (NSInteger i = 0; i < 16; i++) {
            uint8_t random = 0;
            int errorCode = SecRandomCopyBytes(kSecRandomDefault, 1, &random);
            NSAssert(errorCode == errSecSuccess, @"Unable to generate nonce: OSStatus %i", errorCode);
    
            [randoms addObject:@(random)];
          }
    
          for (NSNumber *random in randoms) {
            if (remainingLength == 0) {
              break;
            }
    
            if (random.unsignedIntValue < characterSet.length) {
              unichar character = [characterSet characterAtIndex:random.unsignedIntValue];
              [result appendFormat:@"%C", character];
              remainingLength--;
            }
          }
        }
      }
    
    

    आपको अपने साइन-इन अनुरोध के साथ, नॉन्स का SHA256 हैश भेजना होगा, जो Apple, जवाब में कोई बदलाव नहीं करेगा. Firebase, जवाब की पुष्टि करता है इसके लिए, मूल नॉन्स को हैश करके उसकी तुलना Apple की पास की गई वैल्यू से की जाती है.

  2. Apple का साइन-इन फ़्लो शुरू करें. इसमें, आपके अनुरोध में नॉन्स और डेलिगेट क्लास, जो Apple के जवाब को हैंडल करेगी (देखें अगला चरण):

      - (void)startSignInWithAppleFlow {
        NSString *nonce = [self randomNonce:32];
        self.currentNonce = nonce;
        ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];
        ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest];
        request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail];
        request.nonce = [self stringBySha256HashingString:nonce];
    
        ASAuthorizationController *authorizationController =
            [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]];
        authorizationController.delegate = self;
        authorizationController.presentationContextProvider = self;
        [authorizationController performRequests];
      }
    
      - (NSString *)stringBySha256HashingString:(NSString *)input {
        const char *string = [input UTF8String];
        unsigned char result[CC_SHA256_DIGEST_LENGTH];
        CC_SHA256(string, (CC_LONG)strlen(string), result);
    
        NSMutableString *hashed = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
        for (NSInteger i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
          [hashed appendFormat:@"%02x", result[i]];
        }
        return hashed;
      }
    
  3. लागू करने के दौरान, Apple के रिस्पॉन्स को मैनेज करना ASAuthorizationControllerDelegate` का इस्तेमाल करें. अगर साइन इन हो गया है, तो आईडी का इस्तेमाल करें पुष्टि करने के लिए, बिना हैशिंग के नॉन्स के साथ Apple से मिले रिस्पॉन्स का टोकन Firebase:

      - (void)authorizationController:(ASAuthorizationController *)controller
         didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)) {
        if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) {
          ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential;
          NSString *rawNonce = self.currentNonce;
          NSAssert(rawNonce != nil, @"Invalid state: A login callback was received, but no login request was sent.");
    
          if (appleIDCredential.identityToken == nil) {
            NSLog(@"Unable to fetch identity token.");
            return;
          }
    
          NSString *idToken = [[NSString alloc] initWithData:appleIDCredential.identityToken
                                                    encoding:NSUTF8StringEncoding];
          if (idToken == nil) {
            NSLog(@"Unable to serialize id token from data: %@", appleIDCredential.identityToken);
          }
        }
    
  4. Firebase बनाने के लिए, नतीजे के तौर पर मिली टोकन स्ट्रिंग और ओरिजनल नॉन्स का इस्तेमाल करें क्रेडेंशियल और Firebase में साइन इन करें.

    firebase::auth::OAuthProvider::GetCredential(
            /*provider_id=*/"apple.com", token, nonce,
            /*access_token=*/nullptr);
    
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInAndRetrieveDataWithCredential(credential);
    
  5. Reauthenticate के साथ भी इसी पैटर्न का इस्तेमाल किया जा सकता है. इसे इसका इस्तेमाल, संवेदनशील कार्रवाइयों के लिए नए क्रेडेंशियल हासिल करने के लिए किया जाता है. हाल ही का लॉगिन.

    firebase::Future<firebase::auth::AuthResult> result =
        user->Reauthenticate(credential);
    
  6. Apple साइन इन की मदद से किसी खाते को लिंक करने के लिए भी इसी पैटर्न का इस्तेमाल किया जा सकता है. हालांकि, अगर किसी मौजूदा Firebase खाते में खाता पहले से ही उस Apple खाते से जुड़ा हो जिससे लिंक करने की कोशिश की जा रही है. ऐसा होने पर, आने वाले समय में kAuthErrorCredentialAlreadyInUse और AuthResult में credential. Apple से लिंक किए गए ऐप्लिकेशन में साइन इन करने के लिए, इस क्रेडेंशियल का इस्तेमाल किया जा सकता है बिना ज़रूरत के SignInAndRetrieveDataWithCredential के ज़रिए खाता बनाएं दूसरा Apple साइन इन टोकन और नॉन्स जनरेट करें.

    firebase::Future<firebase::auth::AuthResult> link_result =
        auth->current_user().LinkWithCredential(credential);
    
    // To keep example simple, wait on the current thread until call completes.
    while (link_result.status() == firebase::kFutureStatusPending) {
      Wait(100);
    }
    
    // Determine the result of the link attempt
    if (link_result.error() == firebase::auth::kAuthErrorNone) {
      // user linked correctly.
    } else if (link_result.error() ==
                   firebase::auth::kAuthErrorCredentialAlreadyInUse &&
               link_result.result()
                   ->additional_user_info.updated_credential.is_valid()) {
      // Sign In with the new credential
      firebase::Future<firebase::auth::AuthResult> result =
          auth->SignInAndRetrieveDataWithCredential(
              link_result.result()->additional_user_info.updated_credential);
    } else {
      // Another link error occurred.
    }
    

Android पर

Android पर, वेब पर आधारित इंटिग्रेट करके Firebase से अपने उपयोगकर्ताओं की पुष्टि करें Firebase SDK टूल का इस्तेमाल करके, अपने ऐप्लिकेशन में सामान्य OAuth लॉगिन साइन-इन फ़्लो को बंद करें.

Firebase SDK टूल की मदद से साइन इन फ़्लो मैनेज करने के लिए, यह तरीका अपनाएं:

  1. FederatedOAuthProviderData का एक इंस्टेंस बनाएं, जिसे इससे कॉन्फ़िगर किया गया हो Apple के लिए सही प्रोवाइडर आईडी.

    firebase::auth::FederatedOAuthProviderData provider_data("apple.com");
    
  2. ज़रूरी नहीं: OAuth 2.0 के डिफ़ॉल्ट स्कोप के अलावा अन्य स्कोप तय करें पुष्टि करने वाली कंपनी से अनुरोध करना है.

    provider_data.scopes.push_back("email");
    provider_data.scopes.push_back("name");
    
  3. ज़रूरी नहीं: अगर आपको Apple की साइन-इन स्क्रीन को किसी भाषा में दिखाना है अंग्रेज़ी के अलावा, locale पैरामीटर सेट करें. ज़्यादा जानकारी के लिए, Apple के दस्तावेज़ों से साइन इन करना का इस्तेमाल करें.

    // Localize to French.
    provider_data.custom_parameters["language"] = "fr";
    ```
    
  4. सेवा देने वाली कंपनी का डेटा कॉन्फ़िगर होने के बाद, इसका इस्तेमाल करके संघीय OAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. पुष्टि करने वाले ऑब्जेक्ट का इस्तेमाल करके, Firebase से पुष्टि करें. ध्यान दें कि नापसंद अन्य FirebaseAuth कार्रवाइयां करते हैं, तो यह पॉप-अप करके आपके यूज़र इंटरफ़ेस (यूआई) को कंट्रोल करेगा एक वेब व्यू बना सकते है, जिसमें उपयोगकर्ता अपने क्रेडेंशियल डाल सकते हैं.

    साइन इन फ़्लो शुरू करने के लिए, signInWithProvider को कॉल करें:

    firebase::Future<firebase::auth::AuthResult> result =
      auth->SignInWithProvider(provider_data);
    

    इसके बाद आपका आवेदन इंतज़ार कर सकता है या आने वाले समय में कॉलबैक रजिस्टर करें.

  6. ReauthenticateWithProvider के साथ भी इसी पैटर्न का इस्तेमाल किया जा सकता है. इसे इसका इस्तेमाल, संवेदनशील कार्रवाइयों के लिए नए क्रेडेंशियल हासिल करने के लिए किया जाता है. हाल ही का लॉगिन.

    firebase::Future<firebase::auth::AuthResult> result =
      user.ReauthenticateWithProvider(provider_data);
    

    इसके बाद, आपका ऐप्लिकेशन इंतज़ार कर सकता है या इस नंबर पर कॉलबैक रजिस्टर कर सकता है भविष्य.

  7. साथ ही, अलग-अलग आइडेंटिटी प्रोवाइडर को लिंक करने के लिए, LinkWithCredential() का इस्तेमाल किया जा सकता है .

    ध्यान दें कि Apple के लिए यह ज़रूरी है कि आप अपने खाते से पहले, उपयोगकर्ताओं से साफ़ तौर पर सहमति लें अपने Apple खातों को अन्य डेटा से लिंक कर सकती हैं.

    उदाहरण के लिए, किसी Facebook खाते को मौजूदा Firebase खाते से लिंक करने के लिए, उपयोगकर्ता को Facebook में साइन इन करने पर मिला ऐक्सेस टोकन:

    // Initialize a Facebook credential with a Facebook access token.
    AuthCredential credential =
        firebase::auth::FacebookAuthProvider.getCredential(token);
    
    // Assuming the current user is an Apple user linking a Facebook provider.
    firebase::Future<firebase::auth::AuthResult> result =
        auth.current_user().LinkWithCredential(credential);
    

Apple Notes से साइन इन करें

Firebase पुष्टि के साथ काम करने वाली दूसरी कंपनियों के उलट, Apple फ़ोटो का यूआरएल.

साथ ही, जब उपयोगकर्ता अपने ईमेल को Apple के साथ शेयर न करने का विकल्प चुनता है उस उपयोगकर्ता के लिए एक अद्वितीय ईमेल पता (फ़ॉर्म के रूप में) xyz@privaterelay.appleid.com), जिसे यह आपके ऐप्लिकेशन के साथ शेयर करता है. अगर आपको निजी ईमेल रिले सेवा को कॉन्फ़िगर किया है, तो Apple इस पर भेजे गए ईमेल फ़ॉरवर्ड करता है उपयोगकर्ता के असली ईमेल पते पर, पहचान छिपाई गई हो.

Apple, उपयोगकर्ता की जानकारी जैसे कि डिसप्ले नेम को सिर्फ़ उन ऐप्लिकेशन के साथ शेयर करता है: जब कोई उपयोगकर्ता पहली बार साइन इन करता है. आम तौर पर, Firebase आम तौर पर जब कोई उपयोगकर्ता पहली बार Apple में साइन इन करता है. current_user().display_name(). हालांकि, अगर आपने पहले से ही Apple का इस्तेमाल करके जब कोई उपयोगकर्ता Firebase का उपयोग किए बिना ऐप्लिकेशन में प्रवेश करता है, तो Apple Firebase को उपयोगकर्ता का डिसप्ले नेम.

अगले चरण

किसी उपयोगकर्ता के पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बना दिया जाता है और आपके खाते के क्रेडेंशियल मौजूद हैं, जैसे कि उपयोगकर्ता नाम और पासवर्ड, फ़ोन नंबर या भरोसेमंद सेवा देने वाली कंपनी की जानकारी—उपयोगकर्ता ने जिससे साइन इन किया है. यह नया खाता इस तौर पर सेव किया गया है का हिस्सा है और इसका इस्तेमाल हर उपयोगकर्ता की पहचान करने के लिए किया जा सकता है उपयोगकर्ता के साइन इन करने के तरीके पर ध्यान दिए बिना.

अपने ऐप्लिकेशन में, उपयोगकर्ता की बुनियादी प्रोफ़ाइल जानकारी को firebase::auth::User ऑब्जेक्ट. यहां जाएं: उपयोगकर्ताओं को मैनेज करें.

अपने Firebase रीयल टाइम डेटाबेस और Cloud Storage के सुरक्षा नियमों में, आपको ये चीज़ें मिल सकती हैं साइन इन किए हुए उपयोगकर्ता का यूनीक यूज़र आईडी. साथ ही, उसका इस्तेमाल तय करें कि उपयोगकर्ता कौनसा डेटा ऐक्सेस कर सकता है.