Jak używać biblioteki klienckiej Apache Cordova dla usługi Azure Mobile AppsHow to use Apache Cordova client library for Azure Mobile Apps

Tego przewodnika dowiesz się, aby wykonać typowe scenariusze za pomocą najnowszej Wtyczka Apache Cordova dla usługi Azure Mobile Apps.This guide teaches you to perform common scenarios using the latest Apache Cordova Plugin for Azure Mobile Apps. Jeśli jesteś nowym użytkownikiem usługi Azure Mobile Apps, najpierw wykonaj Azure mobilnych: aplikacje Szybki Start Aby utworzyć zaplecze, utworzyć tabelę, a następnie Pobierz wstępnie skompilowanym projektem Apache Cordova.If you are new to Azure Mobile Apps, first complete Azure Mobile Apps Quick Start to create a backend, create a table, and download a pre-built Apache Cordova project. W tym przewodniku skupimy się na wtyczkę Apache Cordova po stronie klienta.In this guide, we focus on the client-side Apache Cordova Plugin.

Obsługiwane platformySupported platforms

Ten zestaw SDK obsługuje v6.0.0 Apache Cordova i później dla systemu iOS, Android i Windows urządzenia.This SDK supports Apache Cordova v6.0.0 and later on iOS, Android, and Windows devices. Obsługa platform jest następująca:The platform support is as follows:

  • Interfejs API systemu android 19 – 24 (KitKat za pośrednictwem określić wersję Nougat).Android API 19-24 (KitKat through Nougat).
  • dla systemu iOS w wersji 8.0 lub nowszej.iOS versions 8.0 and later.
  • Windows Phone 8.1.Windows Phone 8.1.
  • Platforma Universal Windows.Universal Windows Platform.

Instalacji i wymagania wstępneSetup and prerequisites

W tym przewodniku założono, że utworzono zaplecza za pomocą tabeli.This guide assumes that you have created a backend with a table. W tym przewodniku założono, że tabela ma ten sam schemat, jak tabele w tych samouczkach.This guide assumes that the table has the same schema as the tables in those tutorials. W tym przewodniku założono również, że dodano wtyczki programu Apache Cordova w kodzie.This guide also assumes that you have added the Apache Cordova Plugin to your code. Jeśli użytkownik nie zostało zrobione, można dodawać wtyczki programu Apache Cordova do projektu w wierszu polecenia:If you have not done so, you may add the Apache Cordova plugin to your project on the command line:

cordova plugin add cordova-plugin-ms-azure-mobile-apps

Aby uzyskać więcej informacji na temat tworzenia Twoja pierwsza aplikacja Apache Cordova, zobacz ich dokumentację.For more information on creating your first Apache Cordova app, see their documentation.

Konfigurowanie aplikacji platformy Ionic 2Setting up an Ionic v2 app

Aby poprawnie skonfigurować projekt środowiska Ionic w wersji 2, utworzysz podstawową aplikację i dodawanie wtyczki Cordova:To properly configure an Ionic v2 project, first create a basic app and add the Cordova plugin:

ionic start projectName --v2
cd projectName
ionic plugin add cordova-plugin-ms-azure-mobile-apps

Dodaj następujące wiersze do app.component.ts do utworzenia obiektu klienta:Add the following lines to app.component.ts to create the client object:

declare var WindowsAzure: any;
var client = new WindowsAzure.MobileServiceClient("https://yoursite.azurewebsites.net");

Teraz można tworzyć i uruchomić projekt w przeglądarce:You can now build and run the project in the browser:

ionic platform add browser
ionic run browser

Wtyczka usługi Azure Mobile Apps Cordova obsługuje obie platformy Ionic aplikacje v1 i v2.The Azure Mobile Apps Cordova plugin supports both Ionic v1 and v2 apps. Tylko aplikacje platformy Ionic 2 wymagają dodatkowej deklaracji pod kątem WindowsAzure obiektu.Only the Ionic v2 apps require the additional declaration for the WindowsAzure object.

Tworzenie połączenia klientaCreate a client connection

Utwórz połączenie klienta, tworząc obiekt WindowsAzure.MobileServiceClient.Create a client connection by creating a WindowsAzure.MobileServiceClient object. Zastąp ciąg appUrl adresem URL Twojej aplikacji Mobile App.Replace appUrl with the URL to your Mobile App.

var client = WindowsAzure.MobileServiceClient(appUrl);

Praca z tabelamiWork with tables

