Reducir la falta de suscripciones y notificaciones de cambio para recursos de Outlook (versión preliminar)Reduce missing subscriptions and change notifications for Outlook resources (preview)

Las aplicaciones suscritas a notificaciones de cambio para recursos de Outlook pueden perder sus suscripciones o no recibir algunas notificaciones de cambio.Apps subscribing to change notifications for Outlook resources might get their subscriptions removed and miss some change notifications. Deben implementar lógica para detectar y recuperarse de la pérdida y reanudar un flujo continuo de notificaciones de cambio.Apps should implement logic to detect and recover from the loss, and resume a continuous change notification flow.

Algunos eventos de Outlook pueden provocar que una suscripción se quite.Certain events in Outlook can cause a subscription to be removed. Estos eventos incluyen:These events include:

  • Se ha restablecido la contraseña de usuarioUser's password has been reset
  • Dispositivo del usuario fuera del cumplimientoUser's device is out of compliance
  • Cuenta de usuario revocadaUser's account has been revoked

Cuando se produce este evento, Outlook envía una notificación de ciclo de vida especial, subscriptionRemoved.When such an event happens, Outlook sends a special lifecycle notification, subscriptionRemoved.

Outlook también envía otra notificación de ciclo de vida, missed, si no se puede entregar una notificación de cambio a una aplicación.Outlook also sends another lifecycle notification, missed, if a change notification cannot be delivered to an app.

Las aplicaciones suscritas a notificaciones de cambio para recursos de Outlook, como mensaje y evento, deben atender las señales de subscriptionRemoved y missed, y hacer lo siguiente:An app subscribing to change notifications for Outlook resources, such as message and event, should listen to the subscriptionRemoved and missed signals and do the following:

  • Al recibir una notificación de ciclo de vida de subscriptionRemoved, la aplicación debe volver a crear la suscripción para mantener un flujo continuo.Upon receiving a subscriptionRemoved lifecycle notification, the app should recreate the subscription in order to maintain a continuous flow.
  • Al recibir una notificación de ciclo de vida de missed, la aplicación debe volver a sincronizar los datos de recursos con Microsoft Graph.On receiving a missed lifecycle notification, the app should resynchronize resource data using Microsoft Graph.

Para recibir notificaciones de ciclo de vida, puede usar el punto de conexión notificationUrl existente que ya recibe notificaciones de cambio, o puede registrar un lifecycleNotificationUrl independiente para recibir notificaciones subscriptionRemoved y missed del ciclo de vida en un punto de conexión independiente.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.

Crear una suscripciónCreating a subscription

Al crear una suscripción, debe especificar un punto de conexión de notificaciones independientes utilizando la propiedad lifecycleNotificationUrl.When creating a subscription, you must specify a separate notification endpoint using the lifecycleNotificationUrl property. Si especifica el punto de conexión, todos los tipos actuales y futuros de notificaciones de ciclo de vida se entregarán allí.If you specify the endpoint, all current and future types of lifecycle notifications will be delivered there. De lo contrario, no se entregarán las notificaciones subscriptionRemoved y missed del ciclo de vida.Otherwise, subscriptionRemoved and missed lifecycle notifications will not be delivered.

Nota: la propiedad lifecycleNotificationUrl solo se puede establecer o leer con la versión beta de las API de Microsoft Graph.Note: The lifecycleNotificationUrl property can only be set or read using Microsoft Graph beta APIs. Sin embargo, las suscripciones creadas con beta API se almacenan en el mismo entorno de producción que las creadas con la versión 1.0 por lo que puede implementar el nuevo flujo de Outlook, además de la creación de suscripciones con las API versión 1.0.However, subscriptions created using beta APIs are stored in the same production environment as those created using v1.0, so you can implement the new Outlook flow in addition to your subscriptions creating using v1.0 APIs.

Las suscripciones creadas a través de las API v1.0 recibirán notificaciones de ciclo de vida.Subscriptions created via the v1.0 APIs will receive lifecycle notifications.

Ejemplo de solicitud de suscripciónSubscription request example

