xamarin-macios/src/storekit.cs

1233 строки
36 KiB
C#

//
// StoreKit.cs: This file describes the API that the generator will
// produce for StoreKit
//
// Authors:
// Miguel de Icaza
//
// Copyright 2009, Novell, Inc.
// Copyright 2012 Xamarin Inc.
// Copyright 2020 Microsoft Corp.
//
using ObjCRuntime;
using Foundation;
using CoreFoundation;
using CoreGraphics;
using StoreKit;
#if MONOMAC
using AppKit;
using UIViewController = AppKit.NSViewController;
using UIWindowScene = Foundation.NSObject;
#else
using UIKit;
#endif
#if WATCH
using UIViewController = Foundation.NSObject;
#endif
using System;
namespace StoreKit {
[Watch (6, 2)]
[BaseType (typeof (NSObject))]
partial interface SKDownload {
[iOS (12,0)]
[TV (12,0)]
[Export ("state")]
SKDownloadState State { get; }
#if MONOMAC
[Obsolete ("Use 'State' instead.")]
[Wrap ("State", IsVirtual = true)]
SKDownloadState DownloadState { get; }
[Deprecated (PlatformName.MacOSX, 10,15, message: "Use 'ExpectedContentLength' instead.")]
[Export ("contentLength", ArgumentSemantic.Copy)]
NSNumber ContentLength { get; }
#else
[NoWatch]
[Deprecated (PlatformName.iOS, 12, 0, message: "Use 'State' instead.")]
[Export ("downloadState")]
SKDownloadState DownloadState { get; }
[NoWatch]
[Deprecated (PlatformName.iOS, 13,0, message: "Use 'ExpectedContentLength' instead.")]
[Export ("contentLength")]
long ContentLength { get; }
#endif
[TV (13, 0), Mac (10, 15), iOS (13, 0)]
[Export ("expectedContentLength")]
long ExpectedContentLength { get; }
[Export ("contentIdentifier")]
string ContentIdentifier { get; }
[NullAllowed]
[Export ("contentURL", ArgumentSemantic.Copy)]
NSUrl ContentUrl { get; }
[Export ("contentVersion", ArgumentSemantic.Copy)]
string ContentVersion { get; }
[NullAllowed]
[Export ("error", ArgumentSemantic.Copy)]
NSError Error { get; }
[Export ("progress")]
float Progress { get; } /* float, not CGFloat */
[Export ("timeRemaining")]
double TimeRemaining { get; }
#if MONOMAC || __MACCATALYST__
[return: NullAllowed]
[Export ("contentURLForProductID:")]
[Static]
NSUrl GetContentUrlForProduct (string productId);
[Export ("deleteContentForProductID:")]
[Static]
void DeleteContentForProduct (string productId);
#endif
[Mac (10,14)]
[Field ("SKDownloadTimeRemainingUnknown")]
double TimeRemainingUnknown { get; }
[Mac (10,11)]
[Export ("transaction")]
SKPaymentTransaction Transaction { get; }
}
[Watch (6, 2)]
[BaseType (typeof (NSObject))]
#if XAMCORE_4_0
[DisableDefaultCtor]
#endif
partial interface SKPayment : NSMutableCopying {
[Static]
[Export("paymentWithProduct:")]
SKPayment CreateFrom (SKProduct product);
#if !MONOMAC
[NoWatch]
[Static]
[Export ("paymentWithProductIdentifier:")]
[Availability (Deprecated = Platform.iOS_5_0, Message = "Use 'FromProduct (SKProduct)'' after fetching the list of available products from 'SKProductRequest' instead.")]
SKPayment CreateFrom (string identifier);
#endif
[Export ("productIdentifier", ArgumentSemantic.Copy)]
string ProductIdentifier { get; }
[Export ("requestData", ArgumentSemantic.Copy)]
[NullAllowed]
NSData RequestData { get; [NotImplemented ("Not available on SKPayment, only available on SKMutablePayment")] set; }
[Export ("quantity")]
nint Quantity { get; }
[iOS (7,0), Mac (10, 9)]
[NullAllowed]
[Export ("applicationUsername", ArgumentSemantic.Copy)]
string ApplicationUsername { get; }
[iOS (8,3), Mac (10,14)]
[Export ("simulatesAskToBuyInSandbox")]
bool SimulatesAskToBuyInSandbox { get; [NotImplemented ("Not available on SKPayment, only available on SKMutablePayment")] set; }
[iOS (12,2)]
[TV (12,2)]
[Mac (10,14,4)]
[NullAllowed, Export ("paymentDiscount", ArgumentSemantic.Copy)]
SKPaymentDiscount PaymentDiscount { get; [NotImplemented ("Not available on SKPayment, only available on SKMutablePayment")] set; }
}
[Watch (6, 2)]
[BaseType (typeof (SKPayment))]
#if XAMCORE_4_0
[DisableDefaultCtor]
#endif
interface SKMutablePayment {
[Static]
[Export("paymentWithProduct:")]
SKMutablePayment PaymentWithProduct (SKProduct product);
[NoWatch]
[Static]
[Export ("paymentWithProductIdentifier:")]
[Availability (Deprecated = Platform.iOS_5_0, Message = "Use 'PaymentWithProduct (SKProduct)' after fetching the list of available products from 'SKProductRequest' instead.")]
SKMutablePayment PaymentWithProduct (string identifier);
[Export ("productIdentifier", ArgumentSemantic.Copy)][New]
string ProductIdentifier { get; set; }
[Export ("quantity")][New]
nint Quantity { get; set; }
[NullAllowed]
[Export ("requestData", ArgumentSemantic.Copy)]
[Override]
NSData RequestData { get; set; }
[iOS (7,0), Mac (10, 9)]
[NullAllowed] // by default this property is null
[Export ("applicationUsername", ArgumentSemantic.Copy)][New]
string ApplicationUsername { get; set; }
[iOS (8,3), Mac (10,14)]
[Export ("simulatesAskToBuyInSandbox")]
bool SimulatesAskToBuyInSandbox { get; set; }
[iOS (12,2)]
[TV (12,2)]
[Mac (10,14,4)]
[NullAllowed, Export ("paymentDiscount", ArgumentSemantic.Copy)]
SKPaymentDiscount PaymentDiscount { get; set; }
}
[Watch (6, 2)]
[BaseType (typeof (NSObject))]
interface SKPaymentQueue {
[Export ("defaultQueue")][Static]
SKPaymentQueue DefaultQueue { get; }
[Export ("canMakePayments")][Static]
bool CanMakePayments { get; }
[Export ("addPayment:")]
void AddPayment (SKPayment payment);
[Export ("restoreCompletedTransactions")]
void RestoreCompletedTransactions ();
[iOS (7,0), Mac (10, 9)]
[Export ("restoreCompletedTransactionsWithApplicationUsername:")]
void RestoreCompletedTransactions ([NullAllowed] string username);
[Export ("finishTransaction:")]
void FinishTransaction (SKPaymentTransaction transaction);
[Export ("addTransactionObserver:")]
void AddTransactionObserver ([Protocolize]SKPaymentTransactionObserver observer);
[Export ("removeTransactionObserver:")]
void RemoveTransactionObserver ([Protocolize]SKPaymentTransactionObserver observer);
[Export ("transactions")]
SKPaymentTransaction [] Transactions { get; }
//
// iOS 6.0
//
[Export ("startDownloads:")]
void StartDownloads (SKDownload [] downloads);
[Export ("pauseDownloads:")]
void PauseDownloads (SKDownload [] downloads);
[Export ("resumeDownloads:")]
void ResumeDownloads (SKDownload [] downloads);
[Export ("cancelDownloads:")]
void CancelDownloads (SKDownload [] downloads);
[Mac (10, 15), iOS (13, 0)]
[Wrap ("WeakDelegate")]
[NullAllowed]
ISKPaymentQueueDelegate Delegate { get; set; }
[Mac (10, 15), iOS (13, 0)]
[TV (13,0)]
[NullAllowed, Export ("delegate", ArgumentSemantic.Weak)]
NSObject WeakDelegate { get; set; }
[Mac (10, 15), iOS (13, 0)]
[TV (13,0)]
[NullAllowed, Export ("storefront")]
SKStorefront Storefront { get; }
[NoWatch, NoTV, NoMac, iOS (13,4)]
[NoMacCatalyst]
[Export ("showPriceConsentIfNeeded")]
void ShowPriceConsentIfNeeded ();
[NoWatch, NoTV, NoMac, iOS (14,0)]
[NoMacCatalyst]
[Export ("presentCodeRedemptionSheet")]
void PresentCodeRedemptionSheet ();
[Watch (7, 0), TV (14, 0), Mac (11, 0), iOS (14, 0)]
[MacCatalyst (14,0)]
[Export ("transactionObservers")]
ISKPaymentTransactionObserver[] TransactionObservers { get; }
}
[Watch (6, 2)]
[BaseType (typeof (NSObject))]
interface SKProduct {
[Export ("localizedDescription")]
string LocalizedDescription { get; }
[Export ("localizedTitle")]
string LocalizedTitle { get; }
[Export ("price")]
NSDecimalNumber Price { get; }
[Export ("priceLocale")]
NSLocale PriceLocale { get; }
[Export ("productIdentifier")]
string ProductIdentifier { get; }
#if MONOMAC
[Deprecated (PlatformName.MacOSX, 10,15, message: "Use 'IsDownloadable' instead.")]
[Export ("downloadable")]
bool Downloadable { get; }
#elif !XAMCORE_4_0
[Obsolete ("Use 'IsDownloadable' instead.")]
bool Downloadable {
[Wrap ("IsDownloadable")]
get;
}
#endif
[Mac (10,15)]
[Export ("isDownloadable")]
bool IsDownloadable { get; }
[NoiOS]
[NoWatch]
#if XAMCORE_4_0
[NoTV]
#else
[Deprecated (PlatformName.TvOS, 9, 0, message: "Use 'DownloadContentLengths' instead.")]
#endif
[Deprecated (PlatformName.MacOSX, 10, 14, message: "Use 'DownloadContentLengths' instead.")]
[Export ("contentLengths")]
NSNumber [] ContentLengths { get; }
[Mac (10,14)]
[Export ("downloadContentLengths")]
NSNumber [] DownloadContentLengths { get; }
[NoiOS]
#if XAMCORE_4_0
[NoTV]
#else
[Deprecated (PlatformName.TvOS, 9, 0, message: "Use 'DownloadContentVersion' instead.")]
#endif
[Deprecated (PlatformName.MacOSX, 10, 14, message: "Use 'DownloadContentVersion' instead.")]
[Export ("contentVersion")]
string ContentVersion { get; }
[Mac (10,14)]
[Export ("downloadContentVersion")]
string DownloadContentVersion { get; }
[iOS (11,2), TV (11,2), Mac (10,13,2)]
[NullAllowed, Export ("subscriptionPeriod")]
SKProductSubscriptionPeriod SubscriptionPeriod { get; }
[iOS (11,2), TV (11,2), Mac (10,13,2)]
[NullAllowed, Export ("introductoryPrice")]
SKProductDiscount IntroductoryPrice { get; }
[iOS (12,0), TV (12,0), Mac (10,14)]
[NullAllowed, Export ("subscriptionGroupIdentifier")]
string SubscriptionGroupIdentifier { get; }
[iOS (12,2)]
[TV (12,2)]
[Mac (10,14,4)]
[Export ("discounts")]
SKProductDiscount [] Discounts { get; }
[Watch (7, 0), TV (14, 0), Mac (11, 0), iOS (14, 0)]
[MacCatalyst (14,0)]
[Export ("isFamilyShareable")]
bool IsFamilyShareable { get; }
}
interface ISKPaymentTransactionObserver {}
[Watch (6, 2)]
[BaseType (typeof (NSObject))]
[Model]
[Protocol]
interface SKPaymentTransactionObserver {
[Export ("paymentQueue:updatedTransactions:")][Abstract]
void UpdatedTransactions (SKPaymentQueue queue, SKPaymentTransaction [] transactions);
[Export ("paymentQueue:removedTransactions:")]
void RemovedTransactions (SKPaymentQueue queue, SKPaymentTransaction [] transactions);
[Export ("paymentQueue:restoreCompletedTransactionsFailedWithError:")]
void RestoreCompletedTransactionsFailedWithError (SKPaymentQueue queue, NSError error);
[Export ("paymentQueueRestoreCompletedTransactionsFinished:")]
void RestoreCompletedTransactionsFinished (SKPaymentQueue queue);
[Export ("paymentQueue:updatedDownloads:")]
void UpdatedDownloads (SKPaymentQueue queue, SKDownload [] downloads);
[iOS (11,0)][TV (11,0)][Mac (11,0)][NoWatch]
[Export ("paymentQueue:shouldAddStorePayment:forProduct:")]
bool ShouldAddStorePayment (SKPaymentQueue queue, SKPayment payment, SKProduct product);
[Mac (10,15)]
[iOS (13,0)]
[TV (13,0)]
[Export ("paymentQueueDidChangeStorefront:")]
void DidChangeStorefront (SKPaymentQueue queue);
[Watch (7,0), TV (14,0), Mac (11,0), iOS (14,0)]
[Export ("paymentQueue:didRevokeEntitlementsForProductIdentifiers:")]
void DidRevokeEntitlements (SKPaymentQueue queue, string[] productIdentifiers);
}
[Watch (6, 2)]
[BaseType (typeof (NSObject))]
interface SKPaymentTransaction {
[NullAllowed]
[Export ("error")]
NSError Error { get; }
[NullAllowed]
[Export ("originalTransaction")]
SKPaymentTransaction OriginalTransaction { get; }
[Export ("payment")]
SKPayment Payment { get; }
[NullAllowed]
[Export ("transactionDate")]
NSDate TransactionDate { get; }
[NullAllowed]
[Export ("transactionIdentifier")]
string TransactionIdentifier { get; }
#if !MONOMAC
[NoWatch]
[Availability (Deprecated = Platform.iOS_7_0, Message = "Use 'NSBundle.AppStoreReceiptUrl' instead.")]
[NullAllowed]
[Export ("transactionReceipt")]
NSData TransactionReceipt { get; }
#endif
[Export ("transactionState")]
SKPaymentTransactionState TransactionState { get; }
[Export ("downloads")]
SKDownload [] Downloads { get; }
}
[Watch (6, 2)]
[BaseType (typeof (NSObject), Delegates=new string [] {"WeakDelegate"}, Events=new Type [] {typeof (SKRequestDelegate)})]
interface SKRequest {
[Export ("delegate", ArgumentSemantic.Weak)][NullAllowed]
NSObject WeakDelegate { get; set; }
[Wrap ("WeakDelegate")]
[Protocolize]
SKRequestDelegate Delegate { get; set; }
[Export ("cancel")]
void Cancel ();
[Export ("start")]
void Start ();
}
[Watch (6, 2)]
[BaseType (typeof (NSObject))]
[Model]
[Protocol]
interface SKRequestDelegate {
[Export ("requestDidFinish:")]
void RequestFinished (SKRequest request);
[Export ("request:didFailWithError:"), EventArgs ("SKRequestError")]
void RequestFailed (SKRequest request, NSError error);
}
[Watch (6, 2)]
[iOS (7,0)]
[Mac (10,9)]
[BaseType (typeof (SKRequest))]
interface SKReceiptRefreshRequest {
[Export ("initWithReceiptProperties:")]
IntPtr Constructor ([NullAllowed] NSDictionary properties);
[Wrap ("this (receiptProperties.GetDictionary ())")]
IntPtr Constructor ([NullAllowed] SKReceiptProperties receiptProperties);
[NullAllowed]
[Export ("receiptProperties")]
NSDictionary WeakReceiptProperties { get; }
[NullAllowed]
[Wrap ("WeakReceiptProperties")]
SKReceiptProperties ReceiptProperties { get; }
}
[iOS (7,0)]
[Mac (10,9)]
[Watch (6, 2)]
[Static, Internal]
interface _SKReceiptProperty {
[Field ("SKReceiptPropertyIsExpired"), Internal]
NSString IsExpired { get; }
[Field ("SKReceiptPropertyIsRevoked"), Internal]
NSString IsRevoked { get; }
[Field ("SKReceiptPropertyIsVolumePurchase"), Internal]
NSString IsVolumePurchase { get; }
}
[Watch (6, 2)]
[BaseType (typeof (SKRequest), Delegates=new string [] {"WeakDelegate"}, Events=new Type [] {typeof (SKProductsRequestDelegate)})]
interface SKProductsRequest {
[Export ("initWithProductIdentifiers:")]
IntPtr Constructor (NSSet productIdentifiersStringSet);
[Export ("delegate", ArgumentSemantic.Weak)][NullAllowed][New]
NSObject WeakDelegate { get; set; }
[Wrap ("WeakDelegate")][New]
[Protocolize]
SKProductsRequestDelegate Delegate { get; set; }
}
[Watch (6, 2)]
[BaseType (typeof (NSObject))]
interface SKProductsResponse {
[Export ("products")]
SKProduct [] Products { get; }
[Export ("invalidProductIdentifiers")]
string [] InvalidProducts { get; }
}
[Watch (6, 2)]
[BaseType (typeof (SKRequestDelegate))]
[Model]
[Protocol]
interface SKProductsRequestDelegate {
[Export ("productsRequest:didReceiveResponse:")][Abstract][EventArgs ("SKProductsRequestResponse")]
void ReceivedResponse (SKProductsRequest request, SKProductsResponse response);
}
[Mac (11, 0), NoTV, NoWatch]
[BaseType (typeof (UIViewController),
Delegates=new string [] { "WeakDelegate" },
Events =new Type [] { typeof (SKStoreProductViewControllerDelegate) })]
interface SKStoreProductViewController {
#if !XAMCORE_4_0
// SKStoreProductViewController is an OS View Controller which can't be customized
[Export ("initWithNibName:bundle:")]
[PostGet ("NibBundle")]
IntPtr Constructor ([NullAllowed] string nibName, [NullAllowed] NSBundle bundle);
#endif
[Export ("delegate", ArgumentSemantic.Assign), NullAllowed]
NSObject WeakDelegate { get; set; }
[Wrap ("WeakDelegate")]
[Protocolize]
SKStoreProductViewControllerDelegate Delegate { get; set; }
[Export ("loadProductWithParameters:completionBlock:")][Internal]
[Async]
void LoadProduct (NSDictionary parameters, [NullAllowed] Action<bool,NSError> callback);
[Wrap ("LoadProduct (parameters.GetDictionary ()!, callback)")]
[Async]
void LoadProduct (StoreProductParameters parameters, [NullAllowed] Action<bool,NSError> callback);
}
[Mac (11,0), NoTV, NoWatch]
[BaseType (typeof (NSObject))]
[Model]
[Protocol]
interface SKStoreProductViewControllerDelegate {
[Export ("productViewControllerDidFinish:"), EventArgs ("SKStoreProductViewController")]
void Finished (SKStoreProductViewController controller);
}
[NoWatch]
[Mac (11,0)]
[StrongDictionary ("SKStoreProductParameterKey")]
interface StoreProductParameters {
[iOS (11,0)][TV (11,0)]
[Export ("ProductIdentifier")]
string ProductIdentifier { get; }
[iOS (8,3)]
[Export ("ProviderToken")]
string ProviderToken { get; }
[iOS (11,3), TV (11,3), NoMac]
[Export ("AdNetworkAttributionSignature")]
string AdNetworkAttributionSignature { get; set; }
[iOS (11,3), TV (11,3), NoMac]
[Export ("AdNetworkCampaignIdentifier")]
uint AdNetworkCampaignIdentifier { get; set; }
[iOS (11,3), TV (11,3), NoMac]
[Export ("AdNetworkIdentifier")]
string AdNetworkIdentifier { get; set; }
[iOS (11,3), TV (11,3), NoMac]
[Export ("AdNetworkNonce")]
NSUuid AdNetworkNonce { get; set; }
[iOS (11,3), TV (11,3), NoMac]
[Export ("AdNetworkTimestamp")]
uint AdNetworkTimestamp { get; set; }
[NoWatch, NoMac, TV (14,0), iOS (14, 0)]
[Export ("AdNetworkSourceAppStoreIdentifier")]
string AdNetworkSourceAppStoreIdentifier { get; }
[NoWatch, NoMac, TV (14,0), iOS (14, 0)]
[Export ("AdNetworkVersion")]
string AdNetworkVersion { get; }
}
[NoWatch]
[Mac (11,0)]
[Static]
interface SKStoreProductParameterKey
{
[Field ("SKStoreProductParameterITunesItemIdentifier")]
NSString ITunesItemIdentifier { get; }
[iOS (11,0)][TV (11,0)]
[Field ("SKStoreProductParameterProductIdentifier")]
NSString ProductIdentifier { get; }
[iOS (8,0)]
[Field ("SKStoreProductParameterAffiliateToken")]
NSString AffiliateToken { get; }
[iOS (8,0)]
[Field ("SKStoreProductParameterCampaignToken")]
NSString CampaignToken { get; }
[iOS (8,3)]
[Field ("SKStoreProductParameterProviderToken")]
NSString ProviderToken { get; }
[iOS (9,3)]
[TV (9,2)]
[Field ("SKStoreProductParameterAdvertisingPartnerToken")]
NSString AdvertisingPartnerToken { get; }
[iOS (11,3), TV (11,3), NoMac]
[Field ("SKStoreProductParameterAdNetworkAttributionSignature")]
NSString AdNetworkAttributionSignature { get; }
[iOS (11,3), TV (11,3), NoMac]
[Field ("SKStoreProductParameterAdNetworkCampaignIdentifier")]
NSString AdNetworkCampaignIdentifier { get; }
[iOS (11,3), TV (11,3), NoMac]
[Field ("SKStoreProductParameterAdNetworkIdentifier")]
NSString AdNetworkIdentifier { get; }
[iOS (11,3), TV (11,3), NoMac]
[Field ("SKStoreProductParameterAdNetworkNonce")]
NSString AdNetworkNonce { get; }
[iOS (11,3), TV (11,3), NoMac]
[Field ("SKStoreProductParameterAdNetworkTimestamp")]
NSString AdNetworkTimestamp { get; }
[NoWatch, NoMac, TV (14, 0), iOS (14, 0)]
[MacCatalyst (14,0)]
[Field ("SKStoreProductParameterAdNetworkSourceAppStoreIdentifier")]
NSString AdNetworkSourceAppStoreIdentifier { get; }
[NoWatch, NoMac, TV (14, 0), iOS (14, 0)]
[MacCatalyst (14,0)]
[Field ("SKStoreProductParameterAdNetworkVersion")]
NSString AdNetworkVersion { get; }
[Mac (12, 0), iOS (15, 0), TV (15, 0), MacCatalyst (15, 0)]
[Field ("SKStoreProductParameterCustomProductPageIdentifier")]
NSString CustomProductPageIdentifier { get; }
}
#if !MONOMAC
[iOS (10,1)]
[NoWatch]
[NoTV] // __TVOS_PROHIBITED
[BaseType (typeof(UIViewController))]
interface SKCloudServiceSetupViewController
{
[NullAllowed, Export ("delegate", ArgumentSemantic.Weak)]
ISKCloudServiceSetupViewControllerDelegate Delegate { get; set; }
[Async]
[Export ("loadWithOptions:completionHandler:")]
void Load (NSDictionary options, [NullAllowed] Action<bool, NSError> completionHandler);
[Async]
[Wrap ("Load (options.GetDictionary ()!, completionHandler)")]
void Load (SKCloudServiceSetupOptions options, Action<bool, NSError> completionHandler);
}
interface ISKCloudServiceSetupViewControllerDelegate {}
[iOS (10,1)]
[NoWatch]
[NoTV] // __TVOS_PROHIBITED on the only member + SKCloudServiceSetupViewController is not in tvOS
[Protocol, Model]
[BaseType (typeof(NSObject))]
interface SKCloudServiceSetupViewControllerDelegate
{
[Export ("cloudServiceSetupViewControllerDidDismiss:")]
void DidDismiss (SKCloudServiceSetupViewController cloudServiceSetupViewController);
}
[NoWatch, NoTV, iOS (10,1)]
[StrongDictionary ("SKCloudServiceSetupOptionsKeys")]
interface SKCloudServiceSetupOptions
{
// Headers comment: Action for setup entry point (of type SKCloudServiceSetupAction).
// FIXME: Once https://bugzilla.xamarin.com/show_bug.cgi?id=57870 is fixed we should have a wrapper on a new property
// `SKCloudServiceSetupAction Action { get; set; }` and avoid manual code.
[Internal]
[Export ("ActionKey")]
NSString _Action { get; set; }
// Headers comment: Identifier of the iTunes Store item the user is trying to access which requires cloud service setup (NSNumber).
nint ITunesItemIdentifier { get; set; }
[iOS (10,3)]
string AffiliateToken { get; set; }
[iOS (10,3)]
string CampaignToken { get; set; }
[iOS (11,0)]
string MessageIdentifier { get; set; }
}
[NoWatch, NoTV, iOS (10,1)]
[Internal, Static]
interface SKCloudServiceSetupOptionsKeys
{
[Field ("SKCloudServiceSetupOptionsActionKey")]
NSString ActionKey { get; }
[Field ("SKCloudServiceSetupOptionsITunesItemIdentifierKey")]
NSString ITunesItemIdentifierKey { get; }
[iOS (10,3)]
[Field ("SKCloudServiceSetupOptionsAffiliateTokenKey")]
NSString AffiliateTokenKey { get; }
[iOS (10,3)]
[Field ("SKCloudServiceSetupOptionsCampaignTokenKey")]
NSString CampaignTokenKey { get; }
[iOS (11,0)]
[Field ("SKCloudServiceSetupOptionsMessageIdentifierKey")]
NSString MessageIdentifierKey { get; }
}
[NoWatch, NoTV, iOS (10,1)]
enum SKCloudServiceSetupAction
{
[Field ("SKCloudServiceSetupActionSubscribe")]
Subscribe,
}
[NoWatch, iOS (11,0), TV (11,0)]
enum SKCloudServiceSetupMessageIdentifier {
[Field ("SKCloudServiceSetupMessageIdentifierJoin")]
Join,
[Field ("SKCloudServiceSetupMessageIdentifierConnect")]
Connect,
[Field ("SKCloudServiceSetupMessageIdentifierAddMusic")]
AddMusic,
[Field ("SKCloudServiceSetupMessageIdentifierPlayMusic")]
PlayMusic,
}
#endif
[Mac (11,0), Watch (7,0), iOS (9,3), TV (9,2)]
[BaseType (typeof (NSObject))]
#if XAMCORE_3_0 // Avoid breaking change in iOS
[DisableDefaultCtor]
#endif
interface SKCloudServiceController {
[Static]
[Export ("authorizationStatus")]
SKCloudServiceAuthorizationStatus AuthorizationStatus { get; }
[Static]
[Async]
[Export ("requestAuthorization:")]
void RequestAuthorization (Action<SKCloudServiceAuthorizationStatus> handler);
[Async]
[Export ("requestStorefrontIdentifierWithCompletionHandler:")]
void RequestStorefrontIdentifier (Action<NSString, NSError> completionHandler);
[iOS (11,0)][TV (11,0)]
[Async]
[Export ("requestStorefrontCountryCodeWithCompletionHandler:")]
void RequestStorefrontCountryCode (Action<NSString, NSError> completionHandler);
[Async]
[Export ("requestCapabilitiesWithCompletionHandler:")]
void RequestCapabilities (Action<SKCloudServiceCapability, NSError> completionHandler);
[iOS (10,3), TV (10,2)]
[Deprecated (PlatformName.iOS, 11,0, message: "Use 'RequestUserToken' instead.")]
[Deprecated (PlatformName.TvOS, 11,0, message: "Use 'RequestUserToken' instead.")]
[Async]
[Export ("requestPersonalizationTokenForClientToken:withCompletionHandler:")]
void RequestPersonalizationToken (string clientToken, Action<NSString, NSError> completionHandler);
[iOS (11,0)][TV (11,0)]
[Async]
[Export ("requestUserTokenForDeveloperToken:completionHandler:")]
void RequestUserToken (string developerToken, Action<NSString, NSError> completionHandler);
[Notification]
[Field ("SKStorefrontIdentifierDidChangeNotification")]
NSString StorefrontIdentifierDidChangeNotification { get; }
[Notification]
[Field ("SKCloudServiceCapabilitiesDidChangeNotification")]
NSString CloudServiceCapabilitiesDidChangeNotification { get; }
[iOS (11,0)][TV (11,0)]
[Notification]
[Field ("SKStorefrontCountryCodeDidChangeNotification")]
NSString StorefrontCountryCodeDidChangeNotification { get; }
}
[Introduced (PlatformName.MacCatalyst, 14, 0)]
[NoWatch, iOS (11,0), TV (11,0), Mac (11,0)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor] // static Default property is the only documented way to get the controller
interface SKProductStorePromotionController {
[Static]
[Export ("defaultController")]
SKProductStorePromotionController Default { get; }
[Async]
[Export ("fetchStorePromotionVisibilityForProduct:completionHandler:")]
void FetchStorePromotionVisibility (SKProduct product, [NullAllowed] Action<SKProductStorePromotionVisibility, NSError> completionHandler);
[Async]
[Export ("updateStorePromotionVisibility:forProduct:completionHandler:")]
void Update (SKProductStorePromotionVisibility promotionVisibility, SKProduct product, [NullAllowed] Action<NSError> completionHandler);
[Async]
[Export ("fetchStorePromotionOrderWithCompletionHandler:")]
void FetchStorePromotionOrder ([NullAllowed] Action<SKProduct [], NSError> completionHandler);
[Async]
[Export ("updateStorePromotionOrder:completionHandler:")]
void Update (SKProduct[] storePromotionOrder, [NullAllowed] Action<NSError> completionHandler);
}
[iOS (10,3), Mac (10,14)]
[NoTV]
[NoWatch]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor] // Not specified but very likely
interface SKStoreReviewController {
[Deprecated (PlatformName.iOS, 14, 0, message : "Use the 'RequestReview (UIWindowScene windowScene)' API instead.")]
[Static]
[Export ("requestReview")]
void RequestReview ();
[Introduced (PlatformName.MacCatalyst, 14, 0)]
[NoWatch, NoTV, iOS (14,0), NoMac]
[Static]
[Export ("requestReviewInScene:")]
void RequestReview (UIWindowScene windowScene);
}
[Watch (6, 2), iOS (11,2), TV (11,2), Mac (10,13,2)]
[BaseType (typeof (NSObject))]
interface SKProductSubscriptionPeriod {
[Export ("numberOfUnits")]
nuint NumberOfUnits { get; }
[Export ("unit")]
SKProductPeriodUnit Unit { get; }
}
[Watch (6, 2), iOS (11,2), TV (11,2), Mac (10,13,2)]
[BaseType (typeof (NSObject))]
interface SKProductDiscount {
[Export ("price")]
NSDecimalNumber Price { get; }
[Export ("priceLocale")]
NSLocale PriceLocale { get; }
[iOS (12,2)]
[TV (12,2)]
[Mac (10,14,4)]
[NullAllowed, Export ("identifier")]
string Identifier { get; }
[Export ("subscriptionPeriod")]
SKProductSubscriptionPeriod SubscriptionPeriod { get; }
[Export ("numberOfPeriods")]
nuint NumberOfPeriods { get; }
[Export ("paymentMode")]
SKProductDiscountPaymentMode PaymentMode { get; }
[iOS (12,2)]
[TV (12,2)]
[Mac (10,14,4)]
[Export ("type")]
SKProductDiscountType Type { get; }
}
[iOS (11,3), NoTV, NoMac, NoWatch]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor]
interface SKAdNetwork {
[Static]
[Export ("registerAppForAdNetworkAttribution")]
void RegisterAppForAdNetworkAttribution ();
[NoWatch, NoTV, NoMac, iOS (14,0)]
[Static]
[Export ("updateConversionValue:")]
void UpdateConversionValue (nint conversionValue);
[NoWatch, NoTV, NoMac]
[iOS (14,5)]
[MacCatalyst (14,5)]
[Static]
[Async]
[Export ("startImpression:completionHandler:")]
void StartImpression (SKAdImpression impression, [NullAllowed] Action<NSError> completion);
[NoWatch, NoTV, NoMac]
[iOS (14,5)]
[MacCatalyst (14,5)]
[Static]
[Async]
[Export ("endImpression:completionHandler:")]
void EndImpression (SKAdImpression impression, [NullAllowed] Action<NSError> completion);
}
[iOS (12,2)]
[TV (12,2)]
[Mac (10,14,4)]
[Watch (6, 2)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor]
interface SKPaymentDiscount {
[Export ("initWithIdentifier:keyIdentifier:nonce:signature:timestamp:")]
IntPtr Constructor (string identifier, string keyIdentifier, NSUuid nonce, string signature, NSNumber timestamp);
[Export ("identifier")]
string Identifier { get; }
[Export ("keyIdentifier")]
string KeyIdentifier { get; }
[Export ("nonce", ArgumentSemantic.Copy)]
NSUuid Nonce { get; }
[Export ("signature")]
string Signature { get; }
[Export ("timestamp", ArgumentSemantic.Copy)]
NSNumber Timestamp { get; }
}
[Watch (6, 2)]
[iOS (12,2)]
[TV (12,2)]
[Mac (10,14,4)]
[Native]
public enum SKProductDiscountType : long {
Introductory,
Subscription,
}
[Mac (10,15)]
[iOS (13,0)]
[TV (13,0)]
[Watch (6, 2)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor] // no `init` but non-null properties
interface SKStorefront {
[Export ("countryCode")]
string CountryCode { get; }
[Export ("identifier")]
string Identifier { get; }
}
interface ISKPaymentQueueDelegate {}
[Watch (6, 2), Mac (10,15), iOS (13,0)]
[Protocol]
[Model (AutoGeneratedName = true)]
[BaseType (typeof(NSObject))]
interface SKPaymentQueueDelegate {
[Export ("paymentQueue:shouldContinueTransaction:inStorefront:")]
bool ShouldContinueTransaction (SKPaymentQueue paymentQueue, SKPaymentTransaction transaction, SKStorefront newStorefront);
[NoWatch, NoMac, NoTV, iOS (13,4)]
[Export ("paymentQueueShouldShowPriceConsent:")]
bool ShouldShowPriceConsent (SKPaymentQueue paymentQueue);
}
// SKArcade.h has not been part of the StoreKit.h umbrella header since it was added
// in Xcode 11 GM is was added - but only for macOS ?!?
// https://feedbackassistant.apple.com/feedback/7017660 - https://github.com/xamarin/maccore/issues/1913
[NoWatch][NoiOS][NoTV]
[Mac (10,15)]
delegate void SKArcadeServiceRegisterHandler (NSData randomFromFP, uint /* uint32_t */ randomFromFPLength, NSData cmacOfAppPid, uint /* uint32_t */ cmacOfAppPidLength, NSError error);
[NoWatch][NoiOS][NoTV]
[Mac (10,15)]
delegate void SKArcadeServiceSubscriptionHandler (NSData subscriptionStatus, uint /* uint32_t */ subscriptionStatusLength, NSData cmacOfNonce, uint /* uint32_t */ cmacOfNonceLength, NSError error);
[Mac (10,15)]
[iOS (13,0)]
[TV (13,0)]
[NoWatch]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor] // all static members so far
interface SKArcadeService {
[Static]
// [Async] it'ts not a `completionHandler` and there's not documentation (e.g. number of calls)
[Export ("registerArcadeAppWithRandomFromLib:randomFromLibLength:resultHandler:")]
void Register (NSData randomFromLib, uint randomFromLibLength, SKArcadeServiceRegisterHandler resultHandler);
[Static]
// [Async] it'ts not a `completionHandler` and there's not documentation (e.g. number of calls)
[Export ("arcadeSubscriptionStatusWithNonce:resultHandler:")]
void GetSubscriptionStatus (ulong nonce, SKArcadeServiceSubscriptionHandler resultHandler);
[Static]
[Export ("repairArcadeApp")]
void Repair ();
}
[NoWatch, NoTV, NoMac, iOS (14,0)]
[MacCatalyst (14,0)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor]
interface SKOverlayTransitionContext {
[Export ("addAnimationBlock:")]
void AddAnimationBlock (Action block);
[Export ("startFrame")]
CGRect StartFrame { get; }
[Export ("endFrame")]
CGRect EndFrame { get; }
}
[NoWatch, NoTV, NoMac, iOS (14,0)]
[MacCatalyst (14,0)]
[DisableDefaultCtor]
[BaseType (typeof (NSObject))]
interface SKOverlayConfiguration {}
[NoWatch, NoTV, NoMac, iOS (14,0)]
[MacCatalyst (14,0)]
[BaseType (typeof (SKOverlayConfiguration))]
[DisableDefaultCtor]
interface SKOverlayAppConfiguration {
[Export ("initWithAppIdentifier:position:")]
[DesignatedInitializer]
IntPtr Constructor (string appIdentifier, SKOverlayPosition position);
[Export ("appIdentifier", ArgumentSemantic.Retain)]
string AppIdentifier { get; set; }
[NullAllowed, Export ("campaignToken", ArgumentSemantic.Retain)]
string CampaignToken { get; set; }
[NullAllowed, Export ("providerToken", ArgumentSemantic.Retain)]
string ProviderToken { get; set; }
[iOS (15, 0), MacCatalyst (15, 0)]
[NullAllowed]
[Export ("customProductPageIdentifier", ArgumentSemantic.Retain)]
string CustomProductPageIdentifier { get; set; }
[iOS (15, 0), MacCatalyst (15, 0)]
[NullAllowed]
[Export ("latestReleaseID", ArgumentSemantic.Retain)]
string LatestReleaseId { get; set; }
[Export ("position", ArgumentSemantic.Assign)]
SKOverlayPosition Position { get; set; }
[Export ("userDismissible")]
bool UserDismissible { get; set; }
[Export ("setAdditionalValue:forKey:")]
void SetAdditionalValue ([NullAllowed] NSObject value, string key);
[Export ("additionalValueForKey:")]
[return: NullAllowed]
NSObject GetAdditionalValue (string key);
}
[NoWatch, NoTV, NoMac, iOS (14,0)]
[MacCatalyst (14,0)]
[BaseType (typeof (SKOverlayConfiguration))]
[DisableDefaultCtor]
interface SKOverlayAppClipConfiguration {
[Export ("initWithPosition:")]
[DesignatedInitializer]
IntPtr Constructor (SKOverlayPosition position);
[NullAllowed, Export ("campaignToken", ArgumentSemantic.Retain)]
string CampaignToken { get; set; }
[NullAllowed, Export ("providerToken", ArgumentSemantic.Retain)]
string ProviderToken { get; set; }
[iOS (15, 0), MacCatalyst (15, 0)]
[NullAllowed]
[Export ("customProductPageIdentifier", ArgumentSemantic.Retain)]
string CustomProductPageIdentifier { get; set; }
[iOS (15, 0), MacCatalyst (15, 0)]
[NullAllowed]
[Export ("latestReleaseID", ArgumentSemantic.Retain)]
string LatestReleaseId { get; set; }
[Export ("position", ArgumentSemantic.Assign)]
SKOverlayPosition Position { get; set; }
[Export ("setAdditionalValue:forKey:")]
void SetAdditionalValue ([NullAllowed] NSObject value, string key);
[Export ("additionalValueForKey:")]
[return: NullAllowed]
NSObject GetAdditionalValue (string key);
}
interface ISKOverlayDelegate {}
[NoWatch, NoTV, NoMac, iOS (14,0)]
[MacCatalyst (14,0)]
[Protocol, Model (AutoGeneratedName = true)]
[BaseType (typeof (NSObject))]
interface SKOverlayDelegate {
[Export ("storeOverlay:didFailToLoadWithError:")]
void DidFailToLoad (SKOverlay overlay, NSError error);
[Export ("storeOverlay:willStartPresentation:")]
void WillStartPresentation (SKOverlay overlay, SKOverlayTransitionContext transitionContext);
[Export ("storeOverlay:didFinishPresentation:")]
void DidFinishPresentation (SKOverlay overlay, SKOverlayTransitionContext transitionContext);
[Export ("storeOverlay:willStartDismissal:")]
void WillStartDismissal (SKOverlay overlay, SKOverlayTransitionContext transitionContext);
[Export ("storeOverlay:didFinishDismissal:")]
void DidFinishDismissal (SKOverlay overlay, SKOverlayTransitionContext transitionContext);
}
[NoWatch, NoTV, NoMac, iOS (14,0)]
[MacCatalyst (14,0)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor]
interface SKOverlay {
[Export ("initWithConfiguration:")]
[DesignatedInitializer]
IntPtr Constructor (SKOverlayConfiguration configuration);
[Export ("presentInScene:")]
void PresentInScene (UIWindowScene scene);
[Static]
[Export ("dismissOverlayInScene:")]
void DismissOverlayInScene (UIWindowScene scene);
[Wrap ("WeakDelegate")]
[NullAllowed]
ISKOverlayDelegate Delegate { get; set; }
[NullAllowed, Export ("delegate", ArgumentSemantic.Weak)]
NSObject WeakDelegate { get; set; }
[Export ("configuration", ArgumentSemantic.Copy)]
SKOverlayConfiguration Configuration { get; }
}
[NoWatch, NoTV, NoMac]
[iOS (14,5)]
[MacCatalyst (14,5)]
[BaseType (typeof (NSObject))]
interface SKAdImpression {
[Export ("sourceAppStoreItemIdentifier", ArgumentSemantic.Strong)]
NSNumber SourceAppStoreItemIdentifier { get; set; }
[Export ("advertisedAppStoreItemIdentifier", ArgumentSemantic.Strong)]
NSNumber AdvertisedAppStoreItemIdentifier { get; set; }
[Export ("adNetworkIdentifier", ArgumentSemantic.Strong)]
string AdNetworkIdentifier { get; set; }
[Export ("adCampaignIdentifier", ArgumentSemantic.Strong)]
NSNumber AdCampaignIdentifier { get; set; }
[Export ("adImpressionIdentifier", ArgumentSemantic.Strong)]
string AdImpressionIdentifier { get; set; }
[NullAllowed, Export ("adType", ArgumentSemantic.Strong)]
string AdType { get; set; }
[NullAllowed, Export ("adDescription", ArgumentSemantic.Strong)]
string AdDescription { get; set; }
[NullAllowed, Export ("adPurchaserName", ArgumentSemantic.Strong)]
string AdPurchaserName { get; set; }
[Export ("timestamp", ArgumentSemantic.Strong)]
NSNumber Timestamp { get; set; }
[Export ("signature", ArgumentSemantic.Strong)]
string Signature { get; set; }
[Export ("version", ArgumentSemantic.Strong)]
string Version { get; set; }
}
}