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

iOS: User purchases points, how should I track points after purchase?

对此问题的任何反馈都将非常有帮助。我构建了一个应用程序,允许我的用户购买 "points"。一旦用户通过选择 tableview 单元格选择了他们想要购买的点数,他们就会被带到 viewcontroller 完成购买(收集 cc 详细信息等)。我正在使用 Shopify 的 Mobile Buy SDK 来协调这个。

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

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

额外背景: 我的用户通过 Drupal 登录到我的应用程序(我使用的是 Drupal iOS SDK)。我几乎想知道我是否有办法以某种方式使用 Shopify 模块来跟踪它?

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

Tableviewcontroller.m(用户选择要购买的积分数,积分添加到购物车,用户被推送到结帐viewcontroller)

        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
        {

    static NSString *PointsTableIdentifier = @"PointsCell";

            PointsCell *cell = (PointsCell *)[tableView dequeueReusableCellWithIdentifier:PointsTableIdentifier];
            if (cell == nil)
            {
                NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PointsCell" owner:self options:nil];
                cell = [nib objectAtIndex:0];

            }


            BUYProduct *productsbuy = self.products[indexPath.row];
            cell.productLabel.text = productsbuy.title;

            BUYProduct *productDescription = self.products[indexPath.row];
            cell.productDescrip.text = productDescription.htmlDescription;


            BUYProduct *pointValues = self.products[indexPath.row];
            BUYProductVariant *variant = pointValues.variants.firstObject;

            cell.priceLabel.text = [NSString stringWithFormat:@"%@", variant.price];

            return cell;

        }

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

  // BUYCart *cart = [[BUYCart alloc] init];

    BUYProduct *product = self.products[indexPath.row];

    BUYProductVariant *variant = [product.variants firstObject];


    if (!self.cart) {
        self.cart = [BUYCart singleton];
    }
    [self.cart addVariant:variant];

        NSLog(@"%@",variant);


    PayViewController *checkOutVC = [[PayViewController alloc]initWithNibName:nil bundle:nil];

    [self.navigationController pushViewController:checkOutVC animated:YES];


}

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

- (IBAction)purchasePoints:(id)sender {


    BUYCreditCard *creditCard = [[BUYCreditCard alloc] init];
    creditCard.number = self.cardNumber.text;
    creditCard.expiryMonth = self.expMonth.text;
    creditCard.expiryYear = self.expYear.text;
    creditCard.cvv = self.csvNumber.text;
    creditCard.nameOnCard = self.fullcardName.text;

    BUYClient *client = [BUYClient singleton];

    [client storeCreditCard:creditCard checkout:self.checkout completion:^(BUYCheckout *returnedCheckout, NSString *paymentSessionId, NSError *error) {
        if (error == nil) {
            self.checkout = returnedCheckout;

             [self tryCompleteCheckout];

        } else {

        }
    }];


}

这很简单。你需要做的是

  • 检查用户选择了哪些点
  • 将该信息存储在 NSUserDefaults 中
  • 如果购买成功将该值转换为 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];


}