Estoy usando
SKStoreReviewController.RequestReview (); en un servicio de dependencia para Xamarin.Forms. Sin embargo, esto ahora está obsoleto desde iOS 14. Y quiero saber cómo integrarlo con el nuevo UIWindowScene
requestReview(in windowScene: UIWindowScene)en Xamarin.Forms
Primero, puede intentar agregar SKStoreReviewController.RequestReview(Window.WindowScene) en el método FinishedLaunching de su xxx.ios->AppDelegate.cs; iniciar el proyecto para ver si es correcto.
Si el método anterior sale mal, usar DependencyService es la forma correcta de hacerlo.
Aquí está el código de la interfaz:
public interface MyInterface { void RequestReview(); }Aquí está el método de implementación de la interfaz en ios:
[assembly: Dependency(typeof(MyInterfaceImpl))] namespace App19.iOS { public class MyInterfaceImpl : MyInterface { public void RequestReview() { var myv = UIDevice.CurrentDevice.CheckSystemVersion(14, 0); if (myv) { UIWindow window = UIApplication.SharedApplication.Delegate.GetWindow(); SKStoreReviewController.RequestReview(window.WindowScene); } else { SKStoreReviewController.RequestReview(); } } } }Puede llamarlo en el método OnStart dentro de APP.xaml.cs:
protected override void OnStart() { if (Device.RuntimePlatform == Device.iOS) { DependencyService.Get<IReviewService>().RequestReview(); } }Podría tener una solución:
using StoreKit; using UIKit; public void RequestReview(){ var scene = UIApplication.SharedApplication.KeyWindow.WindowScene; if (scene is null) { //handle the scene being null here return; } SKStoreReviewController.RequestReview(scene); }Encontré varias formas de obtener la escena actual y ambas funcionaron cuando las probé:
var scene = UIApplication.SharedApplication.KeyWindow.WindowScene; var alsoScene = UIApplication.SharedApplication.Delegate.GetWindow()?.WindowScene;Puede leer más sobre la diferencia entre los dos en este número.
La solución completa donde verifica la versión de iOS para llamar a lo correcto podría verse así
using StoreKit; using UIKit; public void RequestReview() { var isIos14OrAbove = UIDevice.CurrentDevice.CheckSystemVersion(14, 0); if (isIos14OrAbove) { var scene = UIApplication.SharedApplication.KeyWindow.WindowScene; if (scene is null) { //handle the scene being null here return; } SKStoreReviewController.RequestReview(scene); } else { SKStoreReviewController.RequestReview(); } }Espero que esto ayude.