POST https://graph.microsoft.com/beta/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": "2019-03-20T11:00:00.0000000Z",
  "clientState": "<secretClientState>"
}

Importante: usar el mismo nombre de host para ambas direcciones URL de notificaciones.Important: Use the same hostname for both notifications URLs.

Nota: es necesario validar ambos puntos de conexión, como se describe en el artículo Gestionar suscripciones.Note: You need to validate both endpoints as described in Managing subscriptions. Si quiere usar la misma dirección URL para los dos puntos de conexión, recibirá y responderá a las dos peticiones de validación.If you choose to use the same URL for both endpoints you will receive and respond to two validation requests.

Nota: no puede actualizar las suscripciones existentes (PATCH) para agregar la propiedad lifecycleNotificationUrl.Note: You cannot update (PATCH) the existing subscriptions to add the lifecycleNotificationUrl property. Debe quitar estas suscripciones y crear otras nuevas y especificar la propiedad lifecycleNotificationUrl.You should remove such existing subscriptions, and create new subscriptions and specify the lifecycleNotificationUrl property. Las suscripciones existentes sin la propiedad lifecycleNotificationUrl no recibirán las notificaciones subscriptionRemoved y missed.Existing subscriptions without lifecycleNotificationUrl property will not receive the subscriptionRemoved and missed.

Responder a las notificaciones subscriptionRemovedResponding to subscriptionRemoved notifications

La notificación de ciclo de vida subscriptionRemoved le informa de que una suscripción se ha eliminado y debe reconstruirse, si desea seguir recibiendo notificaciones.The subscriptionRemoved lifecycle notification informs you that a subscription has been removed and should be recreated, if you want to continue receiving change notifications.

Puede crear una suscripción de larga duración (3 días) y las notificaciones de datos de recursos se desplazarán a notificationUrl.You can create a long-lived subscription (3 days), and change notifications will start flowing to the notificationUrl. Sin embargo, pueden cambiar las condiciones de acceso a los datos de recursos más adelante.However, the conditions of access to the resource data might change over time. Por ejemplo, puede producirse un evento en el servicio de Outlook que requiera que la aplicación vuelva a autenticar al usuario.For example, an event in the Outlook service might occur that requires the app to re-authenticate the user. En este caso, el flujo es el siguiente:In such a case, the flow is as follows:

  1. Outlook detecta que tiene que quitar una suscripción de Microsoft Graph.Outlook detects that a subscription needs to be removed from Microsoft Graph.

    No hay ninguna cadencia establecida para estos eventos.There is no set cadence for these events. Puede producirse con frecuencia para algunos recursos y casi nunca para otros.They might occur frequently for some resources, and almost never for others.

  2. Microsoft Graph envía una notificación subscriptionRemoved de ciclo de vida a lifecycleNotificationUrl (si se especificó).Microsoft Graph sends a subscriptionRemoved lifecycle notification to the lifecycleNotificationUrl (if specified).

  3. Puede responder a esta notificación de ciclo de vida creando una nueva suscripción para el mismo recurso.You can respond to this lifecycle notification by creating a new subscription for the same resource. Para ello, deberá presentar un token de acceso válido; en algunos casos, esto significa que la aplicación debe volver a autenticar al usuario para obtener un nuevo token de acceso 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. Si crea una nueva suscripción correctamente, las notificaciones de cambio iniciarán el flujo de nuevo.If you successfully create a new subscription, change notifications will start flowing again. Sin embargo, si se produce un error (por ejemplo, la aplicación no puede obtener un token de acceso válido), no se enviarán notificaciones de cambio.However, if you fail (for example, the app can't obtain a valid access token), change notifications will not be sent.

  5. Después de crear la nueva suscripción, puede sincronizar los datos de recursos para identificar los cambios que faltan.After creating the new subscription, you can sync the resource data to identify any missing changes.

Ejemplo de notificación subscriptionRemovedsubscriptionRemoved notification example

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

Algunas cosas a tener en cuenta sobre este tipo de notificación:A few things to note about this type of notification:

  • El campo "lifecycleEvent": "subscriptionRemoved" designa esta notificación como relacionada con la eliminación de la suscripción.The "lifecycleEvent": "subscriptionRemoved" field designates this notification as related to subscription removal. También son posibles otros tipos de notificaciones de ciclo de vida y se presentarán en el futuro.Other types of lifecycle notifications are also possible, and new ones will be introduced in the future.
  • La notificación de ciclo de vida no contiene información sobre un recurso específico, porque no está relacionada con un cambio de recursos, sino con el cambio de estado de la suscripción.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.
  • Igual que las notificaciones de cambio, las notificaciones de ciclo de vida se pueden agrupar (en la matriz value), cada una con otro valor lifecycleEvent posiblemente diferente.Similar to change notifications, lifecycle notifications can be batched together (in the value array), each with a possibly different lifecycleEvent value. Procese cada notificación de ciclo de vida del lote de la forma correspondiente.Process each lifecycle notification in the batch accordingly.

Nota: Para obtener una descripción completa de los datos que se envían cuando se entregan las notificaciones de cambio, vea changeNotificationCollection.Note: for a full description of the data sent when change notifications are delivered, see changeNotificationCollection.

Acciones a tomarActions to take

  1. Aceptar la recepción de la notificación del ciclo de vida, respondiendo a la solicitud POST con 202 - Accepted.Acknowledge the receipt of the lifecycle notification, by responding to the POST call with 202 - Accepted.
  2. Validar la autenticidad de la notificación de ciclo de vida.Validate the authenticity of the lifecycle notification.
  3. Asegúrese de que la aplicación tiene un token de acceso válido para dar el siguiente paso.Ensure that the app has a valid access token to take the next step.

Nota: si usa una de las bibliotecas de autenticación, esta hará el trabajo por usted reutilizando un token en caché válido u obteniendo un nuevo token, incluyendo pedir al usuario que inicie sesión de nuevo (por ejemplo, con una contraseña nueva).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). Tenga en cuenta que obtener un nuevo token puede fallar, ya que pueden haber cambiado las condiciones de acceso y el autor de la llamada puede que no esté autorizado ya para acceder a los datos 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. Crear una nueva suscripción utilizando el proceso estándar descrito aquí.Create a new subscription using the standard process described here.

