2015-11-22 101 views
0

對這個問題的任何反饋將是非常有益的。我已經構建了一個應用程序,允許我的用戶購買「積分」。一旦用戶通過選擇一個桌面視圖單元選擇他們想要購買的點數,它們將被帶到完成購買的視圖控制器(收集cc詳細信息等)。我正在使用Shopify的Mobile Buy SDK來協調這一點。iOS:用戶購買積分,購買後應如何跟蹤積分?

一旦用戶的結賬成功(假設我的用戶購買了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 { 

     } 
    }]; 


} 
+0

與您的服務器上的賬戶相關聯的點? Youmshoukdmstore您的服務器中該帳戶的餘額。如果他們只在本地設備上,那麼你可以使用鑰匙串。用於訪問應用程序中的功能或內容的點是?如果是這樣,你會因爲不使用蘋果應用內購買系統而被拒絕。 – Paulw11

+0

@ Paulw11嘿保羅 - 感謝您的反饋意見:蘋果的應用內購買系統。用戶將使用這些積分與其中一個和另一個進行交易,但是由於沒有購買積分,用戶將無法鎖定內容或功能(用戶可以選擇完全免費使用該應用)。思考? – Brittany

+0

@Gordonium建議:只是更新你的答案。 – zaph

回答

0

這很簡單。你需要做的是

  • 檢查哪些點用戶已經選擇
  • 商店信息在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]; 


} 
+0

我非常喜歡你把它放在一起 - 非常感謝你。我現在就開始實施這個,讓你知道它是怎麼回事!快速的問題是:如果我要保存NSUserDefaults的,且用戶與他們不同的設備上的用戶名和密碼登錄時,該點失去了什麼?沒有? – Brittany

+0

不幸的是,這些點對於常規NSUserDefaults中的設備是本地的。不過話說谷歌iCloud的鍵值數據教程。它們以與NSUserdefaults相同的方式存儲值,當然最好的部分是該變量中的值在所有設備之間共享。我只會在iCloud中儲存totalUsePoints。快樂編碼 –

+0

嘿山姆 - 真棒,謝謝。所以只是爲了澄清:如果我走這條路線,用戶將能夠從任何已連接到他們的iCloud帳戶的設備中檢索他們保存的數據? – Brittany