- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的应用程序中实现了自动续订每月订阅应用程序内购买。我通过调用 iTunes 的沙箱 URL 获得苹果收据。我的问题是我的自动续订订阅在 5 分钟后没有过期。
我没有在我的 iPhone 中设置自动续订。请建议我如何在沙盒环境中测试应用内购买。
这是我的代码:
这里我们要求苹果收据。
-(BOOL) getSubscriptionStatusFromAppleWithReceipt:(NSData *) receiptData
{
NSError *error;
NSMutableDictionary *requestContents = [NSMutableDictionary dictionaryWithObject:
[receiptData base64EncodedStringWithOptions:0] forKey:@"receipt-data"];
NSString *sharedSecret = @"efd594143c2840bdac89fc22eccd3a3d";
if (sharedSecret) requestContents[@"password"] = sharedSecret;
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents options:0 error:&error];
NSString *strUrl = @"";
// set 1 in AppConstant.h for Live enviorment
if (kPARSE_DEVELOPMENT_SERVER) {
// Production
strUrl = @"https://buy.itunes.apple.com/verifyReceipt";
}
else{
// Sandbox
strUrl = @"https://sandbox.itunes.apple.com/verifyReceipt";
}
//Chandni commented live server url
// Live server
// strUrl = @"https://buy.itunes.apple.com/verifyReceipt";
// Devlopment server
strUrl = @"https://sandbox.itunes.apple.com/verifyReceipt";
NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strUrl]];
[storeRequest setHTTPMethod:@"POST"];
[storeRequest setHTTPBody:requestData];
queue = [NSOperationQueue mainQueue];
// NSError *error = nil;
NSHTTPURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:storeRequest returningResponse:&response error:&error];
if (!error)
{
NSString* newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// NSLog(@"%@", newStr);
NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
// NSLog(@"%@", jsonResponse[@"latest_receipt_info"]);
if ([jsonResponse[@"latest_receipt_info"] isKindOfClass:[NSArray class]])
{
NSArray *receiptInfo = (NSArray *) jsonResponse[@"latest_receipt_info"];
return [self parseJsonFromAppleServer:receiptInfo];
}
}
else
{
NSString *strTemp = @" \n Database getSuscriptionStatus error in api calling of apple ";
NSLog(@"%@", error.localizedDescription);
}
return false;
}
-(BOOL) parseJsonFromAppleServer:(NSArray *) receiptInfo
{
if (receiptInfo.count > 0)
{
id lastReceipt = [receiptInfo lastObject];
if ([lastReceipt isKindOfClass:[NSDictionary class]])
{
NSDictionary *dictLastReceipt = (NSDictionary *) lastReceipt;
NSString *lastPurchase = [dictLastReceipt valueForKey:@"product_id"];
NSString *secondLastPurchase = @""; // In case if users last inapp is Removal of Advertisement
if (receiptInfo.count > 1) {
id secondLastReceipt = receiptInfo[receiptInfo.count - 2];
if ([secondLastReceipt isKindOfClass:[NSDictionary class]])
{
NSDictionary *dictSecondLastReceipt = (NSDictionary *) secondLastReceipt;
secondLastPurchase = [dictSecondLastReceipt valueForKey:@"product_id"];
}
}
if ([lastPurchase isEqualToString:@"com.divorcecommunity.monthly"] || [secondLastPurchase isEqualToString:@"com.divorcecommunity.monthly"])
{
NSString *strExpirationDate = [dictLastReceipt valueForKey:@"expires_date_pst"];
NSDate *expirationDate = [CommonUtilities getExpirationDateFromDateString:strExpirationDate];
[[NSUserDefaults standardUserDefaults] setObject:expirationDate forKey:@"ExpirationDate"];
NSDate *serverDate = [[AppDelegate sharedAppDelegate] serverDate];
NSString *strExpirateDate = [CommonUtilities getStringDateFromDate:expirationDate];
NSString *strServerDate = [CommonUtilities getStringDateFromDate:serverDate];
NSDate *dateExpiration = [CommonUtilities getDateFromDateString:strExpirateDate havingDateFormat:@"yyyy-MM-dd"];
NSDate *dateServer = [CommonUtilities getDateFromDateString:strServerDate havingDateFormat:@"yyyy-MM-dd"];
// CS Save data in default for reciept
[[NSUserDefaults standardUserDefaults] setObject:receiptInfo forKey:@"AppleReciept"];
[[NSUserDefaults standardUserDefaults] setObject:serverDate forKey:@"ServerDate"];
[[NSUserDefaults standardUserDefaults] setObject:expirationDate forKey:@"ExpirationDate"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSInteger daysDifference = [CommonUtilities getDifferenceBetweenStartDate:dateServer andEndDate:dateExpiration];
NSInteger daysRemainingInExpiration = [[CommonUtilities sharedManager] getMinDifferenceBetweenStartDate:serverDate andEndDate:expirationDate];
NSLog(@"Subscription expires +ve or -ve %ld",(long)daysRemainingInExpiration);
if (daysRemainingInExpiration >= 0)
{
[self saveNewInAppOfType:lastPurchase withExpirationDate:expirationDate];
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
return false;
}
有没有人有解决办法,请分享。
谢谢
最佳答案
在沙盒环境中测试 1 个月的苹果订阅时,收据似乎会自动续订大约六次(理论上)。有时我注意到收据会在五分钟后过期,有时则需要 30 分钟(自动续订六次)。
关于objective-c - Apple month autorenew 沙盒订阅不会在 5 分钟内过期并且不会在 apple receipt 中收到数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50837299/
一直以来中国版Apple Watch心不支持心电图功能,不过近日Apple Watch心电图终于在国行版上线了!那么Apple Watch心国内版心电图要如何使用呢?下面一起来看看吧! App
我正在尝试将“使用 Apple 登录”添加到我现有的 App ID。检查启用它的选项后,显示以下弹出窗口:带有此消息: If you're enabling an App ID for the fir
我有一个并发症,可能需要每 5 分钟更新一次。这很容易总结为每天 120 次更新。有没有办法只在用户唤醒 watch 时更新? 最佳答案 我认为您的问题的答案是否,目前没有办法只在用户唤醒 watch
我们正在测试新 Sign in with Apple我们的应用程序的功能,并且在初始请求时,我们会提供用户的全名和电子邮件地址(如果用户启用了这些选项)。 但是在随后的请求中,此数据不仅提供 iden
在我的苹果 watch 扩展中,我想使用长按手势功能。是否有任何 api 等效于 UILongPressGestureRecognizer。我的要求是,在 watch 扩展上,我有表格想要长按单元格,
有没有办法以编程方式显示苹果 map 中多个点之间的路线,如谷歌地图? 最佳答案 正如 MKMapItem 文档所述: If you specify the MKLaunchOptionsDirect
我一直在互联网上关注很多教程来学习如何设置并发症。按预期设置并发症我没有问题。 直到初始时间线条目过期。 12 小时后,我不知道如何更新它以保持并发症的存在。我将在下面分享我拥有的所有内容,希望有人可
我看到一本书的描述...... 书上说 /^Apple/ 会匹配字符串开头有一个 Apple 的字符串。所以它将匹配 Apple Apple1 AppleApple AppleABC ...... 书
众所周知,您可以禁止从允许接收 Apple 通知的应用程序接收通知。但是有谁知道禁用是在本地进行的(忽略 Apple 发送到应用程序的通知),还是 Apple 停止从它的服务器向您发送通知? 最佳答案
我有一个 Apple id,我正在构建一个使用 Apple 推送通知服务的应用程序,但我对此有点困惑。 Apple 执行此过程是否收费?它可以在安装了我的应用程序的特定数量的设备上运行是否有任何限制?
我正在制作一个音频播放器应用。 在苹果的音乐应用中,如果音乐专辑或播客没有插图,则显示音符图像或播客图标图像而不是插图。 我想做同样的事情。 我可以在我的应用程序中使用苹果音乐应用程序中的图像吗? 苹
我有一个自定义框架,我正在归档以在另一个项目中使用。更新到 Xcode11 后,我在使用该框架的项目中收到以下错误。 找不到目标“x86_64-apple-ios-simulator”的模块“MyCu
我有一个在 iOS 上运行良好的应用程序,但是当使用催化剂运行时,如果我在 macOS 上滑动到另一个虚拟桌面,然后再返回大约 10 次,它会间歇性地崩溃。它主要发生在 UICollectionVie
我正在使用 Xcode 开发 Apple Watch 应用程序。我想在屏幕的左上角放置一些文本,与列出时间的位置相邻。 当我将标签向上拖动到屏幕的一部分时,它会自动向下对齐。 我看到大多数 Apple
我似乎找不到在哪里设置我的 Apple Watch 应用程序的产品名称。我确实看到了产品名称选项,但更新它没有任何作用。也看不到文档中的任何内容 最佳答案 为了让您的应用程序名称在 iPhone 上的
问题:如何在我的服务器产品的安装程序中安全地包含推送通知所需的 SSL 证书? 背景:Apple 推送通知要求客户端 SSL 证书位于向 Apple 发出调用的服务器上。 我的产品采用传统的客户端/服
我已经在我的网站上实现了 Sign In with Apple。但问题是它只适用于我开发者的 Apple ID。 我尝试在同一环境中使用我的个人 Apple ID,并且登录过程也运行良好。 但是,当真
我的苹果触摸图标中的白色背景变黑了??我的白色背景不透明。该图标有一个白色三角形、红色圆圈和黑色文本。我唯一能辨认出来的是白色三角形和红色圆圈。知道是什么导致了这种情况以及如何使图标保持白色背景吗?
我正在考虑制作一个使用加速度计的 watchOS2 应用程序。如果应用程序在后台运行,它是否仍然能够接收来自加速度计或 CMMotionManager 的输入? 最佳答案 只有当 watchOS2 应
我想切换 Apple App Loader 使用的 Apple ID。 我找不到更改应用程序本身使用的帐户的方法。谷歌搜索没有带来任何有用的信息。当我启动加载程序应用程序时,它给我一个错误:“...您
我是一名优秀的程序员,十分优秀!