Az iOS-ügyfélkódtár használata az Azure Mobile Appshez

Áttekintés

Ez az útmutató bemutatja, hogyan hajthat végre gyakori forgatókönyveket a legújabb Azure Mobile Apps iOS SDK használatával. Ha most ismerkedik az Azure Mobile Apps szolgáltatással, először végezze el az Azure Mobile Apps gyors üzembe helyezését egy háttérrendszer létrehozásához, egy táblázat létrehozásához és egy előre elkészített iOS Xcode-projekt letöltéséhez. Ebben az útmutatóban az ügyféloldali iOS SDK-ra összpontosítunk. A háttérrendszer kiszolgálóoldali SDK-járól további információt a Server SDK HOWTOS-jában talál.

Referenciadokumentáció

Az iOS-ügyféloldali SDK referenciadokumentációja itt található: Azure Mobile Apps iOS-ügyfélhivatkozás.

Támogatott platformok

Az iOS SDK támogatja az Objective-C projekteket, a Swift 2.2-projekteket és a Swift 2.3-projekteket az iOS 8.0-s vagy újabb verzióihoz.

A "kiszolgálói folyamat" hitelesítés webnézetet használ a bemutatott felhasználói felülethez. Ha az eszköz nem tud WebView felhasználói felületet bemutatni, akkor egy másik hitelesítési módszerre van szükség, amely kívül esik a termék hatókörén. Ez az SDK így nem alkalmas Watch típusú vagy hasonló korlátozott eszközökhöz.

Beállítás és előfeltételek

Ez az útmutató feltételezi, hogy létrehozott egy táblával rendelkező háttérrendszert. Ez az útmutató feltételezi, hogy a tábla sémája megegyezik az oktatóanyagokban szereplő táblázatokkal. Ez az útmutató azt is feltételezi, hogy a kódban hivatkozik MicrosoftAzureMobile.framework és importál.MicrosoftAzureMobile/MicrosoftAzureMobile.h

Útmutató: Ügyfél létrehozása

Ha egy Azure Mobile Apps-háttéralkalmazást szeretne elérni a projektben, hozzon létre egy MSClient. Cserélje le AppUrl az alkalmazás URL-címét. Elhagyhatja és applicationKey üresen hagyhatjagatewayURLString. Ha beállít egy átjárót a hitelesítéshez, töltse ki gatewayURLString az átjáró URL-címét.

Objective-C:

MSClient *client = [MSClient clientWithApplicationURLString:@"AppUrl"];

Swift:

let client = MSClient(applicationURLString: "AppUrl")

Útmutató: Táblahivatkozás létrehozása

Az adatok elérése vagy frissítése érdekében hozzon létre a háttértáblára mutató hivatkozást. A TodoItem helyére írja be a tábla nevét.

Objective-C:

MSTable *table = [client tableWithName:@"TodoItem"];

Swift:

let table = client.tableWithName("TodoItem")

Útmutató: Adatok lekérdezése

Adatbázis-lekérdezés létrehozásához kérdezze le az MSTable objektumot. Az alábbi lekérdezés lekéri az összes elemet TodoItem , és naplózza az egyes elemek szövegét.

Objective-C:

[table readWithCompletion:^(MSQueryResult *result, NSError *error) {
        if(error) { // error is nil if no error occurred
                NSLog(@"ERROR %@", error);
        } else {
                for(NSDictionary *item in result.items) { // items is NSArray of records that match query
                        NSLog(@"Todo Item: %@", [item objectForKey:@"text"]);
                }
        }
}];

Swift:

table.readWithCompletion { (result, error) in
    if let err = error {
        print("ERROR ", err)
    } else if let items = result?.items {
        for item in items {
            print("Todo Item: ", item["text"])
        }
    }
}

Útmutató: Visszaadott adatok szűrése

Az eredmények szűréséhez számos lehetőség áll rendelkezésre.

Predikátum használatával történő szűréshez használjon egy NSPredicate és readWithPredicate. Az alábbi szűrők adatokat adnak vissza, hogy csak hiányos teendőelemeket találjanak.

Objective-C:

