iOS 中不推荐使用 requestReview() 14,替代 xamarin.forms?
requestReview() deprecated in iOS 14, Alternative for xamarin.forms?
我正在使用
SKStoreReviewController.RequestReview ();
在 Xamarin.Forms 的依赖服务中。但是,现在已从 iOS 14 中弃用。我想知道如何与新的集成
UIWindowScene
requestReview(in windowScene: UIWindowScene)
在Xamarin.Forms
首先,您可以尝试在 xxx.ios->AppDelegate.cs 的 FinishedLaunching 方法中添加 SKStoreReviewController.RequestReview(Window.WindowScene)
;启动项目看看是否正确
如果上述方法出错,使用DependencyService才是正确的做法。
接口代码如下:
public interface MyInterface
{
void RequestReview();
}
这里是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();
}
}
}
}
可以在APP.xaml.cs里面的OnStart方法中调用:
protected override void OnStart()
{
if (Device.RuntimePlatform == Device.iOS)
{
DependencyService.Get<IReviewService>().RequestReview();
}
}
我可能有解决办法:
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);
}
我找到了多种获取当前场景的方法,并且在我测试它们时它们都有效:
var scene = UIApplication.SharedApplication.KeyWindow.WindowScene;
var alsoScene = UIApplication.SharedApplication.Delegate.GetWindow()?.WindowScene;
您可以在 this issue
中详细了解两者之间的区别
检查 iOS 版本以调用正确内容的完整解决方案可能如下所示
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();
}
}
希望这对您有所帮助。
我正在使用
SKStoreReviewController.RequestReview ();
在 Xamarin.Forms 的依赖服务中。但是,现在已从 iOS 14 中弃用。我想知道如何与新的集成
UIWindowScene
requestReview(in windowScene: UIWindowScene)
在Xamarin.Forms
首先,您可以尝试在 xxx.ios->AppDelegate.cs 的 FinishedLaunching 方法中添加 SKStoreReviewController.RequestReview(Window.WindowScene)
;启动项目看看是否正确
如果上述方法出错,使用DependencyService才是正确的做法。
接口代码如下:
public interface MyInterface
{
void RequestReview();
}
这里是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();
}
}
}
}
可以在APP.xaml.cs里面的OnStart方法中调用:
protected override void OnStart()
{
if (Device.RuntimePlatform == Device.iOS)
{
DependencyService.Get<IReviewService>().RequestReview();
}
}
我可能有解决办法:
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);
}
我找到了多种获取当前场景的方法,并且在我测试它们时它们都有效:
var scene = UIApplication.SharedApplication.KeyWindow.WindowScene;
var alsoScene = UIApplication.SharedApplication.Delegate.GetWindow()?.WindowScene;
您可以在 this issue
中详细了解两者之间的区别检查 iOS 版本以调用正确内容的完整解决方案可能如下所示
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();
}
}
希望这对您有所帮助。