Nota: esta acción puede fallar, porque las comprobaciones de autorización realizadas por el sistema pueden denegar a la aplicación o al usuario el acceso al 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. Puede ser necesario que la aplicación obtenga un nuevo token de acceso del usuario para autorizar correctamente una suscripción.It might be necessary for the app to obtain a new access token from the user to successfully reauthorize a subscription. Puede repetir estas acciones en cualquier momento, por ejemplo, si cambian las condiciones de acceso.You can retry these actions later, at any time; for example, when the conditions of access have changed. Cualquier cambio de recurso realizado en el período de tiempo desde que la notificación de ciclo de vida se ha enviado hasta que la aplicación crea correctamente la suscripción se perderá.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. La aplicación necesita capturar dichos cambios por sí misma.The app will need to fetch those changes on its own.

  1. Después de crear la nueva suscripción, sincronice los datos de recursos que faltan desde la última hora conocida en la que ha recibido una notificación de cambio para este recurso; por ejemplo: 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 a las notificaciones perdidasResponding to missed notifications

Estas señales informan de que algunas notificaciones de cambio todavía no se han entregado.These signals inform you that some change notifications might not have been delivered. Debe decidir si ignorar o manejar estas señales.You should decide if you ignore or handle these signals.

Ejemplo de notificaciónNotification example

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

Algunas cosas a tener en cuenta sobre este tipo de notificación:A few things to note about this type of notification:

  • El campo "lifecycleEvent": "missed" designa esto como una señal sobre notificaciones de cambio perdidas.The "lifecycleEvent": "missed" field designates this as a signal about missed change notifications. También son posibles otros tipos de notificaciones de ciclo de vida y se presentarán en el futuro.Other types of lifecycle notifications are also possible, and new ones will be introduced in the future.
  • La notificación de ciclo de vida no contiene información sobre un recurso específico, porque no está relacionada con un cambio de recursos, sino con el cambio de estado de la suscripción.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.
  • Igual que las notificaciones de cambio, las notificaciones de ciclo de vida se pueden agrupar (en la matriz value), cada una con otro valor lifecycleEvent posiblemente diferente.Similar to change notifications, lifecycle notifications might be batched together (in the value array), each with a possibly different lifecycleEvent value. Procese cada notificación de ciclo de vida del lote de la forma correspondiente.Process each lifecycle notification in the batch accordingly.

