iOS:用户购买积分,购买后如何跟踪积分?

iOS:用户购买积分,购买后如何跟踪积分?,ios,objective-c,iphone,shopify,Ios,Objective C,Iphone,Shopify,关于这个问题的任何反馈都会非常有用。我已经建立了一个应用程序,允许我的用户购买“积分”。一旦用户通过选择tableview单元格选择他们想要购买的点数,这些点数将被带到完成购买的viewcontroller(收集cc详细信息等)。我正在使用Shopify的Mobile Buy SDK来协调这一过程 一旦用户结账成功(假设我的用户购买了30点积分),我如何在购买后在标签上显示该数字 简而言之:我想让我的代码显示用户在购买后当前拥有的点数。 额外背景:我的用户通过Drupal登录到我的应用程序(我正

关于这个问题的任何反馈都会非常有用。我已经建立了一个应用程序,允许我的用户购买“积分”。一旦用户通过选择tableview单元格选择他们想要购买的点数,这些点数将被带到完成购买的viewcontroller(收集cc详细信息等)。我正在使用Shopify的Mobile Buy SDK来协调这一过程

一旦用户结账成功(假设我的用户购买了30点积分),我如何在购买后在标签上显示该数字

简而言之:我想让我的代码显示用户在购买后当前拥有的点数。

额外背景:我的用户通过Drupal登录到我的应用程序(我正在使用Drupal iOS SDK)。我几乎想知道是否有一种方法可以让我使用Shopify模块来跟踪这一点

请参阅下面的一些代码以供参考

Tableviewcontroller.m(用户选择要购买的点数,点数被添加到购物车,用户被推到签出viewcontroller)

CheckoutViewController.m(用户输入详细信息,点击购买按钮,结帐完成)


这很容易。你需要做的是

  • 检查用户选择的点
  • 将该信息存储在NSUserDefault中
  • 如果购买成功,则将该值转换为int并添加到另一个NSUserDefaults
  • 使用该信息在您喜欢的任何地方显示该信息,如UILabel等
示例代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

// ... your code 
   //i assume this variant has user points?
    BUYProductVariant *variant = [product.variants firstObject];

NSString *pointsStr = [NSString stringWithFormat:@"%@", variant];

[[NSUserDefaults standardUserDefaults] setObject:pointsStr forKey:@"UserWantsToBuyPoints"];
    [[NSUserDefaults standardUserDefaults] synchronize];

}
现在,在您成功完成购买后,请执行此操作

- (IBAction)purchasePoints:(id)sender {


    //... your code


    [client storeCreditCard:creditCard checkout:self.checkout completion:^(BUYCheckout *returnedCheckout, NSString *paymentSessionId, NSError *error) {
        if (error == nil) {
//purchase was successful
NSString *pointsStr = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserWantsToBuyPoints"];

//incase he already had points from some previous purchase
NSString *totalUsePoints = [[NSUserDefaults standardUserDefaults] objectForKey:@"totalUsePoints"];

int pointsInt = [pointsStr intVal];
int totalUsePointsInt = [totalUsePoints intVal];

totalUsePointsInt = totalUsePointsInt + pointsInt;

NSString *totalStr = [NSString stringWithFormat:@"%d", totalUsePointsInt];

[[NSUserDefaults standardUserDefaults] setObject:totalStr forKey:@"totalUsePoints"];
    [[NSUserDefaults standardUserDefaults] synchronize];


}

这些点是否与服务器上的帐户关联?Youmshoukdms将该帐户的余额存储在服务器中。如果它们仅在本地设备中,则可以使用keychain。这些点是否用于访问应用程序中的功能或内容?如果是这样,您将因未使用苹果应用程序内购买系统而被拒绝。@Paulw11嘿,Paul-感谢您的反馈:苹果的应用程序内购买系统。用户将使用积分与其中一个或另一个进行服务交易,但不会因为不购买积分而锁定任何内容或功能(用户可以选择完全免费使用应用程序)。想法?@Gordonium建议:只需更新您的答案。@Brittany hello plz您能帮我添加购物车功能吗?我非常喜欢您将这些功能组合在一起-非常感谢。我现在就开始实现它,并让您知道它是如何运行的!快速提问:如果我保存到NSUserDefaults,并且用户使用其用户名和密码在不同的设备上登录,那么积分会丢失吗?否?很遗憾,是的,这些点在常规NSUserDefault中是设备的本地点。但话说回来,谷歌iCloud关键价值数据教程。它们存储值的方式与NSUserdefaults相同,当然最好的部分是该变量中的值在所有设备中共享。我只会在iCloud中存储totalUsePoints。祝你快乐,山姆-太棒了,谢谢你。所以我想澄清一下:如果我这样做,用户将能够从任何连接到他们iCloud帐户的设备上检索他们保存的数据?当然。不久前,我刚刚在最新的appAwesome中实现了这样的功能。我喜欢这个。虽然我确实想知道,从长远来看,我们是否计划在Android上推出该应用程序,以及其他什么。也就是说,苹果倾向于对那些使用铃铛和口哨的人微笑,哈哈。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

// ... your code 
   //i assume this variant has user points?
    BUYProductVariant *variant = [product.variants firstObject];

NSString *pointsStr = [NSString stringWithFormat:@"%@", variant];

[[NSUserDefaults standardUserDefaults] setObject:pointsStr forKey:@"UserWantsToBuyPoints"];
    [[NSUserDefaults standardUserDefaults] synchronize];

}
- (IBAction)purchasePoints:(id)sender {


    //... your code


    [client storeCreditCard:creditCard checkout:self.checkout completion:^(BUYCheckout *returnedCheckout, NSString *paymentSessionId, NSError *error) {
        if (error == nil) {
//purchase was successful
NSString *pointsStr = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserWantsToBuyPoints"];

//incase he already had points from some previous purchase
NSString *totalUsePoints = [[NSUserDefaults standardUserDefaults] objectForKey:@"totalUsePoints"];

int pointsInt = [pointsStr intVal];
int totalUsePointsInt = [totalUsePoints intVal];

totalUsePointsInt = totalUsePointsInt + pointsInt;

NSString *totalStr = [NSString stringWithFormat:@"%d", totalUsePointsInt];

[[NSUserDefaults standardUserDefaults] setObject:totalStr forKey:@"totalUsePoints"];
    [[NSUserDefaults standardUserDefaults] synchronize];


}