// Create a predicate that finds items where complete is false
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"complete == NO"];
// Query the TodoItem table
[table readWithPredicate:predicate completion:^(MSQueryResult *result, NSError *error) {
        if(error) {
                NSLog(@"ERROR %@", error);
        } else {
                for(NSDictionary *item in result.items) {
                        NSLog(@"Todo Item: %@", [item objectForKey:@"text"]);
                }
        }
}];

Swift:

// Create a predicate that finds items where complete is false
let predicate =  NSPredicate(format: "complete == NO")
// Query the TodoItem table
table.readWithPredicate(predicate) { (result, error) in
    if let err = error {
        print("ERROR ", err)
    } else if let items = result?.items {
        for item in items {
            print("Todo Item: ", item["text"])
        }
    }
}

Útmutató: Az MSQuery használata

Összetett lekérdezés végrehajtásához (beleértve a rendezést és a lapozást is) hozzon létre egy MSQuery objektumot közvetlenül vagy predikátum használatával:

Objective-C:

MSQuery *query = [table query];
MSQuery *query = [table queryWithPredicate: [NSPredicate predicateWithFormat:@"complete == NO"]];

Swift:

let query = table.query()
let query = table.queryWithPredicate(NSPredicate(format: "complete == NO"))

MSQuery A lehetővé teszi több lekérdezési viselkedés szabályozását.

  • Az eredmények sorrendjének megadása
  • A visszaadni kívánt mezők korlátozása
  • A visszaadandó rekordok számának korlátozása
  • A válaszban szereplő teljes szám megadása
  • Egyéni lekérdezési sztringparaméterek megadása a kérelemben
  • További függvények alkalmazása

MSQuery Lekérdezés végrehajtása az objektum meghívásávalreadWithCompletion.

Útmutató: Adatok rendezése az MSQueryvel

Az eredmények rendezéséhez lássunk egy példát. A "text" mező növekvő, majd a "teljes" csökkenő sorrendbe rendezéséhez hívja meg MSQuery a következőt:

Objective-C:

[query orderByAscending:@"text"];
[query orderByDescending:@"complete"];
[query readWithCompletion:^(MSQueryResult *result, NSError *error) {
        if(error) {
                NSLog(@"ERROR %@", error);
        } else {
                for(NSDictionary *item in result.items) {
                        NSLog(@"Todo Item: %@", [item objectForKey:@"text"]);
                }
        }
}];

Swift:

query.orderByAscending("text")
query.orderByDescending("complete")
query.readWithCompletion { (result, error) in
    if let err = error {
        print("ERROR ", err)
    } else if let items = result?.items {
        for item in items {
            print("Todo Item: ", item["text"])
        }
    }
}

Útmutató: Mezők korlátozása és lekérdezési sztringparaméterek kibontása az MSQuery használatával

A lekérdezésben visszaadandó mezők korlátozásához adja meg a mezők nevét a selectFields tulajdonságban. Ez a példa csak a szöveget és a befejezett mezőket adja vissza:

Objective-C:

query.selectFields = @[@"text", @"complete"];

Swift:

query.selectFields = ["text", "complete"]

Ha további lekérdezési sztringparamétereket szeretne belefoglalni a kiszolgálókérésbe (például mert egy egyéni kiszolgálóoldali szkript használja őket), töltse ki query.parameters az alábbi módon:

Objective-C:

query.parameters = @{
    @"myKey1" : @"value1",
    @"myKey2" : @"value2",
};

Swift:

query.parameters = ["myKey1": "value1", "myKey2": "value2"]

Útmutató: Oldalméret konfigurálása

Az Azure Mobile Apps esetében az oldalméret szabályozza a háttértáblákból egyszerre lekért rekordok számát. Az adathívások pull ezután az oldalméret alapján kötenek össze adatokat, amíg nincs több lekérendő rekord.

Az msPullSettings használatával az alábbi módon konfigurálhatja az oldalméretet. Az alapértelmezett oldalméret 50, az alábbi példa pedig 3-ra módosítja.

Teljesítménybeli okokból más oldalméretet is konfigurálhat. Ha nagy számú kis adatrekordja van, a nagy oldalméret csökkenti a kiszolgálói adatátjárások számát.