Nota: Para obtener una descripción completa de los datos que se envían cuando se entregan las notificaciones de cambio, vea changeNotificationCollection.Note: for a full description of the data sent when change notifications are delivered, see changeNotificationCollection.

Acciones a tomarActions to take

  1. Aceptar la recepción de la notificación del ciclo de vida, respondiendo a la solicitud POST con 202 - Accepted.Acknowledge the receipt of the lifecycle notification, by responding to the POST call with 202 - Accepted.
    • Si ignora estas señales, no haga nada más.If you ignore these signals, do nothing else. En caso contrario:Otherwise:
  2. Validar la autenticidad de la notificación de ciclo de vida.Validate the authenticity of the lifecycle notification.
  3. Realice una nueva sincronización de todos los datos del recurso para identificar los cambios que no se distribuyen como notificaciones.Perform a full data resync of the resource to identify the changes that were not delivered as notifications.

Responder a las notificaciones de reauthorizationRequiredResponding to reauthorizationRequired notifications

Cuando recibe una notificación de ciclo de vida reauthorizationRequired, debe volver a autorizar la suscripción para mantener el flujo de datos.When you receive a reauthorizationRequired lifecycle notification, you must reauthorize the subscription to maintain the data flow.

Puede crear una suscripción de larga duración (3 días), la cual habilita el flujo de notificaciones de datos al notificationUrl.You can create a long-lived subscription (3 days), which enables change notifications to flow to the notificationUrl. Sin embargo, si las condiciones de acceso han cambiado desde que se creo la suscripción, Microsoft Graph podría exigirle que vuelva a autorizarla para demostrar que aún tiene acceso a los datos del 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. Los siguientes son ejemplos de modificaciones que afectan al acceso a los datos:The following are examples of changes that affect your access to data:

  • El administrador de un inquilino puede revocar los permisos de su aplicación para leer un recurso.A tenant administrator may revoke your app's permissions to read a resource.
  • En un escenario interactivo, el usuario que proporciona el token de autenticación a su aplicación puede estar sujeto a políticas dinámicas basadas en varios factores, como su ubicación, estado del dispositivo o evaluación de riesgos.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 assesment. Por ejemplo, si el usuario cambia su ubicación física, es posible que ya no se le permita acceder a los datos y que su aplicación no pueda volver a autorizar la suscripción.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 más información sobre las directivas dinámicas que controlan el acceso, consulte Directivas de acceso condicional de Azure AD.For more information about dynamic policies that control access, see Azure AD conditional access policies.

Los siguientes pasos representan el flujo de una impugnación de autorización para una suscripción activa:The following steps represent the flow of an authorization challenge for an active subscription:

  1. Microsoft Graph requiere una suscripción para volver a ser autorizado.Microsoft Graph requires a subscription to be reauthorized.

    Las razones de esto pueden variar de un recurso a otro y pueden cambiar con el tiempo.The reasons for this may vary from resource to resource, and may change over time. Debe responder a los eventos para volver a autorizar las aplicaciones, independientemente de lo que los ocasione.You must respond to a reauthorization event no matter what caused it.

  2. Microsoft Graph envía una notificación para impugnar la autorización a lifecycleNotificationUrl.Microsoft Graph sends an authorization challenge notification to the lifecycleNotificationUrl.

    Tenga en cuenta que el flujo de notificaciones de cambios puede continuar por un tiempo para darle tiempo extra de responder.Note that the flow of change notifications may continue for a while, giving you extra time to respond. Sin embargo, el envío de notificaciones finalmente se detiene hasta que realice la acción requerida.However, eventually change notification delivery pauses, until you take the required action.

  3. Puede responder a este ciclo de notificaciones de una de estas dos maneras:Respond to this lifecycle notification in one of two ways:

    • Vuelva a autorizar la suscripción.Reauthorize the subscription. Esto no prolonga la fecha de vencimiento de la suscripción.This does not extend the expiry date of the subscription.
    • Renueve la suscripción.Renew the subscription. Esto vuelve a autorizarla y extiende su fecha de vencimiento a la vez.This both reauthorizes and extends the expiry date.

    Nota: Ambas acciones requieren que presente un token de autenticación válido, similar a la creación de una nueva suscripción o a la renovación de una suscripción antes de su expiración.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. Si vuelve a autorizar o renueva correctamente la suscripción, las notificaciones de cambios continuarán.If you successfully reauthorize or renew the subscription, change notifications continue. De lo contrario, las notificaciones de cambio permanecerán pausadas.Otherwise, change notifications remain paused.

