Reduzir assinaturas ausentes e alterar notificaçõesReduce missing subscriptions and change notifications

Os aplicativos que estão se inscrevendo para alterar as notificações de recursos podem ter suas assinaturas removidas e perder algumas notificações de alteração.Apps subscribing to change notifications might get their subscriptions removed and miss some change notifications. Os aplicativos devem implementar a lógica para detectar e recuperar da perda e retomar o fluxo de notificação de alteração contínua.Apps should implement logic to detect and recover from the loss, and resume a continuous change notification flow.

Determinados eventos podem fazer que a assinatura seja removida.Certain events can cause a subscription to be removed. Esses eventos incluem:These events include:

  • A senha do usuário foi redefinidaUser's password has been reset
  • Dispositivo do usuário está fora de conformidadeUser's device is out of compliance
  • Conta do usuário foi revogadaUser's account has been revoked

Quando ocorre um evento, o Microsoft Graph envia uma notificação de ciclo de vida especial subscriptionRemoved.When such an event happens, Microsoft Graph sends a special lifecycle notification, subscriptionRemoved.

O Microsoft Graph também envia outra notificação do ciclo de vida, missed, caso não seja possível entregar uma notificação de alteração a um aplicativo.Microsoft Graph also sends another lifecycle notification, missed, if a change notification cannot be delivered to an app.

Uma assinatura de um aplicativo para modificar as notificações deve ouvir os sinais subscriptionRemoved e missed e fazer o seguinte:An app subscribing to change notifications should listen to the subscriptionRemoved and missed signals and do the following:

  • Após receber uma notificação de subscriptionRemoved ciclo de vida, o aplicativo deve recriar a assinatura para manter um fluxo contínuo.Upon receiving a subscriptionRemoved lifecycle notification, the app should recreate the subscription in order to maintain a continuous flow.
  • Ao receber uma notificação de missed ciclo de vida, o aplicativo deve ressincronizar os dados de recurso usando o Microsoft Graph.On receiving a missed lifecycle notification, the app should resynchronize resource data using Microsoft Graph.

Para receber notificações de ciclo de vida, você pode usar o ponto de extremidade existente notificationUrl que já recebe notificações de alteração, ou você pode registrar um lifecycleNotificationUrl separado para receber subscriptionRemoved e missed notificações de ciclo de vida em um ponto de extremidade separado.To receive lifecycle notifications, you can use the existing notificationUrl endpoint that already receives change notifications, or you can register a separate lifecycleNotificationUrl to receive subscriptionRemoved and missed lifecycle notifications in a separate endpoint.

As notificações de ciclo de vida têm suporte para as assinaturas criadas nesses tipos de recurso:Lifecycle notifications are supported for subscriptions created on these resource types:

Para outros tipos de recurso, você ainda poderá fornecer um lifecycleNotificationUrl ao criar a assinatura e o aplicativo receberá as notificações do ciclo de vida sempre que o recurso implementá-la.For other resource types, you may still provide a lifecycleNotificationUrl when creating the subscription and your application will receive lifecycle notifications whenever the resource implements it.

Criar uma assinaturaCreating a subscription

Ao criar uma assinatura, você deve especificar um ponto de extremidade de notificação separado usando a propriedade lifecycleNotificationUrl.When creating a subscription, you must specify a separate notification endpoint using the lifecycleNotificationUrl property. Se você especificar o ponto de extremidade, todos os tipos de atuais e futuros de notificações de ciclo de vida serão entregues lá.If you specify the endpoint, all current and future types of lifecycle notifications will be delivered there. Caso contrário, as notificações do ciclo de vida subscriptionRemoved e missed não serão entregues.Otherwise, subscriptionRemoved and missed lifecycle notifications will not be delivered. Esse ponto de extremidade pode ser o mesmo que a notificationUrl.This endpoint can be the same as the notificationUrl.

Exemplo de solicitação de assinaturaSubscription request example

POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
  "changeType": "created,updated",
  "notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
  "lifecycleNotificationUrl": "https://webhook.azurewebsites.net/api/lifecycleNotifications",
  "resource": "/users/{id}/messages",
  "expirationDateTime": "2020-03-20T11:00:00.0000000Z",
  "clientState": "<secretClientState>"
}

Importante

Use o mesmo nome de host (FQDN) para ambas as notificações URLs.Use the same hostname (FQDN) for both notifications URLs.

É necessário validar ambos os pontos de extremidade conforme descrito em Gerenciar assinaturas.You need to validate both endpoints, as described in Managing subscriptions. Se você quiser usar a mesma URL para os dois pontos de extremidade, você receberá e responderá a duas solicitações de validação.If you choose to use the same URL for both endpoints, you will receive and respond to two validation requests.

Observação: Não é possível atualizar (PATCH) as assinaturas existentes para adicionar a propriedade lifecycleNotificationUrl.Note: You cannot update (PATCH) the existing subscriptions to add the lifecycleNotificationUrl property. Você deve remover essas assinaturas existentes, criar novas assinaturas e especificar a propriedade lifecycleNotificationUrl.You should remove such existing subscriptions, create new subscriptions, and specify the lifecycleNotificationUrl property. As assinaturas existentes sem uma propriedade lifecycleNotificationUrl não receberão as subscriptionRemoved e missed notificações.Existing subscriptions without a lifecycleNotificationUrl property will not receive the subscriptionRemoved and missed notifications.

Responder a notificações subscriptionRemovedResponding to subscriptionRemoved notifications

A notificação de subscriptionRemoved ciclo de vida informa que uma assinatura foi removida e deve ser recriada, se você quiser continuar a receber as notificações de alteração.The subscriptionRemoved lifecycle notification informs you that a subscription has been removed and should be recreated, if you want to continue receiving change notifications.