Ez a beállítás csak az ügyféloldal oldalméretét szabályozza. Ha az ügyfél nagyobb oldalméretet kér, mint amennyit a Mobile Apps háttérrendszere támogat, az oldalméret a támogatott háttérrendszer maximális méretére van leképezve.

Ez a beállítás az adatrekordok számát is meghatározza, nem a bájtméretet.

Ha növeli az ügyféloldal méretét, akkor a kiszolgálón is növelnie kell az oldalméretet. Ennek lépéseit a "How to: Adjust the table paging size" (A táblázat lapozási méretének módosítása) című témakörben találja.

Objective-C:

  MSPullSettings *pullSettings = [[MSPullSettings alloc] initWithPageSize:3];
  [table  pullWithQuery:query queryId:@nil settings:pullSettings
                        completion:^(NSError * _Nullable error) {
                               if(error) {
                    NSLog(@"ERROR %@", error);
                }
                           }];

Swift:

let pullSettings = MSPullSettings(pageSize: 3)
table.pullWithQuery(query, queryId:nil, settings: pullSettings) { (error) in
    if let err = error {
        print("ERROR ", err)
    }
}

Útmutató: Adatok beszúrása

Új táblázatsor beszúrásához hozzon létre és hívjon meg table insertegy táblázatsortNSDictionary. Ha a dinamikus séma engedélyezve van, a Azure App Service mobil háttérrendszer automatikusan új oszlopokat hoz létre a NSDictionary.

Ha id nincs megadva, a háttérrendszer automatikusan létrehoz egy új egyedi azonosítót. Adja meg saját id azonosítóként az e-mail-címeket, felhasználóneveket vagy saját egyéni értékeket. A saját azonosító megadása megkönnyítheti az összekapcsolásokat és az üzleti célú adatbázis-logikát.

Ez result tartalmazza a beszúrt új elemet. A kiszolgálólogikától függően előfordulhat, hogy a kiszolgálónak átadott adatokhoz képest további vagy módosított adatokkal rendelkeznek.

Objective-C:

NSDictionary *newItem = @{@"id": @"custom-id", @"text": @"my new item", @"complete" : @NO};
[table insert:newItem completion:^(NSDictionary *result, NSError *error) {
    if(error) {
        NSLog(@"ERROR %@", error);
    } else {
        NSLog(@"Todo Item: %@", [result objectForKey:@"text"]);
    }
}];

Swift:

let newItem = ["id": "custom-id", "text": "my new item", "complete": false]
table.insert(newItem) { (result, error) in
    if let err = error {
        print("ERROR ", err)
    } else if let item = result {
        print("Todo Item: ", item["text"])
    }
}

Útmutató: Adatok módosítása

Meglévő sor frissítéséhez módosítsa az elemet, és hívja meg a következőt update:

Objective-C:

NSMutableDictionary *newItem = [oldItem mutableCopy]; // oldItem is NSDictionary
[newItem setValue:@"Updated text" forKey:@"text"];
[table update:newItem completion:^(NSDictionary *result, NSError *error) {
    if(error) {
        NSLog(@"ERROR %@", error);
    } else {
        NSLog(@"Todo Item: %@", [result objectForKey:@"text"]);
    }
}];

Swift:

if let newItem = oldItem.mutableCopy() as? NSMutableDictionary {
    newItem["text"] = "Updated text"
    table2.update(newItem as [NSObject: AnyObject], completion: { (result, error) -> Void in
        if let err = error {
            print("ERROR ", err)
        } else if let item = result {
            print("Todo Item: ", item["text"])
        }
    })
}

Másik lehetőségként adja meg a sorazonosítót és a frissített mezőt:

Objective-C:

[table update:@{@"id":@"custom-id", @"text":"my EDITED item"} completion:^(NSDictionary *result, NSError *error) {
    if(error) {
        NSLog(@"ERROR %@", error);
    } else {
        NSLog(@"Todo Item: %@", [result objectForKey:@"text"]);
    }
}];

Swift:

table.update(["id": "custom-id", "text": "my EDITED item"]) { (result, error) in
    if let err = error {
        print("ERROR ", err)
    } else if let item = result {
        print("Todo Item: ", item["text"])
    }
}

A frissítések végrehajtásakor legalább az id attribútumot be kell állítani.

Útmutató: Adatok törlése

Elem törléséhez hívja meg delete az elemet:

Objective-C:

[table delete:item completion:^(id itemId, NSError *error) {
    if(error) {
        NSLog(@"ERROR %@", error);
    } else {
        NSLog(@"Todo Item ID: %@", itemId);
    }
}];

Swift:

table.delete(newItem as [NSObject: AnyObject]) { (itemId, error) in
    if let err = error {
        print("ERROR ", err)
    } else {
        print("Todo Item ID: ", itemId)
    }
}

Másik lehetőségként törölje egy sorazonosító megadásával:

Objective-C:

[table deleteWithId:@"37BBF396-11F0-4B39-85C8-B319C729AF6D" completion:^(id itemId, NSError *error) {
    if(error) {
        NSLog(@"ERROR %@", error);
    } else {
        NSLog(@"Todo Item ID: %@", itemId);
    }
}];

Swift:

table.deleteWithId("37BBF396-11F0-4B39-85C8-B319C729AF6D") { (itemId, error) in
    if let err = error {
        print("ERROR ", err)
    } else {
        print("Todo Item ID: ", itemId)
    }
}

A törléskor legalább az id attribútumot be kell állítani.

Útmutató: Egyéni API meghívása

Egy egyéni API-val bármilyen háttérfunkciót elérhetővé tehet. Nem kell táblaműveletre leképenie. Nemcsak az üzenetkezelést szabályozhatja jobban, hanem a fejléceket is elolvashatja/beállíthatja, és módosíthatja a válasz törzsének formátumát.

Egyéni API meghívásához hívja meg a parancsot MSClient.invokeAPI. A kérés és a válasz tartalma JSON-ként lesz kezelve. Más médiatípusok használatához használja a másik túlterhelést invokeAPI. Ha kérés helyett kérést GETPOST szeretne küldeni, állítsa be a paramétert HTTPMethod"GET" és a paramétert bodynil (mivel a GET kérések nem rendelkeznek üzenettörzsekkel.) Ha az egyéni API más HTTP-műveleteket is támogat, módosítsa HTTPMethod megfelelően.

Objective-C:

[self.client invokeAPI:@"sendEmail"
                  body:@{ @"contents": @"Hello world!" }
            HTTPMethod:@"POST"
            parameters:@{ @"to": @"bill@contoso.com", @"subject" : @"Hi!" }
               headers:nil
            completion: ^(NSData *result, NSHTTPURLResponse *response, NSError *error) {
                if(error) {
                    NSLog(@"ERROR %@", error);
                } else {
                    // Do something with result
                }
            }];

Swift:

client.invokeAPI("sendEmail",
            body: [ "contents": "Hello World" ],
            HTTPMethod: "POST",
            parameters: [ "to": "bill@contoso.com", "subject" : "Hi!" ],
            headers: nil)
            {
                (result, response, error) -> Void in
                if let err = error {
                    print("ERROR ", err)
                } else if let res = result {
                          // Do something with result
                }
        }

Útmutató: Leküldéses sablonok regisztrálása platformfüggetlen értesítések küldéséhez

Sablonok regisztrálásához adja át a sablonokat a client.push registerDeviceToken metódussal az ügyfélalkalmazásban.

Objective-C:

[client.push registerDeviceToken:deviceToken template:iOSTemplate completion:^(NSError *error) {
    if(error) {
        NSLog(@"ERROR %@", error);
    }
}];

Swift:

client.push?.registerDeviceToken(NSData(), template: iOSTemplate, completion: { (error) in
    if let err = error {
        print("ERROR ", err)
    }
})

A sablonok NSDictionary típusúak, és több sablont is tartalmazhatnak a következő formátumban:

Objective-C:

NSDictionary *iOSTemplate = @{ @"templateName": @{ @"body": @{ @"aps": @{ @"alert": @"$(message)" } } } };

Swift:

let iOSTemplate = ["templateName": ["body": ["aps": ["alert": "$(message)"]]]]

A rendszer minden címkét eltávolít a biztonsági kérésből. Ha címkéket szeretne hozzáadni a telepítésekhez vagy sablonokhoz a telepítésen belül, olvassa el a .NET háttérkiszolgálóI SDK használata az Azure Mobile Appshez című témakört. Ha értesítéseket szeretne küldeni ezekkel a regisztrált sablonokkal, használja a Notification Hubs API-kat.

Útmutató: Hibák kezelése

Amikor meghív egy Azure App Service mobil háttérrendszert, a befejezési blokk tartalmaz egy paramétertNSError. Hiba esetén ez a paraméter nem nil. A kódban ellenőrizze ezt a paramétert, és szükség szerint kezelje a hibát, ahogy az az előző kódrészletekben is látható.

A fájl <WindowsAzureMobileServices/MSError.h> határozza meg a konstansokat MSErrorResponseKey, MSErrorRequestKeyés MSErrorServerItemKey. A hibával kapcsolatos további adatok lekérése:

Objective-C:

NSDictionary *serverItem = [error.userInfo objectForKey:MSErrorServerItemKey];

Swift:

let serverItem = error.userInfo[MSErrorServerItemKey]

Emellett a fájl konstansokat határoz meg az egyes hibakódokhoz:

Objective-C:

if (error.code == MSErrorPreconditionFailed) {

Swift:

if (error.code == MSErrorPreconditionFailed) {

Útmutató: Felhasználók hitelesítése az Active Directory hitelesítési kódtárával

Az Active Directory authentication Library (ADAL) használatával bejelentkeztetheti a felhasználókat az alkalmazásba az Azure Active Directory használatával. Az identitásszolgáltató SDK-val történő ügyfélfolyamat-hitelesítés előnyösebb a loginWithProvider:completion: módszer használata esetén. Az ügyfélfolyamat-hitelesítés natívabb felhasználói felületet biztosít, és további testreszabást tesz lehetővé.

  1. Konfigurálja a mobilalkalmazás háttérrendszerét az AAD-bejelentkezéshez az Active Directory bejelentkezési oktatóanyagában szereplő App Service konfigurálásával. Mindenképpen végezze el a natív ügyfélalkalmazás regisztrálásának opcionális lépését. iOS esetén azt javasoljuk, hogy az átirányítási URI formátuma <app-scheme>://<bundle-id>legyen. További információt az ADAL iOS rövid útmutatóban talál.

  2. Telepítse az ADAL-t a Cocoapods használatával. Szerkessze a Podfile-t úgy, hogy tartalmazza a következő definíciót, és cserélje le a YOUR-PROJECT fájlt az Xcode-projekt nevére:

     source 'https://github.com/CocoaPods/Specs.git'
     link_with ['YOUR-PROJECT']
     xcodeproj 'YOUR-PROJECT'
    

    és a pod:

     pod 'ADALiOS'
    
  3. A terminál használatával futtassa pod install a projektet tartalmazó könyvtárból, majd nyissa meg a létrehozott Xcode-munkaterületet (nem a projektet).

  4. Adja hozzá az alábbi kódot az alkalmazáshoz a használt nyelvnek megfelelően. Mindegyikben végezze el a következő csereeket:

    • Cserélje le az INSERT-AUTHORITY-HERE elemet annak a bérlőnek a nevére, amelyben az alkalmazást kiépítette. A formátumnak a következőnek kell lennie https://login.microsoftonline.com/contoso.onmicrosoft.com: . Ez az érték másolható az Azure Active Directory Tartomány lapjáról a Azure Portal.
    • Cserélje le az INSERT-RESOURCE-ID-HERE elemet a mobilalkalmazás háttérrendszerének ügyfél-azonosítójával. Az ügyfél-azonosítót a portálOn, az Azure Active Directory beállításai alatt található Speciális lapon szerezheti be.
    • Cserélje le az INSERT-CLIENT-ID-HERE elemet a natív ügyfélalkalmazásból kimásolt ügyfél-azonosítóra.
    • Cserélje le az INSERT-REDIRECT-URI-HERE elemet a webhely /.auth/login/done végpontjára a HTTPS-séma használatával. Ennek az értéknek hasonlónak kell lennie a https://contoso.azurewebsites.net/.auth/login/done.

Objective-C:

#import <ADALiOS/ADAuthenticationContext.h>
#import <ADALiOS/ADAuthenticationSettings.h>
// ...
- (void) authenticate:(UIViewController*) parent
            completion:(void (^) (MSUser*, NSError*))completionBlock;
{
    NSString *authority = @"INSERT-AUTHORITY-HERE";
    NSString *resourceId = @"INSERT-RESOURCE-ID-HERE";
    NSString *clientId = @"INSERT-CLIENT-ID-HERE";
    NSURL *redirectUri = [[NSURL alloc]initWithString:@"INSERT-REDIRECT-URI-HERE"];
    ADAuthenticationError *error;
    ADAuthenticationContext *authContext = [ADAuthenticationContext authenticationContextWithAuthority:authority error:&error];
    authContext.parentController = parent;
    [ADAuthenticationSettings sharedInstance].enableFullScreen = YES;
    [authContext acquireTokenWithResource:resourceId
                                    clientId:clientId
                                redirectUri:redirectUri
                            completionBlock:^(ADAuthenticationResult *result) {
                                if (result.status != AD_SUCCEEDED)
                                {
                                    completionBlock(nil, result.error);;
                                }
                                else
                                {
                                    NSDictionary *payload = @{
                                                            @"access_token" : result.tokenCacheStoreItem.accessToken
                                                            };
                                    [client loginWithProvider:@"aad" token:payload completion:completionBlock];
                                }
                            }];
}

Swift:

// add the following imports to your bridging header:
//        #import <ADALiOS/ADAuthenticationContext.h>
//        #import <ADALiOS/ADAuthenticationSettings.h>

func authenticate(parent: UIViewController, completion: (MSUser?, NSError?) -> Void) {
    let authority = "INSERT-AUTHORITY-HERE"
    let resourceId = "INSERT-RESOURCE-ID-HERE"
    let clientId = "INSERT-CLIENT-ID-HERE"
    let redirectUri = NSURL(string: "INSERT-REDIRECT-URI-HERE")
    var error: AutoreleasingUnsafeMutablePointer<ADAuthenticationError?> = nil
    let authContext = ADAuthenticationContext(authority: authority, error: error)
    authContext.parentController = parent
    ADAuthenticationSettings.sharedInstance().enableFullScreen = true
    authContext.acquireTokenWithResource(resourceId, clientId: clientId, redirectUri: redirectUri) { (result) in
            if result.status != AD_SUCCEEDED {
                completion(nil, result.error)
            }
            else {
                let payload: [String: String] = ["access_token": result.tokenCacheStoreItem.accessToken]
                client.loginWithProvider("aad", token: payload, completion: completion)
            }
        }
}

Útmutató: Felhasználók hitelesítése az iOS-hez készült Facebook SDK-val

Az iOS-hez készült Facebook SDK-val bejelentkeztetheti a felhasználókat az alkalmazásba a Facebook használatával. Az ügyfélfolyamat-hitelesítés használata előnyösebb a loginWithProvider:completion: módszer használata esetén. Az ügyfélfolyamat-hitelesítés natívabb felhasználói felületet biztosít, és további testreszabást tesz lehetővé.

  1. Konfigurálja a mobilalkalmazás háttérrendszerét a Facebook-bejelentkezéshez a Hogyan konfigurálható App Service a Facebook bejelentkezési oktatóanyagában.

  2. Telepítse az iOS-hez készült Facebook SDK-t az iOS-hez készült Facebook SDK – Első lépések dokumentációt követve. Alkalmazás létrehozása helyett hozzáadhatja az iOS-platformot a meglévő regisztrációhoz.

  3. A Facebook dokumentációja tartalmaz néhány Objective-C kódot az alkalmazásmeghatalmazásban. Ha Swiftet használ, a következő fordításokat használhatja az AppDelegate.swifthez:

    // Add the following import to your bridging header:
    //        #import <FBSDKCoreKit/FBSDKCoreKit.h>
    
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
        FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
        // Add any custom logic here.
        return true
    }
    
    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
        let handled = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
        // Add any custom logic here.
        return handled
    }
    
  4. A projekthez való hozzáadás FBSDKCoreKit.framework mellett ugyanígy adhat hozzá hivatkozást FBSDKLoginKit.framework is.

  5. Adja hozzá az alábbi kódot az alkalmazáshoz a használt nyelvnek megfelelően.

    Objective-C:

    #import <FBSDKLoginKit/FBSDKLoginKit.h>
    #import <FBSDKCoreKit/FBSDKAccessToken.h>
    // ...
    - (void) authenticate:(UIViewController*) parent
                completion:(void (^) (MSUser*, NSError*)) completionBlock;
    {
        FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
        [loginManager
            logInWithReadPermissions: @[@"public_profile"]
            fromViewController:parent
            handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
                if (error) {
                    completionBlock(nil, error);
                } else if (result.isCancelled) {
                    completionBlock(nil, error);
                } else {
                    NSDictionary *payload = @{
                                            @"access_token":result.token.tokenString
                                            };
                    [client loginWithProvider:@"facebook" token:payload completion:completionBlock];
                }
            }];
    }
    

    Swift:

    // Add the following imports to your bridging header:
    //        #import <FBSDKLoginKit/FBSDKLoginKit.h>
    //        #import <FBSDKCoreKit/FBSDKAccessToken.h>
    
    func authenticate(parent: UIViewController, completion: (MSUser?, NSError?) -> Void) {
        let loginManager = FBSDKLoginManager()
        loginManager.logInWithReadPermissions(["public_profile"], fromViewController: parent) { (result, error) in
            if (error != nil) {
                completion(nil, error)
            }
            else if result.isCancelled {
                completion(nil, error)
            }
            else {
                let payload: [String: String] = ["access_token": result.token.tokenString]
                client.loginWithProvider("facebook", token: payload, completion: completion)
            }
        }
    }
    

Útmutató: Felhasználók hitelesítése az iOS-hez készült Twitter Fabrickel

Az iOS-hez készült Fabric használatával a Twitter használatával bejelentkeztetheti a felhasználókat az alkalmazásba. Az ügyfélfolyamat-hitelesítés előnyösebb a loginWithProvider:completion: módszer használatához, mivel natívabb felhasználói felületi élményt nyújt, és további testreszabást tesz lehetővé.

  1. Configure your mobile app backend for Twitter sign-in by following the How to configure App Service for Twitter login tutorial.

  2. Adja hozzá a Hálót a projekthez az iOS-hez készült Háló – Első lépések dokumentáció és a TwitterKit beállításával.

    Megjegyzés

    Alapértelmezés szerint a Fabric létrehoz egy Twitter-alkalmazást. Elkerülheti az alkalmazások létrehozását, ha regisztrálja a korábban létrehozott fogyasztói kulcsot és fogyasztói titkos kulcsot az alábbi kódrészletek használatával. Másik lehetőségként lecserélheti a App Service számára megadott fogyasztóikulcs- és fogyasztóikulcs-értékeket a Háló irányítópulton látható értékekkel. Ha ezt a beállítást választja, ügyeljen arra, hogy a visszahívási URL-címet helyőrző értékre állítsa, például https://<yoursitename>.azurewebsites.net/.auth/login/twitter/callback.

    Ha a korábban létrehozott titkos kódokat használja, adja hozzá az alábbi kódot az alkalmazásmeghatalmazáshoz:

    Objective-C:

    #import <Fabric/Fabric.h>
    #import <TwitterKit/TwitterKit.h>
    // ...
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        [[Twitter sharedInstance] startWithConsumerKey:@"your_key" consumerSecret:@"your_secret"];
        [Fabric with:@[[Twitter class]]];
        // Add any custom logic here.
        return YES;
    }
    

    Swift:

    import Fabric
    import TwitterKit
    // ...
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
        Twitter.sharedInstance().startWithConsumerKey("your_key", consumerSecret: "your_secret")
        Fabric.with([Twitter.self])
        // Add any custom logic here.
        return true
    }
    
  3. Adja hozzá az alábbi kódot az alkalmazáshoz a használt nyelvnek megfelelően.

    Objective-C:

    #import <TwitterKit/TwitterKit.h>
    // ...
    - (void)authenticate:(UIViewController*)parent completion:(void (^) (MSUser*, NSError*))completionBlock
    {
        [[Twitter sharedInstance] logInWithCompletion:^(TWTRSession *session, NSError *error) {
            if (session) {
                NSDictionary *payload = @{
                                            @"access_token":session.authToken,
                                            @"access_token_secret":session.authTokenSecret
                                        };
                [client loginWithProvider:@"twitter" token:payload completion:completionBlock];
            } else {
                completionBlock(nil, error);
            }
        }];
    }
    

    Swift:

    import TwitterKit
    // ...
    func authenticate(parent: UIViewController, completion: (MSUser?, NSError?) -> Void) {
        let client = self.table!.client
        Twitter.sharedInstance().logInWithCompletion { session, error in
            if (session != nil) {
                let payload: [String: String] = ["access_token": session!.authToken, "access_token_secret": session!.authTokenSecret]
                client.loginWithProvider("twitter", token: payload, completion: completion)
            } else {
                completion(nil, error)
            }
        }
    }
    