Ejemplo de notificación 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"
    }
  ]
}

Estas son algunas consideraciones con respecto a este tipo de notificación:A few things to note about this type of notification:

  • El campo "lifecycleEvent": "reauthorizationRequired" identifica esta notificación como una impugnación de autorización.The "lifecycleEvent": "reauthorizationRequired" field designates this notification as an authorization challenge. También son posibles otros tipos de notificaciones de ciclo de vida y se presentarán en el futuro.Other types of lifecycle notifications are also possible, and new ones will be introduced in the future.
  • La notificación de ciclo de vida no contiene información sobre un recurso específico, porque no está relacionada con un cambio de recursos, sino con el cambio de estado de la suscripción.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.
  • De forma similar a las notificaciones de cambios, puede agrupar notificaciones de ciclo de vida (en la colección de valores), cada una con un valor de lifecycleEvent posiblemente diferente.Similar to change notifications, you can batch lifecycle notifications together (in the value collection), each with a possibly different lifecycleEvent value. Procese cada notificación de ciclo de vida del lote de la forma correspondiente.Process each lifecycle notification in the batch accordingly.

Nota: Para obtener una descripción completa de los datos que se envían cuando se entregan las notificaciones de cambio, vea changeNotificationCollection.Note: for a full description of the data sent when change notifications are delivered, see changeNotificationCollection.

Acciones a tomarActions to take

  1. Aceptar la recepción de la notificación del ciclo de vida, respondiendo a la solicitud POST con 202 - Accepted.Acknowledge the receipt of the lifecycle notification, by responding to the POST call with 202 - Accepted.
  2. Validar la autenticidad de la notificación de ciclo de vida.Validate the authenticity of the lifecycle notification.
  3. Asegúrese de que la aplicación tiene un token de acceso válido para dar el siguiente paso.Ensure that the app has a valid access token to take the next step.

Nota: si usa una de las bibliotecas de autenticación, esta hará el trabajo por usted reutilizando un token en caché válido u obteniendo un nuevo token, incluyendo pedir al usuario que inicie sesión de nuevo (por ejemplo, con una contraseña nueva).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). Tenga en cuenta que obtener un nuevo token puede fallar, ya que pueden haber cambiado las condiciones de acceso y el autor de la llamada puede que no esté autorizado ya para acceder a los datos 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. Llame a cualquiera de las dos API siguientes.Call either of the following two APIs. Si la llamada a la API tiene éxito, se reanuda el flujo de notificación de cambios.If the API call succeeds, the change notification flow resumes.

    • Llame a la acción /reauthorize para volver a autorizar la suscripción sin extender su fecha de vencimiento: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
      
    • Realice una acción regular de renovación para volver a autorizar y renovar la suscripción al mismo tiempo: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"
      }
      

      La renovación puede fallar porque las verificaciones de autorización realizadas por el sistema podrían denegar a la aplicación o al usuario el acceso al recurso.Renewing may fail, because the authorization checks performed by the system may deny the app or the user access to the resource. Podría ser necesario que la aplicación obtenga un nuevo token de acceso por parte del usuario para autorizar correctamente la suscripción.It may be necessary for the app to obtain a new access token from the user to successfully reauthorize a subscription.

      Puede volver a intentar estas acciones más tarde, en cualquier momento, y tener éxito si las condiciones de acceso cambian.You may retry these actions later, at any time, and succeed if the conditions of access change. Se perdería cualquier notificación sobre los cambios en los recursos que se produzcan entre el momento en que se envíe la notificación del ciclo de vida y el momento en que la aplicación vuelva a crear la suscripción correctamente.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. En estos casos, la aplicación debe obtener esos cambios por separado.In such cases, the app should separately fetch those changes.