Aby uzyskać dostęp do danych lub je zaktualizować, utwórz odwołanie do tabeli zaplecza.To access or update data, create a reference to the backend table. Zastąp ciąg tableName nazwą tabeliReplace tableName with the name of your table

var table = client.getTable(tableName);

Po utworzeniu odwołania do tabeli możesz kontynuować pracę z tabelą:Once you have a table reference, you can work further with your table:

Instrukcje: odpytywanie odwołania do tabeliHow to: Query a table reference

Po utworzeniu odwołania do tabeli możesz przy jego użyciu wysłać zapytanie o dane na serwerze.Once you have a table reference, you can use it to query for data on the server. Zapytania są tworzone w języku przypominającym LINQ.Queries are made in a "LINQ-like" language. Aby zwrócić wszystkie dane z tabeli, użyj następującego kodu:To return all data from the table, use the following code:

/**
 * Process the results that are received by a call to table.read()
 *
 * @param {Object} results the results as a pseudo-array
 * @param {int} results.length the length of the results array
 * @param {Object} results[] the individual results
 */
function success(results) {
   var numItemsRead = results.length;

   for (var i = 0 ; i < results.length ; i++) {
       var row = results[i];
       // Each row is an object - the properties are the columns
   }
}

function failure(error) {
    throw new Error('Error loading data: ', error);
}

table
    .read()
    .then(success, failure);

Funkcja success jest wywoływana z użyciem wyników.The success function is called with the results. Nie umieszczaj w funkcji success pętli for (var i in results), ponieważ będzie ona przechodzić przez informacje zawarte w wynikach w czasie, gdy będą używane inne funkcje zapytań (takie jak .includeTotalCount()).Do not use for (var i in results) in the success function as that will iterate over information that is included in the results when other query functions (such as .includeTotalCount()) are used.

Aby dowiedzieć się więcej o składni zapytań, zobacz [dokumentację obiektu Query].For more information on the Query syntax, see the [Query object documentation].

Filtrowanie danych na serwerzeFiltering data on the server

W przypadku odwołania do tabeli możesz użyć klauzuli where:You can use a where clause on the table reference:

table
    .where({ userId: user.userId, complete: false })
    .read()
    .then(success, failure);

Ponadto możesz użyć funkcji filtrującej obiekt.You can also use a function that filters the object. W tym przykładzie zmienna this jest przypisana do obecnie filtrowanego obiektu.In this case, the this variable is assigned to the current object being filtered. Poniższy kod jest funkcjonalnie równoważny z poprzednim przykładem:The following code is functionally equivalent to the prior example:

function filterByUserId(currentUserId) {
    return this.userId === currentUserId && this.complete === false;
}

table
    .where(filterByUserId, user.userId)
    .read()
    .then(success, failure);

Stronicowanie danychPaging through data

Skorzystaj z metod take() i skip().Utilize the take() and skip() methods. Na przykład jeśli chcesz podzielić tabelę na rekordy składające się ze 100 wierszy:For example, if you wish to split the table into 100-row records:

var totalCount = 0, pages = 0;

// Step 1 - get the total number of records
table.includeTotalCount().take(0).read(function (results) {
    totalCount = results.totalCount;
    pages = Math.floor(totalCount/100) + 1;
    loadPage(0);
}, failure);

