Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Översikt
Den här guiden lär dig att utföra vanliga scenarier med hjälp av den senaste Azure Mobile Apps iOS SDK. Om du är nybörjare på Azure Mobile Apps slutför du först Snabbstart för Azure Mobile Apps för att skapa en serverdel, skapa en tabell och ladda ned ett färdigt iOS Xcode-projekt. I den här guiden fokuserar vi på iOS SDK på klientsidan. För att lära dig mer om server-SDK för backend, se Server SDK-ANVISNINGAR.
Referensdokumentation
Referensdokumentationen för iOS-klient-SDK finns här: Azure Mobile Apps iOS-klientreferens.
Plattformar som stöds
IOS SDK stöder Objective-C projekt, Swift 2.2-projekt och Swift 2.3-projekt för iOS-versioner 8.0 eller senare.
Autentiseringen för "serverflöde" använder en WebView för användargränssnittet som visas. Om enheten inte kan presentera ett WebView-användargränssnitt krävs en annan autentiseringsmetod som ligger utanför produktens omfång. Denna SDK är därför inte lämplig för watch-typ eller liknande begränsade enheter.
Installation och förutsättningar
Den här guiden förutsätter att du har skapat en serverdel med en tabell. Den här guiden förutsätter att tabellen har samma schema som tabellerna i dessa självstudier. Den här guiden förutsätter också att du i koden refererar till MicrosoftAzureMobile.framework och importerar MicrosoftAzureMobile/MicrosoftAzureMobile.h.
Gör så här: Skapa klient
Om du vill komma åt en Azure Mobile Apps-serverdel i projektet skapar du en MSClient. Ersätt AppUrl med appens URL. Du kan lämna gatewayURLString och applicationKey tom. Om du konfigurerar en gateway för autentisering fyller du i gatewayURLString med gateway-URL:en.
Objective-C:
MSClient *client = [MSClient clientWithApplicationURLString:@"AppUrl"];
Swift:
let client = MSClient(applicationURLString: "AppUrl")
Anvisningar: Skapa tabellreferens
Om du vill komma åt eller uppdatera data skapar du en referens till serverdelstabellen. Ersätt TodoItem med namnet på tabellen
Objective-C:
MSTable *table = [client tableWithName:@"TodoItem"];
Swift:
let table = client.tableWithName("TodoItem")
Anvisningar: Fråga efter data
Om du vill skapa en databasfråga frågar du MSTable-objektet. Följande fråga hämtar alla objekt i TodoItem och loggar texten för varje objekt.
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"])
        }
    }
}
Hur man filtrerar returnerade uppgifter
Det finns många tillgängliga alternativ för att filtrera resultat.
Om du vill filtrera med hjälp av ett predikat använder du en NSPredicate och readWithPredicate. Följande filter returnerade data för att endast hitta ofullständiga Todo-objekt.
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"])
        }
    }
}
Så här gör du: Använda MSQuery
Om du vill utföra en komplex fråga, inklusive sortering och paginering, skapar du ett MSQuery-objekt, direkt eller med hjälp av ett predikat.
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 låter dig styra flera frågebeteenden.
- Ange resultatordning
- Begränsa vilka fält som ska returneras
- Begränsa antalet poster som ska returneras
- Ange totalt antal som svar
- Ange anpassade frågesträngsparametrar i begäran
- Tillämpa ytterligare funktioner
Kör en MSQuery fråga genom att anropa readWithCompletion på objektet.
Gör så här: Sortera data med MSQuery
Om du vill sortera resultat ska vi titta på ett exempel. För att sortera efter fältet 'text' i stigande ordning och sedan efter 'komplett' i fallande ordning, anropa MSQuery så här:
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"])
        }
    }
}
Så här begränsar du fält och expanderar frågesträngsparametrar med MSQuery
Om du vill begränsa fält som ska returneras i en fråga anger du namnen på fälten i selectFields-egenskapen. Det här exemplet returnerar endast text och slutförda fält:
Objective-C:
query.selectFields = @[@"text", @"complete"];
Swift:
query.selectFields = ["text", "complete"]
Om du vill inkludera ytterligare frågesträngsparametrar i serverbegäran (till exempel eftersom ett anpassat skript på serversidan använder dem) fyller du i query.parameters så här:
Objective-C:
query.parameters = @{
    @"myKey1" : @"value1",
    @"myKey2" : @"value2",
};
Swift:
query.parameters = ["myKey1": "value1", "myKey2": "value2"]
Så här gör du för att konfigurera sidstorlek
Med Azure Mobile Apps styr sidstorleken antalet poster som hämtas åt gången från backend-tabellerna. Ett anrop till pull-data skulle sedan samla ihop data, baserat på denna sidstorlek, tills inga fler poster finns att hämta.
Det går att konfigurera en sidstorlek med hjälp av MSPullSettings enligt nedan. Standardstorleken för sidan är 50 och exemplet nedan ändrar den till 3.
Du kan konfigurera en annan sidstorlek för att förbättra prestandan. Om du har ett stort antal små dataposter minskar en hög sidstorlek antalet turer runt servern.
Den här inställningen kontrollerar endast storleken på sidan på klientsidan. Om klienten ber om en större sidstorlek än vad mobile apps-serverdelen stöder är sidstorleken begränsad till det maximala som serverdelen har konfigurerats för att stödja.
Den här inställningen är också antal av dataposter, inte bytestorlek.
Om du ökar storleken på klientsidan bör du också öka sidstorleken på servern. Se "Hur man justerar tabellsidstorleken" för stegen för att göra detta.
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)
    }
}
Gör så här: Infoga data
Om du vill infoga en ny tabellrad skapar du en NSDictionary och anropar table insert. Om dynamiskt schema är aktiverat genererar Azure App Service-mobilserverdelen automatiskt nya kolumner baserat på NSDictionary.
Om id inte anges genererar serverdelen automatiskt ett nytt unikt ID. Ange egna id för att använda e-postadresser, användarnamn eller egna anpassade värden som ID. Att tillhandahålla ett eget ID kan underlätta kopplingar och affärsorienterad databaslogik.
              result innehåller det nya objektet som infogades. Beroende på serverlogik kan den ha ytterligare eller ändrade data jämfört med vad som skickades till servern.
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"])
    }
}
Så här: Ändra data
Om du vill uppdatera en befintlig rad ändrar du ett objekt och anropar 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"])
        }
    })
}
Alternativt kan du ange rad-ID och det uppdaterade fältet:
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"])
    }
}
Attributet id måste minst anges när uppdateringarna ska göras.
Gör så här: Ta bort data
Om du vill ta bort ett objekt anropar du delete med objektet:
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)
    }
}
Du kan också ta bort genom att ange ett rad-ID:
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)
    }
}
Attributet id måste minst anges vid borttagning.
Anvisningar: Anropa anpassat API
Med ett anpassat API kan du exponera alla serverdelsfunktioner. Den behöver inte mappas till en tabelloperation. Du får inte bara mer kontroll över meddelanden, du kan till och med läsa/ange rubriker och ändra formatet för svarstexten.
Anropa ett anpassat API genom att anropa MSClient.invokeAPI. Innehållet i begäran och svar behandlas som JSON. För att använda andra medietyper, använd den andra överbelastningen av invokeAPI.  Om du vill göra en GET begäran i stället för en POST begäran anger du parametern HTTPMethod till "GET" och parametern body till nil (eftersom GET-begäranden inte har meddelandeorgan.) Om ditt anpassade API stöder andra HTTP-verb ändrar du HTTPMethod på rätt sätt.
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
                }
        }