Você pode criar uma assinatura de longa duração (três dias) e as notificações de alteração começarão a fluir para o notificationUrl.You can create a long-lived subscription (3 days), and change notifications will start flowing to the notificationUrl. No entanto, as condições de acesso aos dados de recursos podem mudar ao longo do tempo.However, the conditions of access to the resource data might change over time. Por exemplo, pode ocorrer um evento no serviço que exija que o aplicativo autentique novamente o usuário.For example, an event in the service might occur that requires the app to re-authenticate the user. Nesse caso, o fluxo é:In such a case, the flow is as follows:

  1. O serviço detecta que uma assinatura precisa ser removida do Microsoft Graph.The service detects that a subscription needs to be removed from Microsoft Graph.

    Não há cadência definida para esses eventos.There is no set cadence for these events. Eles podem ocorrer com frequência para alguns recursos e quase nunca para outros.They might occur frequently for some resources, and almost never for others.

  2. O Microsoft Graph envia uma notificação subscriptionRemoved de ciclo de vida para lifecycleNotificationUrl (se especificado).Microsoft Graph sends a subscriptionRemoved lifecycle notification to the lifecycleNotificationUrl (if specified).

  3. Você pode responder a essa notificação do ciclo de vida criando uma nova assinatura para o mesmo recurso.You can respond to this lifecycle notification by creating a new subscription for the same resource. Para fazer isso, é necessário apresentar um token de acesso válido; em alguns casos, isso significa que o aplicativo precisa reautenticar o usuário para obter um novo token de acesso válido.To do this, you need to present a valid access token; in some cases, this means the app needs to re-authenticate the user to obtain a new valid access token.

  4. Se você criar uma nova assinatura com êxito, as notificações de alteração de recurso começarão a fluir novamente.If you successfully create a new subscription, change notifications will start flowing again. No entanto, se houver falha (por exemplo, o aplicativo não pode obter um token de acesso válido), as notificações de alteração não serão enviadas.However, if you fail (for example, the app can't obtain a valid access token), change notifications will not be sent.

  5. Depois de criar uma nova assinatura, você pode sincronizar os dados de recursos para identificar alterações ausentes.After creating the new subscription, you can sync the resource data to identify any missing changes.

exemplo de notificação subscriptionRemovedsubscriptionRemoved notification example

{
  "value": [
    {
      "subscriptionId":"<subscription_guid>",
      "subscriptionExpirationDateTime":"2019-03-20T11:00:00.0000000Z",
      "tenantId": "<tenant_guid>",
      "clientState":"<secretClientState>",
      "lifecycleEvent": "subscriptionRemoved"
    }
  ]
}

Alguns aspectos a serem observados neste tipo de notificação:A few things to note about this type of notification:

  • O "lifecycleEvent": "subscriptionRemoved" campo designa essa notificação como relacionada à remoção de assinatura.The "lifecycleEvent": "subscriptionRemoved" field designates this notification as related to subscription removal. Outros tipos de notificações de ciclo de vida também são possíveis, e novos serão disponibilizados no futuro.Other types of lifecycle notifications are also possible, and new ones will be introduced in the future.
  • A notificação de ciclo de vida não contém informações sobre um recurso específico, porque ela não está relacionada a uma alteração de recurso, mas a alteração de estado da assinatura.The lifecycle notification does not contain any information about a specific resource, because it is not related to a resource change, but to the subscription state change.
  • Assim como notificações de alteração, notificações de ciclo de vida devem ser agrupadas (na matriz valor ), cada com uma possivelmente valores diferentes lifecycleEvent.Similar to change notifications, lifecycle notifications can be batched together (in the value array), each with a possibly different lifecycleEvent value. Processe cada notificação de ciclo de vida no lote adequadamente.Process each lifecycle notification in the batch accordingly.

Observação: para obter uma descrição completa dos dados enviados quando as notificações de alteração forem entregues, confira changeNotificationCollection.Note: for a full description of the data sent when change notifications are delivered, see changeNotificationCollection.

Ações a serem executadasActions to take

  1. Confirme o recebimento da notificação do ciclo de vida respondendo à chamada do POST com 202 - Accepted.Acknowledge the receipt of the lifecycle notification, by responding to the POST call with 202 - Accepted.
  2. Validar a autenticidade da notificação do ciclo de vida.Validate the authenticity of the lifecycle notification.
  3. Certifique-se de que o aplicativo tenha um token de acesso válido para a próxima etapa.Ensure that the app has a valid access token to take the next step.

Observação : se você estiver usando uma das bibliotecas de autenticação, elas farão isso para você ao reutilizar um token de cache válido ou obtendo um novo token, inclusive pedindo ao usuário para fazer logon novamente (com uma nova senha).Note: If you're using one of the authentication libraries, they will handle this for you by either reusing a valid cached token, or obtaining a new token, including asking the user to sign in again (with a new password). Observe que a obtenção de um novo token pode falhar, pois as condições de acesso podem ser alteradas e o chamador não poderá mais acessar os dados de recursos. Note that obtaining a new token might fail, because the conditions of access might have changed, and the caller might no longer be allowed access to the resource data.

  1. Criar uma nova assinatura usando o processo padrão descrito aqui.Create a new subscription using the standard process described here.

Observação: essa ação pode falhar, porque as verificações de autorização realizadas pelo sistema podem recusar o aplicativo ou o acesso do usuário ao recurso.Note: This action might fail, because the authorization checks performed by the system might deny the app or the user access to the resource. Pode ser necessário que o aplicativo obtenha um novo token de acesso do usuário para reautorizar uma assinatura com êxito.It might be necessary for the app to obtain a new access token from the user to successfully reauthorize a subscription. Você pode tentar essa ações mais tarde, a qualquer momento; por exemplo, quando as condições de acesso mudarem.You can retry these actions later, at any time; for example, when the conditions of access have changed. Quaisquer alterações de recursos no período de quando a notificação de ciclo de vida foi enviada até quando o aplicativo recriou a assinatura com êxito, serão perdidas.Any resource changes in the time period from when the lifecycle notification was sent, to when the app recreates the subscription successfully, will be lost. O aplicativo precisará buscar essas alterações sozinho.The app will need to fetch those changes on its own.

  1. Depois de criar a nova assinatura, sincronizar todos os dados de recurso ausentes desde a última vez que você recebeu uma notificação para esse recurso, Por exemplo: GET https://graph.microsoft.com/v1.0/users/{id}/messages?$filter=createdDateTime+ge+{LastTimeNotificationWasReceived}After creating the new subscription, sync any missing resource data from the last known time you received a change notification for this resource; for example: GET https://graph.microsoft.com/v1.0/users/{id}/messages?$filter=createdDateTime+ge+{LastTimeNotificationWasReceived}

Responder notificações perdidasResponding to missed notifications

Esses sinais informam que algumas notificações podem não ter sido entregues.These signals inform you that some change notifications might not have been delivered. Você deve ignorar ou lidar com esses sinais são.You should decide if you ignore or handle these signals.

Exemplo de notificaçãoNotification example

{
  "value": [
    {
      "subscriptionId":"<subscription_guid>",
      "subscriptionExpirationDateTime":"2019-03-20T11:00:00.0000000Z",
      "tenantId": "<tenant_guid>",
      "clientState":"<secretClientState>",
      "lifecycleEvent": "missed"
    }
  ]
}

Alguns aspectos a serem observados neste tipo de notificação:A few things to note about this type of notification:

  • O "lifecycleEvent": "missed" campo designa isso como um sinal de notificações perdidas.The "lifecycleEvent": "missed" field designates this as a signal about missed change notifications. Outros tipos de notificações de ciclo de vida também são possíveis, e novos serão disponibilizados no futuro.Other types of lifecycle notifications are also possible, and new ones will be introduced in the future.
  • A notificação de ciclo de vida não contém informações sobre um recurso específico, porque ela não está relacionada a uma alteração de recurso, mas a alteração de estado da assinatura.The lifecycle notification does not contain any information about a specific resource, because it is not related to a resource change, but to the subscription state change.
  • Assim como notificações de alteração, notificações de ciclo de vida podem ser agrupadas (na matriz valor ), cada com uma possivelmente valores diferentes lifecycleEvent.Similar to change notifications, lifecycle notifications might be batched together (in the value array), each with a possibly different lifecycleEvent value. Processe cada notificação de ciclo de vida no lote adequadamente.Process each lifecycle notification in the batch accordingly.

Observação: para obter uma descrição completa dos dados enviados quando as notificações de alteração forem entregues, confira changeNotificationCollection.Note: for a full description of the data sent when change notifications are delivered, see changeNotificationCollection.

Ações a serem executadasActions to take

  1. Confirme o recebimento da notificação do ciclo de vida respondendo à chamada do POST com 202 - Accepted.Acknowledge the receipt of the lifecycle notification, by responding to the POST call with 202 - Accepted.
    • Caso você ignore estes sinais, não faça nada.If you ignore these signals, do nothing else. Caso contrário:Otherwise:
  2. Validar a autenticidade da notificação do ciclo de vida.Validate the authenticity of the lifecycle notification.
  3. Executaremos ressincronização de dados completa para identificar as alterações que não foram entregues como notificações.Perform a full data resync of the resource to identify the changes that were not delivered as notifications.

Respondendo a notificações reauthorizationRequiredResponding to reauthorizationRequired notifications

Quando receber uma notificação reauthorizationRequired de ciclo de vida, você deve reautorizar a inscrição para manter o fluxo de dados.When you receive a reauthorizationRequired lifecycle notification, you must reauthorize the subscription to maintain the data flow.

Você pode criar uma inscrição de longa duração (três dias) e as notificações de alteração começarão a fluir para o notificationUrl.You can create a long-lived subscription (3 days), which enables change notifications to flow to the notificationUrl. Caso as condições de acesso tenham sido alteradas desde a criação da assinatura, o Microsoft Graph pode exigir que você recrie a assinatura para provar que ainda tem acesso aos dados do recurso.If the conditions of access have changed since the subscription was created, Microsoft Graph may require that you reauthorize the subscription to prove that you still have access to resource data. A seguir estão exemplos de alterações que afetam o acesso aos dados:The following are examples of changes that affect your access to data:

  • Um administrador de locatários pode revogar as permissões do seu aplicativo para ler um recurso.A tenant administrator may revoke your app's permissions to read a resource.
  • Em um cenário interativo, o usuário que fornece o token de autenticação ao seu aplicativo pode estar sujeito a políticas dinâmicas com base em vários fatores, como o local, o estado do dispositivo ou a avaliação de risco.In an interactive scenario, the user who provides the authentication token to your app may be subject to dynamic policies based on various factors, such as their location, device state, or risk assessment. Por exemplo, se o usuário alterar o seu local físico, pode ser que ele não tenha mais permissão para acessar os dados e seu aplicativo não conseguirá autorizar novamente a assinatura.For example, if the user changes their physical location, the user may no longer be allowed to access the data, and your app will not be able to reauthorize the subscription. Para saber mais sobre políticas dinâmicas que controlam o acesso, confira Políticas de acesso condicional do Azure AD.For more information about dynamic policies that control access, see Azure AD conditional access policies.

As etapas a seguir representam o fluxo de um desafio de autorização para uma assinatura ativa:The following steps represent the flow of an authorization challenge for an active subscription:

  1. O Microsoft Graph exige que uma assinatura seja autorizada novamente.Microsoft Graph requires a subscription to be reauthorized.

    Os motivos para isso podem variar de recurso para recurso e podem mudar com o tempo.The reasons for this may vary from resource to resource, and may change over time. Você deve responder a um evento de nova autorização, não importa o que o causou.You must respond to a reauthorization event no matter what caused it.

  2. O Microsoft Graph envia uma notificação de desafio de autorização para lifecycleNotificationUrl.Microsoft Graph sends an authorization challenge notification to the lifecycleNotificationUrl.

    Observe que o fluxo de notificações de alterações pode continuar por um tempo, dando a você tempo extra para responder.Note that the flow of change notifications may continue for a while, giving you extra time to respond. No entanto, eventualmente a alteração na entrega de notificação fará uma pausa até você executar a ação necessária.However, eventually change notification delivery pauses, until you take the required action.

  3. Responda a esta notificação do ciclo de vida de duas maneiras:Respond to this lifecycle notification in one of two ways:

    • Autorizar a assinatura novamente.Reauthorize the subscription. Isso não estende a data de vencimento da assinatura.This does not extend the expiry date of the subscription.
    • Renove a assinatura.Renew the subscription. Isso autoriza novamente e estende a data de vencimento.This both reauthorizes and extends the expiry date.

    Observação: as duas ações exigem a apresentação de um token de autenticação válido, semelhante a criar uma nova assinatura ou renova uma assinatura antes da sua expiração.Note: Both actions require you to present a valid authentication token, similar to creating a new subscription or renewing a subscription before its expiry.

  4. Se você autorizar novamente ou renovar com êxito a inscrição, as notificações de alteração continuarão.If you successfully reauthorize or renew the subscription, change notifications continue. Caso contrário, as notificações de alteração permanecerão pausadas.Otherwise, change notifications remain paused.

exemplo de notificação reauthorizationRequiredreauthorizationRequired notification example

{
  "value": [
    {
      "lifecycleEvent": "reauthorizationRequired",
      "subscriptionId": "e3898f08-5cd0-4a6a-80fc-6addbfb73b7b",
      "subscriptionExpirationDateTime": "2019-09-18T00:52:45.9696658+00:00",
      "clientState": "{secret client state}",
      "tenantId": "84bd8158-6d4d-4958-8b9f-9d6445542f95"
    }
  ]
}

Alguns aspectos a serem observados neste tipo de notificação:A few things to note about this type of notification:

  • O campo "lifecycleEvent": "reauthorizationRequired" identifica essa notificação como um desafio de autorização.The "lifecycleEvent": "reauthorizationRequired" field designates this notification as an authorization challenge. Outros tipos de notificações de ciclo de vida também são possíveis, e novos serão disponibilizados no futuro.Other types of lifecycle notifications are also possible, and new ones will be introduced in the future.
  • A notificação de ciclo de vida não contém informações sobre um recurso específico, porque ela não está relacionada a uma alteração de recurso, mas a alteração de estado da assinatura.The lifecycle notification does not contain any information about a specific resource, because it is not related to a resource change, but to the subscription state change.
  • Semelhante às notificações de alteração, você pode agrupar as notificações do ciclo de vida em conjunto (na coleção de valores ), cada uma com um valor possivelmente diferente do lifecycleEvent.Similar to change notifications, you can batch lifecycle notifications together (in the value collection), each with a possibly different lifecycleEvent value. Processe cada notificação de ciclo de vida no lote adequadamente.Process each lifecycle notification in the batch accordingly.

Observação: para obter uma descrição completa dos dados enviados quando as notificações de alteração forem entregues, confira changeNotificationCollection.Note: for a full description of the data sent when change notifications are delivered, see changeNotificationCollection.

Ações a serem executadasActions to take

  1. Confirme o recebimento da notificação do ciclo de vida respondendo à chamada do POST com 202 - Accepted.Acknowledge the receipt of the lifecycle notification, by responding to the POST call with 202 - Accepted.
  2. Validar a autenticidade da notificação do ciclo de vida.Validate the authenticity of the lifecycle notification.
  3. Certifique-se de que o aplicativo tenha um token de acesso válido para a próxima etapa.Ensure that the app has a valid access token to take the next step.

Observação : se você estiver usando uma das bibliotecas de autenticação, elas farão isso para você ao reutilizar um token de cache válido ou obtendo um novo token, inclusive pedindo ao usuário para fazer logon novamente (com uma nova senha).Note: If you're using one of the authentication libraries, they will handle this for you by either reusing a valid cached token, or obtaining a new token, including asking the user to sign in again (with a new password). Observe que a obtenção de um novo token pode falhar, pois as condições de acesso podem ser alteradas e o chamador não poderá mais acessar os dados de recursos. Note that obtaining a new token might fail, because the conditions of access might have changed, and the caller might no longer be allowed access to the resource data.

  1. Chamar uma das duas APIs a seguir.Call either of the following two APIs. Se a chamada da API for bem-sucedida, o fluxo de notificação de mudança será retomado.If the API call succeeds, the change notification flow resumes.

    • Chame a ação /reauthorize para autorizar novamente a assinatura sem estender a data de vencimento:Call the /reauthorize action to reauthorize the subscription without extending its expiration date:

      POST  https://graph.microsoft.com/beta/subscriptions/{id}/reauthorize
      Content-type: application/json
      
    • Execute uma ação de renovação regular para autorizar novamente e renovar a assinatura ao mesmo tempo:Perform a regular renew action to reauthorize and renew the subscription at the same time:

      PATCH https://graph.microsoft.com/beta/subscriptions/{id}
      Content-Type: application/json
      
      {
         "expirationDateTime": "2019-09-21T11:00:00.0000000Z"
      }
      

      A renovação pode falhar, porque as verificações de autorização realizadas pelo sistema podem recusar o aplicativo ou o acesso do usuário ao recurso.Renewing may fail, because the authorization checks performed by the system may deny the app or the user access to the resource. Pode ser necessário que o aplicativo obtenha um novo token de acesso do usuário para reautorizar com êxito uma assinatura.It may be necessary for the app to obtain a new access token from the user to successfully reauthorize a subscription.

      Você pode tentar essa ações mais tarde, a qualquer momento e obter êxito se as condições de acesso mudarem.You may retry these actions later, at any time, and succeed if the conditions of access change. As notificações sobre as alterações de recursos que acontecem entre o tempo de envio da notificação do ciclo de vida e o momento em que o aplicativo cria a assinatura novamente, seriam perdidas.Any notifications about resource changes that happen between the time the lifecycle notification was sent and the time when the app successfully creates the subscription again, would be lost. Nesses casos, o aplicativo deve buscar essas mudanças separadamente.In such cases, the app should separately fetch those changes.

Informações adicionaisAdditional information

As informações a seguir podem ajudá-lo a entender os desafios de autorização:The following information can help you understand authorization challenges:

  • Os desafios de autorização não substituem a necessidade de renova uma assinatura de alteração de recursos antes de expirar.Authorization challenges do not replace the need to renew a resource change subscription before it expires.

    Embora você possa optar por renovar uma assinatura quando recebe um desafio de autorização, o Microsoft Graph pode não desafiar todas as suas assinaturas.While you can choose to renew a subscription when you receive an authorization challenge, Microsoft Graph may not challenge all of your subscriptions. Por exemplo, uma assinatura que não possui nenhuma atividade e não possui notificações de alterações com entrega pendente pode não sinalizar nenhum desafio para uma nova autorização do seu aplicativo.For example, a subscription that does not have any activity and has no change notifications pending delivery may not signal any reauthorization challenges to your app. Certifique-se de renovar assinaturas antes de expirarem.Make sure to renew subscriptions before they expire.

  • A frequência dos desafios de autorização está sujeita a mudanças.The frequency of authorization challenges is subject to change.

    Não faça suposições sobre a frequência dos desafios de autorização.Do not make assumptions about the frequency of authorization challenges. Essas notificações do ciclo de vida informam quando você deve executar as ações, evitando que você precise rastrear quais assinaturas requerem uma nova autorização.These lifecycle notifications tell you when to take actions, saving you from having to track which subscriptions require reauthorization. Esteja pronto para lidar com os desafios de autorização de vez em quando, para todas as assinaturas até raramente para apenas algumas das suas assinaturas.Be ready to handle authorization challenges from once every few minutes for every subscription to rarely for only some of your subscriptions.

À prova de futuro o código lidar com as notificações de ciclo de vidaFuture-proof the code handling lifecycle notifications

No futuro, o Microsoft Graph adicionará mais tipos de notificações de ciclo de vida da assinatura.In the future, Microsoft Graph will add more types of subscription lifecycle notifications. Elas serão publicadas no mesmo ponto de extremidade: lifecycleNotificationUrl , mas terão um valor diferente sob lifecycleEvent e podem conter um esquema e propriedades ligeiramente diferentes, específicas para o cenário para o qual serão enviadas.They will be posted to the same endpoint: lifecycleNotificationUrl , but they will have a different value under lifecycleEvent and might contain a slightly different schema and properties, specific to the scenario for which they will be issued.

Você deve implementar seu código de uma maneira mais segura, para que ele não se pare quando o Microsoft Graph apresentar novos tipos de notificações do ciclo de vida.You should implement your code in a future-proof way, so it does not break when Microsoft Graph introduces new types of lifecycle notifications. Recomendamos as seguintes abordagens:We recommend the following approach:

  1. Identifique explicitamente cada notificação do ciclo de vida como um evento que você oferece suporte, usando a propriedade lifecycleEvent.Explicitly identify each lifecycle notification as an event that you support, using the lifecycleEvent property. Por exemplo, procure a "lifecycleEvent": "subscriptionRemoved" propriedade para identificar um evento específico e tratá-lo.For example, look for the "lifecycleEvent": "subscriptionRemoved" property to identify a specific event, and handle it.

  2. Assista aos comunicados de notificações do ciclo de vida para os novos cenários.Watch for announcements of lifecycle notifications for new scenarios. Pode haver mais tipos de notificações de ciclo de vida no futuro.There might be more types of lifecycle notifications in the future.

  3. Em seu aplicativo ignore todos os eventos de ciclo de vida que o aplicativo não reconhece e registre-os para obter conhecimento.In your app, ignore any lifecycle notification that the app does not recognize, and log them to gain awareness.

  4. Se desejar, procure a documentação relacionada às novas notificações de ciclo de vida e implemente o suporte para elas conforme necessário.At your discretion, look up the related documentation for new lifecycle notifications and implement support for them as appropriate.

Confira tambémSee also