【发布时间】:2019-03-26 22:17:59
【问题描述】:
在我的 iOS 应用程序中,我有 3 种产品可供用户使用应用内购买进行购买。 从我的 iOS 应用程序中,我只想获取苹果服务器上所有 3 件商品的价格。 我怎样才能在没有用户干预的情况下只获得价格。 (可能是我必须在视图中处理加载或某种方法)
【问题讨论】:
标签: ios in-app-purchase
在我的 iOS 应用程序中,我有 3 种产品可供用户使用应用内购买进行购买。 从我的 iOS 应用程序中,我只想获取苹果服务器上所有 3 件商品的价格。 我怎样才能在没有用户干预的情况下只获得价格。 (可能是我必须在视图中处理加载或某种方法)
【问题讨论】:
标签: ios in-app-purchase
您无需任何用户干预即可获取任何产品信息。您所要做的就是发送一个产品请求信息并实现一个回调方法来处理响应,如下所示(示例取自http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/):
- (void)requestProUpgradeProductData
{
NSSet *productIdentifiers = [NSSet setWithObject:@"com.runmonster.runmonsterfree.upgradetopro" ];
productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
productsRequest.delegate = self;
[productsRequest start];
// we will release the request object in the delegate callback
}
#pragma mark -
#pragma mark SKProductsRequestDelegate methods
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *products = response.products;
proUpgradeProduct = [products count] == 1 ? [[products firstObject] retain] : nil;
if (proUpgradeProduct)
{
NSLog(@"Product title: %@" , proUpgradeProduct.localizedTitle);
NSLog(@"Product description: %@" , proUpgradeProduct.localizedDescription);
NSLog(@"Product price: %@" , proUpgradeProduct.price);
NSLog(@"Product id: %@" , proUpgradeProduct.productIdentifier);
}
for (NSString *invalidProductId in response.invalidProductIdentifiers)
{
NSLog(@"Invalid product id: %@" , invalidProductId);
}
// finally release the reqest we alloc/init’ed in requestProUpgradeProductData
[productsRequest release];
[[NSNotificationCenter defaultCenter] postNotificationName:kInAppPurchaseManagerProductsFetchedNotification object:self userInfo:nil];
}
只需从 viewDidLoad 调用 requestProUpgradeProductData。
【讨论】:
您可以随时使用已知标识符列表创建SKProductsRequest 的实例。我在应用程序启动时完成了它。这是一个使用委托的异步调用,因此很容易做到没有阻塞。
myProductsRequest = [SKProductsRequest initWithProductIdentifiers:someSetOfIds];
myProductsRequest.delegate = myDelegageSomewhere;
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
for(SKProduct *product in response.products)
{
[self doSomethingWithPrice:product.price]
}
}
该信息与用户的 iTunes 帐户相关联。这就是它获取不同国家/地区商店(不同货币)价格的方式。
【讨论】:
-(NSString*)getPrice:(SKProduct*)product{
NSNumberFormatter * _priceFormatter;
_priceFormatter = [[NSNumberFormatter alloc] init];
[_priceFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[_priceFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[_priceFormatter setLocale:product.priceLocale];
return [_priceFormatter stringFromNumber:product.price];
}
【讨论】:
您可以将此功能添加到您的课程中。
func priceOf(product: SKProduct) -> String {
let numberFormatter = NumberFormatter()
numberFormatter.formatterBehavior = .behavior10_4
numberFormatter.numberStyle = .currency
numberFormatter.locale = product.priceLocale
return numberFormatter.string(from: product.price)!
}
那么,你就可以传递你的产品了!
priceLabel.text = "The price of the item is \(priceOf(product: product))"
将product 替换为您的SKProduct 的名称。
【讨论】:
Swift 3.x,你会在下面使用
public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
for product in response.products {
let price = product.price
let currencySymbol = productpriceLocale.currencySymbol
}
}
【讨论】:
获取应用内商品的价格,您可以使用我的服务器。
仅适用于 App Store 中可用的应用程序。
发送帖子请求至:
http://195.138.193.194:5003/store/
有身体:
{
"bundleId": "com.example.bundle",
"products": [
"com.example.productId1",
"com.example.productId2",
]
}
【讨论】: