App Tracking Transparency Permission con Xamarin Forms iOS

Contenido

iTunesConnect no le permite enviar la aplicación sin la implementación del framework AppTrackingTransparency. Si ha agregado un framework de seguimiento en su aplicación, puede obtener un error relacionado con el uso de seguimiento de usuarios en la sección de privacidad de la aplicación iTunes Connect.

TIP 💡

Debe usar el framework AppTrackingTransparency si la aplicación recopila datos sobre los usuarios finales y los comparte con otras empresas con fines de seguimiento entre aplicaciones y sitios web.

El framework AppTrackingTransparency presenta una solicitud de autorización de seguimiento de aplicaciones al usuario y proporciona el estado de autorización de seguimiento.

Implementación del AppTrackingTransparency 

Para esto, no necesita un paquete de nuget. ATTrackingManager forma parte del SDK de iOS (en el espacio de nombres AppTrackingTransparency), siempre que tenga como destino iOS14.5 como destino de compilación, tendrá acceso a él. Los bits de Xamarin.iOS están integrados en VisualStudio, así que solo asegúrese de que su versión es lo suficientemente alta.

Agrega NSUserTrackingUsageDescription  en el info.plist

Este es un mensaje que informa al usuario por qué una aplicación solicita permiso para usar datos para realizar el seguimiento del usuario o del dispositivo.

Si la aplicación llama a la API de transparencia de seguimiento de aplicaciones, debe proporcionar texto personalizado, conocido como una cadena de descripción de uso, que se muestra como una solicitud de alerta de permiso del sistema. La cadena usage-description indica al usuario por qué la aplicación solicita permiso para usar datos para realizar el seguimiento del usuario o del dispositivo.

Establezca la clave NSUserTrackingUsageDescription en la lista de propiedades de información ():Info.plist

  1. Seleccione el archivo del proyecto en el proyecto de Xamarin.iOS.Select your project’s file in your Xamarin.iOS project.Info.plist
  2. Modificar el archivo mediante el Editor genérico de PList

3. Agregue su mensaje con la clave NSUserTrackingUsageDescription.

TIP 💡

Use mayúsculas de estilo de oración y la puntuación final adecuada. Mantenga el texto corto y específico. No es necesario incluir el nombre de la aplicación porque el sistema ya la identifica.

Presentar la solicitud de autorización de seguimiento de aplicaciones al usuario final

Para solicitar autorización al usuario para acceder a los datos relacionados con la aplicación, agregue en el proyecto compartido:

...
public interface IAppTrackingTransparencyPermission
{
        /// <summary>
        /// This method checks if current status of the permission
        /// </summary>
        /// <returns></returns>
        Task<PermissionStatus> CheckStatusAsync();

        /// <summary>
        /// Requests the user to accept or deny a permission
        /// </summary>
        /// <returns></returns>
        void RequestAsync(Action<PermissionStatus> completion);
}
...

En el proyecto de Xamarin.iOS agrega:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Xamarin.Essentials;
using XEssentialsTest.Extensions;
using static Xamarin.Essentials.Permissions;

namespace AppTrackingTransparency.iOS
{
    public class AppTrackingTransparencyPermission : BasePlatformPermission, IAppTrackingTransparencyPermission
    {
        protected override Func<IEnumerable<string>> RequiredInfoPlistKeys => () =>  new string[] { "NSUserTrackingUsageDescription" };

        // Requests the user to accept or deny a permission
        public void RequestAsync(Action<PermissionStatus> completion)
        {
            ATTrackingManager.RequestTrackingAuthorization((result) => completion(Convert(result)));
        }

        // This method checks if current status of the permission
        public override Task<PermissionStatus> CheckStatusAsync()
        {
            return Task.FromResult(Convert(ATTrackingManager.TrackingAuthorizationStatus));
        }

        private PermissionStatus Convert(ATTrackingManagerAuthorizationStatus status)
        {
            switch (status)
            {
                case ATTrackingManagerAuthorizationStatus.NotDetermined:
                    return PermissionStatus.Disabled;
                case ATTrackingManagerAuthorizationStatus.Restricted:
                    return PermissionStatus.Restricted;
                case ATTrackingManagerAuthorizationStatus.Denied:
                    return PermissionStatus.Denied;
                case ATTrackingManagerAuthorizationStatus.Authorized:
                    return PermissionStatus.Granted;
                default:
                    return PermissionStatus.Unknown;
            }
        }

       
    }
}
...
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
       global::Xamarin.Forms.Forms.Init();

       DependencyService.Register<IAppTrackingTransparencyPermission, AppTrackingTransparencyPermission>();
       LoadApplication(new App());

      return base.FinishedLaunching(app, options);
}
...

Para usar esta implementación en su proyecto de recurso compartido, puede usarlo de una manera como esto:

...
        protected override async void OnStart()
        {
            if(DeviceInfo.Platform == DevicePlatform.iOS)
            {
                var appTrackingTransparencyPermission = DependencyService.Get<IAppTrackingTransparencyPermission>();
                var status = await appTrackingTransparencyPermission.CheckStatusAsync();

                if (status != PermissionStatus.Granted)                
                    appTrackingTransparencyPermission.RequestAsync(s => MyImplementation(s));
                else
                    MyImplementation(status);                                           
            }
        }

        private void MyImplementation(PermissionStatus status)
        {
            if (status == PermissionStatus.Granted)
            {
                // app center or other implementations
            }
        }
...

Dependiendo de por qué se le requiere para mostrar la ventana emergente que probablemente ni siquiera tiene que hacer nada con el resultado.

Conclusión

Mi conjetura es que la mayoría de la gente solicitará este permiso para cumplir con un SDK de publicidad o un SDK de Facebook o un SDK de inicio de sesión social. Independientemente de que el usuario autorice el seguimiento o no debe ser transparente para el desarrollador, el SDK seguirá funcionando.

Cuando la solicitud de permiso depende de usted, puede hacerlo lo antes posible o esperar un poco hasta que el usuario esté comprometido con la aplicación y vea valor en el seguimiento. Solo sepa que mientras la autorización es undefined, el permiso será ceros como si el permiso fuera denied.

Puedes ver el código fuente del ejemplo aquí.

¿Qué opinas de este contenido?
 
Luis Matos

Luis Matos

I help professionals and companies to create value solutions. I am a Systems Engineer, blockchain executive, and international mobile application speaker. Founder of the Malla Consulting Agency and several international technology communities.
Suscribirte
Notificar de
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x

Buscar en el sitio