Итак, прелесть использования Xamarin заключается в том, что у вас есть доступ ко всем нативным API-интерфейсам iOS, доступным для разработчиков Swift, поэтому вы можете делать все в C #, что вы можете в Swift, без необходимости настраивать привязку.
Итак, все, что вы можете сделать с помощью Swift на XCode, вы можете сделать это таким же образом, используя C #. Поэтому для реализации пропусков Apple Wallet вы должны пройти те же процедуры. Процедура немного длинная, поскольку она предназначена только для эмитентов карт, и вам необходимо специальное разрешение, выданное Apple :
Ваше приложение должно включать это право, прежде чем вы сможете использовать этот класс. Для получения дополнительной информации о запросе этого права см. Раздел «Эмитенты карт» по адресу developer.apple.com/apple-pay/.
Кроме того, с здесь :
PKAddPaymentPassViewController
требуется ключ доступа com.apple.developer.payment-pass-provisioning
для вашего приложения. Плохая новость заключается в том, что никто не может отправлять приложения с таким правом, поскольку для этого требуется специальное разрешение Apple, которое, я считаю, зарезервировано для эмитентов карт, таких как банки и тому подобное. Если вы считаете, что имеете право, вам нужно связаться с Apple напрямую по номеру apple-pay-inquiries@apple.com
Как только вы это сделаете, вам нужно реализовать методы делегата и инициализировать его с помощью конфигурации, как вы можете видеть вкод / картинка ниже (конвертировано из Swift) :
using System;
using CoreGraphics;
using Foundation;
using ObjCRuntime;
using PassKit;
using UIKit;
namespace BlankNativeApp.iOS
{
public class PKViewController : UIViewController, IPKAddPaymentPassViewControllerDelegate
{
public void DidFinishAddingPaymentPass(PKAddPaymentPassViewController controller, PKPaymentPass pass, NSError error)
{
// Perform Post Addition Functionality
}
public void GenerateRequestWithCertificateChain(PKAddPaymentPassViewController controller, NSData[] certificates, NSData nonce, NSData nonceSignature, [BlockProxy(typeof(NIDActionArity1V173))] Action<PKAddPaymentPassRequest> handler)
{
// Do work that needs to be done with certifications
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
if (!PKAddPaymentPassViewController.CanAddPaymentPass)
{
// use other payment method / alert user
}
var config = new PKAddPaymentPassRequestConfiguration(PKEncryptionScheme.Ecc_V2);
var addPaymentPassVC = new PKAddPaymentPassViewController(config, this);
View.BackgroundColor = UIColor.White;
Title = "My Custom View Controller";
var btn = UIButton.FromType(UIButtonType.System);
btn.Frame = new CGRect(20, 200, 280, 44);
btn.SetTitle("Click Me", UIControlState.Normal);
btn.TouchUpInside += (sender, e) => {
//this.ShowViewController(addPaymentPassVC, (Foundation.NSObject)sender); This line will also work
this.PresentViewControllerAsync(addPaymentPassVC, true);
};
View.AddSubview(btn);
}
}
}
![Implementation example for Passkit](https://i.stack.imgur.com/Wdjt0.png)