function loadPage(pageNum) {
    let skip = pageNum * 100;
    table.skip(skip).take(100).read(function (results) {
        for (var i = 0 ; i < results.length ; i++) {
            var row = results[i];
            // Process each row
        }
    }
}

Metoda .includeTotalCount() powoduje dodanie pola totalCount do obiektu results.The .includeTotalCount() method is used to add a totalCount field to the results object. Pole totalCount zostanie wypełnione łączną liczbą rekordów, które zostałyby zwrócone w przypadku braku stronicowania.The totalCount field is filled with the total number of records that would be returned if no paging is used.

Następnie możesz udostępnić listę stron za pomocą zmiennej pages i przycisków interfejsu użytkownika. Aby załadować nowe rekordy na każdą stronę, użyj metody loadPage().You can then use the pages variable and some UI buttons to provide a page list; use loadPage() to load the new records for each page. Zaimplementuj buforowanie, aby przyspieszyć dostęp do już załadowanych rekordów.Implement caching to speed access to records that have already been loaded.

Instrukcje: zwracanie posortowanych danychHow to: Return sorted data

Użyj metody zapytania .orderBy() lub .orderByDescending():Use the .orderBy() or .orderByDescending() query methods:

table
    .orderBy('name')
    .read()
    .then(success, failure);

Aby uzyskać informacje o obiekcie Query, zobacz [dokumentację obiektu Query].For more information on the Query object, see the [Query object documentation].

Instrukcje: wstawianie danychHow to: Insert data

Utwórz obiekt JavaScript z odpowiednimi danymi i asynchronicznie wywołaj metodę table.insert():Create a JavaScript object with the appropriate date and call table.insert() asynchronously:

var newItem = {
    name: 'My Name',
    signupDate: new Date()
};

table
    .insert(newItem)
    .done(function (insertedItem) {
        var id = insertedItem.id;
    }, failure);

Pomyślnie wstawiony element zostaje zwrócony z dodatkowymi polami, które są wymagane przez operacje synchronizacji.On successful insertion, the inserted item is returned with the additional fields that are required for sync operations. Zaktualizuj własną pamięć podręczną o te informacje na potrzeby późniejszych aktualizacji.Update your own cache with this information for later updates.

Zestaw Azure Mobile Apps Node.js Server SDK obsługuje schemat dynamiczny dla celów deweloperskich.The Azure Mobile Apps Node.js Server SDK supports dynamic schema for development purposes. Schemat dynamiczny umożliwia dodawanie kolumn do tabeli przez podanie ich w operacji wstawiania lub aktualizacji.Dynamic Schema allows you to add columns to the table by specifying them in an insert or update operation. Zalecamy wyłączenie schematu dynamicznego przed przeniesieniem aplikacji na etap produkcji.We recommend that you turn off dynamic schema before moving your application to production.

Instrukcje: modyfikowanie danychHow to: Modify data

Podobnie jak w przypadku metody .insert() należy utworzyć obiekt aktualizacji, a następnie wywołać metodę .update().Similar to the .insert() method, you should create an Update object and then call .update(). Obiekt aktualizacji musi zawierać identyfikator rekordu do zaktualizowania — identyfikator ten uzyskuje się podczas odczytu rekordu bądź wywoływania metody .insert().The update object must contain the ID of the record to be updated - the ID is obtained when reading the record or when calling .insert().

var updateItem = {
    id: '7163bc7a-70b2-4dde-98e9-8818969611bd',
    name: 'My New Name'
};

table
    .update(updateItem)
    .done(function (updatedItem) {
        // You can now update your cached copy
    }, failure);

Instrukcje: usuwanie danychHow to: Delete data

Aby usunąć rekord, wywołaj metodę .del().To delete a record, call the .del() method. Przekaż identyfikator w odwołaniu do obiektu:Pass the ID in an object reference:

table
    .del({ id: '7163bc7a-70b2-4dde-98e9-8818969611bd' })
    .done(function () {
        // Record is now deleted - update your cache
    }, failure);

Instrukcje: uwierzytelnianie użytkownikówHow to: Authenticate users

Usługa Azure App Service obsługuje uwierzytelnianie i autoryzowanie użytkowników aplikacji za pomocą różnych dostawców tożsamości zewnętrznych: Facebook, Google, Account Microsoft i Twitter.Azure App Service supports authenticating and authorizing app users using various external identity providers: Facebook, Google, Microsoft Account, and Twitter. Możesz ustawić uprawnienia w tabelach ograniczyć dostęp dla określonych operacji tylko do uwierzytelnionych użytkowników.You can set permissions on tables to restrict access for specific operations to only authenticated users. Tożsamość uwierzytelnionych użytkowników umożliwia również zaimplementować reguły autoryzacji w skryptów serwera.You can also use the identity of authenticated users to implement authorization rules in server scripts. Aby uzyskać więcej informacji, zobacz Rozpoczynanie pracy z uwierzytelnianiem samouczka.For more information, see the Get started with authentication tutorial.

Podczas uwierzytelniania w aplikacji Apache Cordova, następujące wtyczki Cordova muszą być dostępne:When using authentication in an Apache Cordova app, the following Cordova plugins must be available:

Obsługiwane są dwa przepływy uwierzytelniania: przepływ serwera i klienta przepływu.Two authentication flows are supported: a server flow and a client flow. Przepływ serwera zapewnia najprostszą proces uwierzytelniania opiera się na interfejs uwierzytelniania sieci web dostawcy.The server flow provides the simplest authentication experience, as it relies on the provider's web authentication interface. Przepływ klienta pozwala na lepszą integrację z funkcjami specyficznych dla urządzenia, takich jak logowanie jednokrotne ponieważ opiera się na zestawy SDK specyficzne dla urządzenia specyficzny dla dostawcy.The client flow allows for deeper integration with device-specific capabilities such as single-sign-on as it relies on provider-specific device-specific SDKs.

Instrukcje: uwierzytelnianie za pomocą dostawcy (przepływ serwera)How to: Authenticate with a provider (Server Flow)

Aby usługa Mobile Apps zarządzała procesem uwierzytelniania w aplikacji, musisz zarejestrować swoją aplikację u dostawcy tożsamości.To have Mobile Apps manage the authentication process in your app, you must register your app with your identity provider. Następnie w usłudze Azure App Service musisz skonfigurować identyfikator aplikacji oraz wpis tajny udostępniony przez dostawcę.Then in your Azure App Service, you need to configure the application ID and secret provided by your provider. Aby uzyskać więcej informacji, zapoznaj się z samouczkiem Dodawanie uwierzytelniania do aplikacji.For more information, see the tutorial Add authentication to your app.

Po zarejestrowaniu dostawcy tożsamości wywołaj metodę .login() z nazwą dostawcy.Once you have registered your identity provider, call the .login() method with the name of your provider. Na przykład logowania się za pomocą usługi Facebook, użyj następującego kodu:For example, to sign in with Facebook use the following code:

client.login("facebook").done(function (results) {
     alert("You are now signed in as: " + results.userId);
}, function (err) {
     alert("Error: " + err);
});

Prawidłowe wartości dla dostawcy to „aad”, „facebook”, „google”, „microsoftaccount” oraz „twitter”.The valid values for the provider are 'aad', 'facebook', 'google', 'microsoftaccount', and 'twitter'.

Uwaga

Obecnie uwierzytelnianie za pomocą konta Google nie działa za pośrednictwem przepływu serwera.Google Authentication does not currently work via Server Flow. Aby uwierzytelnić się za pomocą konta Google, musisz użyć metody przepływu klienta.To authenticate with Google, you must use a client-flow method.

W tym przypadku usługa Azure App Service zarządza przepływem uwierzytelniania OAuth 2.0.In this case, Azure App Service manages the OAuth 2.0 authentication flow. On wyświetla stronę logowania wybranego dostawcy i generuje token uwierzytelniania usługi App Service po pomyślnym zalogowaniu za pomocą dostawcy tożsamości.It displays the sign-in page of the selected provider and generates an App Service authentication token after successful sign-in with the identity provider. Po zakończeniu swojego działania funkcja logowania zwraca obiekt JSON, który udostępnia zarówno identyfikator użytkownika, jak i token uwierzytelniania usługi App Service, odpowiednio w polach userId oraz authenticationToken.The login function, when complete, returns a JSON object that exposes both the user ID and App Service authentication token in the userId and authenticationToken fields, respectively. Ten token można zapisać w pamięci podręcznej i ponownie go używać, dopóki nie wygaśnie.This token can be cached and reused until it expires.

Instrukcje: uwierzytelnianie za pomocą dostawcy (przepływ klienta)How to: Authenticate with a provider (Client Flow)

Aplikacja może również niezależnie skontaktować się z dostawcą tożsamości, a następnie udostępnić zwrócony token usłudze App Service na potrzeby uwierzytelniania.Your app can also independently contact the identity provider and then provide the returned token to your App Service for authentication. Ten przepływ klienta pozwala zapewnić środowisko logowania jednokrotnego dla użytkowników bądź pobrać dodatkowe dane użytkownika od dostawcy tożsamości.This client flow enables you to provide a single sign-in experience for users or to retrieve additional user data from the identity provider.

Podstawowy przykład uwierzytelniania przy użyciu sieci społecznościowychSocial Authentication basic example

W tym przykładzie na potrzeby uwierzytelniania użyto zestawu SDK klienta usługi Facebook:This example uses Facebook client SDK for authentication:

client.login(
     "facebook",
     {"access_token": token})
.done(function (results) {
     alert("You are now signed in as: " + results.userId);
}, function (err) {
     alert("Error: " + err);
});

W tym przykładzie założono, że token udostępniony przez zestaw SDK danego dostawcy jest przechowywany w zmiennej token.This example assumes that the token provided by the respective provider SDK is stored in the token variable.

Instrukcje: pozyskiwanie informacji o uwierzytelnionym użytkownikuHow to: Obtain information about the authenticated user

Dane uwierzytelniania można pobrać z punktu końcowego /.auth/me przy użyciu wywołania HTTP z dowolną biblioteką AJAX.The authentication information can be retrieved from the /.auth/me endpoint using an HTTP call with any AJAX library. Pamiętaj, aby dla nagłówka X-ZUMO-AUTH ustawić swój token uwierzytelniania.Ensure you set the X-ZUMO-AUTH header to your authentication token. Token uwierzytelniania jest przechowywany w elemencie client.currentUser.mobileServiceAuthenticationToken.The authentication token is stored in client.currentUser.mobileServiceAuthenticationToken. Na przykład aby użyć interfejsu API Fetch:For example, to use the fetch API:

var url = client.applicationUrl + '/.auth/me';
var headers = new Headers();
headers.append('X-ZUMO-AUTH', client.currentUser.mobileServiceAuthenticationToken);
fetch(url, { headers: headers })
    .then(function (data) {
        return data.json()
    }).then(function (user) {
        // The user object contains the claims for the authenticated user
    });

Interfejs Fetch jest dostępny jako pakiet npm. Ponadto można go pobrać w przeglądarce z witryny CDNJS.Fetch is available as an npm package or for browser download from CDNJS. Do pobrania informacji można również użyć biblioteki jQuery lub innego interfejsu API AJAX.You could also use jQuery or another AJAX API to fetch the information. Dane są odbierane w postaci obiektu JSON.Data is received as a JSON object.

Porady: Konfigurowanie usługi Mobile App Service dla adresy URL zewnętrznego przekierowania.How to: Configure your Mobile App Service for external redirect URLs.

Kilka typów aplikacji Apache Cordova używać możliwości sprzężenia zwrotnego do obsługi uwierzytelniania OAuth interfejsu użytkownika przepływów.Several types of Apache Cordova applications use a loopback capability to handle OAuth UI flows. Przepływy uwierzytelniania OAuth interfejsu użytkownika na hoście lokalnym powodować problemy, ponieważ usługa uwierzytelniania wie jedynie, sposób wykorzystywania usługi domyślnie.OAuth UI flows on localhost cause problems since the authentication service only knows how to utilize your service by default. Przykłady problematyczne przepływów uwierzytelniania OAuth interfejsu użytkownika:Examples of problematic OAuth UI flows include:

  • Ripple emulator.The Ripple emulator.
  • Ponowne ładowanie dzięki zastosowaniu środowiska Ionic na żywo.Live Reload with Ionic.
  • Działająca lokalnie zaplecza aplikacji mobilnychRunning the mobile backend locally
  • Uruchamianie zaplecza aplikacji mobilnych w innej usłudze Azure App Service niż jeden zapewniający uwierzytelnianie.Running the mobile backend in a different Azure App Service than the one providing authentication.

Wykonaj te instrukcje, aby dodać ustawienia lokalne do konfiguracji:Follow these instructions to add your local settings to the configuration:

  1. Zaloguj się do witryny Azure Portal.Log in to the Azure portal
  2. Wybierz wszystkie zasoby lub App Services kliknij nazwę swojej aplikacji mobilnej.Select All resources or App Services then click the name of your Mobile App.
  3. Kliknij przycisk narzędziaClick Tools
  4. Kliknij przycisk Eksploratora zasobów w OBSERVE menu, następnie kliknij przycisk Przejdź.Click Resource explorer in the OBSERVE menu, then click Go. Zostanie otwarte nowe okno lub kartę.A new window or tab opens.
  5. Rozwiń config, authsettings węzłów do lokacji w obszarze nawigacji po lewej stronie.Expand the config, authsettings nodes for your site in the left-hand navigation.
  6. Kliknij przycisk edycjiClick Edit
  7. Zwróć uwagę na element "allowedExternalRedirectUrls".Look for the "allowedExternalRedirectUrls" element. Może zostać ustawiony na wartość null lub tablicę wartości.It may be set to null or an array of values. Zmień wartość na następującą wartość:Change the value to the following value:

      "allowedExternalRedirectUrls": [
          "http://localhost:3000",
          "https://localhost:3000"
      ],
    

    Zastąp adresy URL przy użyciu adresów URL usługi.Replace the URLs with the URLs of your service. Przykłady obejmują "http://localhost:3000" (dla środowiska Node.js przykładowej usługi), lub "http://localhost:4400" (dla usługi Ripple).Examples include "http://localhost:3000" (for the Node.js sample service), or "http://localhost:4400" (for the Ripple service). Jednak te adresy URL są przykłady — w sytuacji, w tym dla usług wymienionych w przykładach, mogą być inne.However, these URLs are examples - your situation, including for the services mentioned in the examples, may be different.

  8. Kliknij przycisk odczytu/zapisu przycisk w prawym górnym rogu ekranu.Click the Read/Write button in the top-right corner of the screen.
  9. Kliknij zielony umieścić przycisku.Click the green PUT button.

Ustawienia są zapisywane w tym momencie.The settings are saved at this point. Nie zamykaj okna przeglądarki do czasu zakończenia ustawienia zapisywania.Do not close the browser window until the settings have finished saving. Te adresy URL sprzężenia zwrotnego można również dodać ustawienia mechanizmu CORS usługi App Service:Also add these loopback URLs to the CORS settings for your App Service:

  1. Zaloguj się do witryny Azure Portal.Log in to the Azure portal
  2. Wybierz wszystkie zasoby lub App Services kliknij nazwę swojej aplikacji mobilnej.Select All resources or App Services then click the name of your Mobile App.
  3. Automatycznie zostanie otwarty blok ustawienia.The Settings blade opens automatically. Jeśli nie kliknij przycisk wszystkie ustawienia.If it doesn't, click All Settings.
  4. Kliknij przycisk CORS menu interfejsu API.Click CORS under the API menu.
  5. Wprowadź adres URL, który chcesz dodać w polu pod warunkiem i naciśnij klawisz Enter.Enter the URL that you wish to add in the box provided and press Enter.
  6. Wprowadź dodatkowe adresy URL, zgodnie z potrzebami.Enter additional URLs as needed.
  7. Kliknij polecenie Zapisz, aby zapisać ustawienia.Click Save to save the settings.

Trwa około 10 – 15 sekund nowe ustawienia zaczęły obowiązywać.It takes approximately 10-15 seconds for the new settings to take effect.

Porady: zarejestrować odbieranie powiadomień wypychanychHow to: Register for push notifications

Zainstaluj phonegap wtyczka push do obsługi powiadomień wypychanych.Install the phonegap-plugin-push to handle push notifications. Ta wtyczka można łatwo dodać przy użyciu cordova plugin add polecenia w wierszu polecenia lub za pomocą Instalatora wtyczki usługi Git w programie Visual Studio.This plugin can be easily added using the cordova plugin add command on the command line, or via the Git plugin installer within Visual Studio. Poniższy kod w swojej aplikacji Apache Cordova wykonywana jest rejestracja urządzenia dla powiadomień wypychanych:The following code in your Apache Cordova app registers your device for push notifications:

var pushOptions = {
    android: {
        senderId: '<from-gcm-console>'
    },
    ios: {
        alert: true,
        badge: true,
        sound: true
    },
    windows: {
    }
};
pushHandler = PushNotification.init(pushOptions);

pushHandler.on('registration', function (data) {
    registrationId = data.registrationId;
    // For cross-platform, you can use the device plugin to determine the device
    // Best is to use device.platform
    var name = 'gcm'; // For android - default
    if (device.platform.toLowerCase() === 'ios')
        name = 'apns';
    if (device.platform.toLowerCase().substring(0, 3) === 'win')
        name = 'wns';
    client.push.register(name, registrationId);
});

pushHandler.on('notification', function (data) {
    // data is an object and is whatever is sent by the PNS - check the format
    // for your particular PNS
});

pushHandler.on('error', function (error) {
    // Handle errors
});

Zestaw SDK usługi Notification Hubs umożliwia wysyłanie powiadomień wypychanych z serwera.Use the Notification Hubs SDK to send push notifications from the server. Nigdy nie wysyłaj powiadomienia wypychane bezpośrednio od klientów.Never send push notifications directly from clients. Ten sposób może służyć do wyzwolenia "odmowa usługi" przeciwko usługi Notification Hubs lub system powiadomień platformy.Doing so could be used to trigger a denial of service attack against Notification Hubs or the PNS. System powiadomień platformy można zablokować ruch sieciowy w wyniku takich ataków.The PNS could ban your traffic as a result of such attacks.

Więcej informacjiMore information

Można znaleźć szczegółowe szczegółów interfejsu API w naszym dokumentacji interfejsu API.You can find detailed API details in our API documentation.