Información adicionalAdditional information

La siguiente información puede ayudarle a comprender la impugnación de autorización:The following information can help you understand authorization challenges:

  • Las impugnaciones de autorización no sustituyen la necesidad de renovar una suscripción de cambio de recursos antes de que expire.Authorization challenges do not replace the need to renew a resource change subscription before it expires.

    Aunque puede optar por renovar una suscripción cuando reciba una impugnación de autorización, es posible que Microsoft Graph no impugne todas sus suscripciones.While you can choose to renew a subscription when you receive an authorization challenge, Microsoft Graph may not challenge all of your subscriptions. Por ejemplo, es posible que no reciba ninguna notificación para impugnar la autorización de una suscripción en la que no tenga actividades ni notificaciones de cambio pendientes por entregar.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. Asegúrese de renovar las suscripciones antes de que caduquen.Make sure to renew subscriptions before they expire.

  • La frecuencia de las impugnaciones de autorización está sujeta a cambios.The frequency of authorization challenges is subject to change.

    No haga suposiciones sobre la frecuencia de las impugnaciones de autorización.Do not make assumptions about the frequency of authorization challenges. Estas notificaciones de ciclo de vida le indican cuándo debe tomar medidas, lo que le evita tener que realizar un seguimiento de las suscripciones que requieran reautorización.These lifecycle notifications tell you when to take actions, saving you from having to track which subscriptions require reauthorization. Esté preparado para recibir impugnaciones de desafíos de autorización en cualquier momento, desde una vez por minuto para cada suscripción, hasta rara vez para algunas de sus suscripciones.Be ready to handle authorization challenges from once every few minutes for every subscription to rarely for only some of your subscriptions.

Prepare el código para el futuro al controlar las notificaciones de ciclo de vidaFuture-proof the code handling lifecycle notifications

En el futuro, Microsoft Graph agregará más tipos de notificaciones de ciclo de vida de suscripción.In the future, Microsoft Graph will add more types of subscription lifecycle notifications. Publicaremos al mismo punto de conexión: lifecycleNotificationUrl, pero tendrá un valor diferente en lifecycleEvent y puede contener propiedades y un esquema ligeramente distintos, específicos para el escenario para el que se emite.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.

Implemente el código de forma que en el futuro no se interrumpa cuando se presenten los nuevos tipos de notificaciones de ciclo de vida de Microsoft Graph.You should implement your code in a future-proof way so it does not break when Microsoft Graph introduces new types of lifecycle notifications. Se recomienda el siguiente método:We recommend the following approach:

  1. Identificar explícitamente cada notificación de ciclo de vida como un evento compatible, con la propiedad lifecycleEvent.Explicitly identify each lifecycle notification as an event that you support, using the lifecycleEvent property. Por ejemplo, busque la "lifecycleEvent": "subscriptionRemoved" propiedad para identificar un evento específico y manejarlo.For example, look for the "lifecycleEvent": "subscriptionRemoved" property to identify a specific event, and handle it.

  2. Preste atención a anuncios de notificaciones de ciclo de vida de nuevos escenarios.Watch for announcements of lifecycle notifications for new scenarions. Es posible que haya más tipos de notificaciones de ciclo de vida en el futuro.There might be more types of lifecycle notifications in the future.

  3. En la aplicación, omita las notificaciones de ciclo de vida que la aplicación no reconoce y anótelas para obtener información.In your app, ignore any lifecycle notification that the app does not recognize, and log them to gain awareness.

  4. Si lo desea, busque la documentación relacionada con nuevas notificaciones de ciclo de vida e implemente la compatibilidad con ellas según corresponda.At your discretion, look up the related documentation for new lifecycle notifications and implement support for them as appropriate.

Ver tambiénSee also