Gör så här: Registrera push-mallar för att skicka plattformsoberoende meddelanden
Om du vill registrera mallar skickar du mallar med din client.push registerDeviceToken metod i klientappen.
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)
    }
})
Dina mallar är av typen NSDictionary och kan innehålla flera mallar i följande format:
Objective-C:
NSDictionary *iOSTemplate = @{ @"templateName": @{ @"body": @{ @"aps": @{ @"alert": @"$(message)" } } } };
Swift:
let iOSTemplate = ["templateName": ["body": ["aps": ["alert": "$(message)"]]]]
Alla taggar tas bort från begäran om säkerhet. Information om hur du lägger till taggar i installationer eller mallar i installationer finns i Work with the .NET backend server SDK for Azure Mobile Apps. Om du vill skicka meddelanden med hjälp av dessa registrerade mallar arbetar du med Notification Hubs-API:er.
Anvisningar: Hantera fel
När du anropar en mobil serverdel för Azure App Service innehåller slutförandeblocket en parameter NSError. När ett fel inträffar är den här parametern inte noll. I koden bör du kontrollera den här parametern och hantera felet efter behov, vilket visas i föregående kodfragment.
Filen <WindowsAzureMobileServices/MSError.h> definierar konstanterna MSErrorResponseKey, MSErrorRequestKeyoch MSErrorServerItemKey. Så här hämtar du mer data som är relaterade till felet:
Objective-C:
NSDictionary *serverItem = [error.userInfo objectForKey:MSErrorServerItemKey];
Swift:
let serverItem = error.userInfo[MSErrorServerItemKey]
Dessutom definierar filen konstanter för varje felkod:
Objective-C:
if (error.code == MSErrorPreconditionFailed) {
Swift:
if (error.code == MSErrorPreconditionFailed) {
Anvisningar: Autentisera användare med Active Directory-autentiseringsbiblioteket
Du kan använda Active Directory Authentication Library (ADAL) för att logga in användare i ditt program med hjälp av Azure Active Directory. Klientflödesautentisering med hjälp av en identitetsprovider-SDK är att föredra framför att använda metoden loginWithProvider:completion:.  Klientflödesautentisering ger en mer inbyggd UX-känsla och möjliggör ytterligare anpassning.
- Konfigurera serverdelen av din mobilapp för inloggning med Azure Active Directory (AAD) genom att följa handledningen Konfigurera App Service för Active Directory-inloggning. Slutför det valfria steget för att registrera ett internt klientprogram. För iOS rekommenderar vi att omdirigerings-URI:n är av formuläret - <app-scheme>://<bundle-id>. Mer information finns i snabbstarten ADAL iOS.
- Installera ADAL genom Cocoapods. Redigera poddfilen så att den innehåller följande definition och ersätt YOUR-PROJECT- med namnet på Xcode-projektet: - source 'https://github.com/CocoaPods/Specs.git' link_with ['YOUR-PROJECT'] xcodeproj 'YOUR-PROJECT'- och podden: - pod 'ADALiOS'
- Med hjälp av terminalen kör du - pod installfrån katalogen som innehåller projektet och öppnar sedan den genererade Xcode-arbetsytan (inte projektet).
- Lägg till följande kod i programmet enligt det språk du använder. I var och en gör du följande ersättningar: - Ersätt INSERT-AUTHORITY-HERE med namnet på den klientorganisation där du konfigurerade programmet. Formatet ska vara https://login.microsoftonline.com/contoso.onmicrosoft.com. Det här värdet kan kopieras från fliken Domän i Azure Active Directory i Azure-portalen.
- Ersätt INSERT-RESOURCE-ID-HERE- med klient-ID:t för mobilappens serverdel. Du kan hämta klient-ID:t från fliken Avancerat under Azure Active Directory-inställningar i portalen.
- Ersätt INSERT-CLIENT-ID-HERE- med klient-ID:t som du kopierade från det interna klientprogrammet.
- Ersätt INSERT-REDIRECT-URI-HERE- med webbplatsens /.auth/login/done slutpunkt med hjälp av HTTPS-schemat. Det här värdet bör likna https://contoso.azurewebsites.net/.auth/login/done.
 
- Ersätt INSERT-AUTHORITY-HERE med namnet på den klientorganisation där du konfigurerade programmet. Formatet ska vara 
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)
            }
        }
}
Anvisningar: Autentisera användare med Facebook SDK för iOS
Du kan använda Facebook SDK för iOS för att logga in användare till din applikation med hjälp av Facebook.  Att använda en klientflödesautentisering är att föredra framför att använda metoden loginWithProvider:completion:.  Klientflödesautentiseringen ger en mer inbyggd UX-känsla och möjliggör ytterligare anpassning.
- Konfigurera bakänden av din mobilapp för Facebook-inloggning genom att följa guiden Konfigurera App Service för Facebook-inloggning. 
- Installera Facebook SDK för iOS genom att följa dokumentationen Facebook SDK för iOS – Komma igång. I stället för att skapa en app kan du lägga till iOS-plattformen i din befintliga registrering. 
- Facebooks dokumentation innehåller viss Objective-C-kod i App Delegate. Om du använder Swiftkan du använda följande översättningar för AppDelegate.swift: - // 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 }
- Förutom att lägga till - FBSDKCoreKit.frameworki projektet lägger du även till en referens till- FBSDKLoginKit.frameworkpå samma sätt.
- Lägg till följande kod i programmet enligt det språk du använder. - 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) } } }
Anvisningar: Autentisera användare med Twitter Fabric för iOS
Du kan använda Fabric för iOS för att logga in användare i ditt program med Twitter. Klientflödesautentisering är att föredra framför att använda metoden loginWithProvider:completion:, eftersom den ger en mer inbyggd UX-känsla och möjliggör ytterligare anpassning.
- Konfigurera mobilappens serverdel för Twitter-inloggning genom att följa självstudiekursen Konfigurera App Service för Twitter-inloggning. 
- Lägg till Fabric i ditt projekt genom att följa dokumentationen Fabric för iOS - Komma igång och konfigurera TwitterKit. - Anmärkning - Som standard skapar Fabric ett Twitter-program åt dig. Du kan undvika att skapa ett program genom att registrera konsumentnyckeln och konsumenthemligheten som du skapade tidigare med hjälp av följande kodfragment. Du kan också ersätta de konsumentnyckel- och konsumenthemlighetsvärden som du anger för App Service med de värden du ser i Fabric-instrumentpanelen. Om du väljer det här alternativet bör du ange återanrops-URL:en till ett platshållarvärde, till exempel - https://<yoursitename>.azurewebsites.net/.auth/login/twitter/callback.- Om du väljer att använda hemligheterna som du skapade tidigare lägger du till följande kod i appdelegaten: - 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 }
- Lägg till följande kod i programmet enligt det språk du använder. - 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) } } }
Anvisningar: Autentisera användare med Google Sign-In SDK för iOS
Du kan använda Google Sign-In SDK för iOS för att logga in användare i ditt program med ett Google-konto. Google meddelade nyligen ändringar i sina OAuth-säkerhetsprinciper. Dessa principändringar kräver att Google SDK används i framtiden.
- Konfigurera din mobilapplikations backend för Google-inloggning genom att följa instruktionsguiden Konfigurera App Service för Google-inloggning. 
- Installera Google SDK för iOS genom att följa Google Sign-In för iOS – Börja integrera dokumentation. Du kan hoppa över avsnittet "Autentisera mot en bakomliggande server". 
- Lägg till följande i ombudets - signIn:didSignInForUser:withError:metod, beroende på vilket språk du använder.- 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 // ... }
- Se till att du även lägger till följande till - application:didFinishLaunchingWithOptions:i din appdelegate och ersätter "SERVER_CLIENT_ID" med samma ID som du använde för att konfigurera App Service i steg 1.- Objective-C: - [GIDSignIn sharedInstance].serverClientID = @"SERVER_CLIENT_ID";- Swift: - GIDSignIn.sharedInstance().serverClientID = "SERVER_CLIENT_ID"
- Lägg till följande kod i ditt program i en UIViewController som implementerar - GIDSignInUIDelegateprotokoll, enligt det språk du använder. Du är utloggade innan du loggas in igen, och även om du inte behöver ange dina autentiseringsuppgifter igen visas en dialogruta för medgivande. Anropa endast den här metoden när sessionstoken har upphört att gälla.- 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() }