Útmutató: Felhasználók hitelesítése az iOS-hez készült Google Sign-In SDK-val

Az iOS-hez készült Google Sign-In SDK-val Google-fiókkal bejelentkeztetheti a felhasználókat az alkalmazásba. A Google nemrég bejelentette az OAuth biztonsági szabályzataik módosításait. Ezek a szabályzatmódosítások a Jövőben a Google SDK használatát igénylik.

  1. Konfigurálja a mobilalkalmazás háttérrendszerét a Google-bejelentkezéshez a Hogyan konfigurálható App Service a Google bejelentkezési oktatóanyagában.

  2. Telepítse az iOS-hez készült Google SDK-t a Google Sign-In az iOS-hez – Kezdje el integrálni a dokumentációt. Kihagyhatja a "Hitelesítés háttérkiszolgálóval" szakaszt.

  3. Adja hozzá a következőket a meghatalmazott metódusához signIn:didSignInForUser:withError: a használt nyelvnek megfelelően.

    Objective-C:

    NSDictionary *payload = @{
                                @"id_token":user.authentication.idToken,
                                @"authorization_code":user.serverAuthCode
                                };
    
    [client loginWithProvider:@"google" token:payload completion:^(MSUser *user, NSError *error) {
        // ...
    }];
    

    Swift:

    let payload: [String: String] = ["id_token": user.authentication.idToken, "authorization_code": user.serverAuthCode]
    client.loginWithProvider("google", token: payload) { (user, error) in
        // ...
    }
    
  4. Győződjön meg arról, hogy az alábbiakat is hozzáadja az alkalmazásmegbízotthozapplication:didFinishLaunchingWithOptions:, és az "SERVER_CLIENT_ID" helyére ugyanazzal az azonosítóval cseréli le, amelyet az 1. lépésben App Service konfigurálásához használt.

    Objective-C:

    [GIDSignIn sharedInstance].serverClientID = @"SERVER_CLIENT_ID";
    

    Swift:

    GIDSignIn.sharedInstance().serverClientID = "SERVER_CLIENT_ID"
    
  5. Adja hozzá az alábbi kódot az alkalmazáshoz egy olyan UIViewControllerben, amely a használt nyelvnek megfelelően implementálja a GIDSignInUIDelegate protokollt. A bejelentkezés előtt kijelentkezett, és bár nem kell újból megadnia a hitelesítő adatait, megjelenik egy hozzájárulási párbeszédpanel. Csak akkor hívja meg ezt a metódust, ha a munkamenet-jogkivonat lejárt.

    Objective-C:

    #import <Google/SignIn.h>
    // ...
    - (void)authenticate
    {
            [GIDSignIn sharedInstance].uiDelegate = self;
            [[GIDSignIn sharedInstance] signOut];
            [[GIDSignIn sharedInstance] signIn];
    }
    

    Swift:

    // ...
    func authenticate() {
        GIDSignIn.sharedInstance().uiDelegate = self
        GIDSignIn.sharedInstance().signOut()
        GIDSignIn.sharedInstance().signIn()
    }