# 更新ガイド

> Tapjoy Offerwall iOS SDK のバージョンを適切に更新して、問題を回避し、互換性を維持してください。

このガイドでは、Offerwall SDK をあるバージョンから別のバージョンに更新する際に必要なステップについて説明します。問題や競合を防ぐために、すべてのステップを実行することをお勧めします。

以下に、特定のバージョンの Offerwall SDK に更新する場合に必要な追加の手順を説明します。

## 14.3.0##14.3.0

* `[Tapjoy setDebugEnabled:YES]` が使用されている場合はすべて `[Tapjoy setLoggingLevel:TJLoggerLevelDebug]` に置き換えます。前者は非推奨になりました。

* ログレベルは、エラー、警告、情報、デバッグです。

* `TJC_OPTION_ENABLE_LOGGING` が使用されている場合はすべて `TJC_OPTION_LOGGING_LEVEL` に置き換えます。前者は非推奨になりました。

## 14.2.0##14.2.0

* 非推奨の TJPlacement didClick コールバックが使用されている場合は、すべて削除します。次のメジャーバージョンでは削除され、何も行われなくなります。
* 非推奨の getSupportURL メソッドが使用されている場合は、すべて削除します。次のメジャーバージョンでは削除され、何も行われなくなります。

## 14.0.0##14.0.0

* 非推奨のメソッド `[Tapjoy trackPurchase]` が使用されている場合は、`trackPurchaseWithCurrencyCode:(NSString *)currencyCode price:(double)price` に置き換えます。

## 13.4.0##13.4.0

新しい `connectWarning` コールバックを追加しました。これは、接続中にノンブロッキングの問題がある場合に発生し、その後に `connectSuccess` も発生します。この機能は現在、ConnectFlags で送信されたときに UserId の問題のみを検出します。

1. **Objective-C**

   ```objective-c
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tjcConnectWarning:) name:TJC_CONNECT_WARNING object:nil];

   - (void)tjcConnectWarning:(NSNotification *)notifyObj 
   {
       NSError *error = notifyObj.userInfo[TJC_CONNECT_USER_INFO_ERROR];
       NSError *underlyingError = error.userInfo[NSUnderlyingErrorKey];
   }
   ```

2. **Swift**

   ```swift
   NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.tjcConnectWarning(notif:)), name: NSNotification.Name(rawValue: TJC_CONNECT_WARNING), object: nil)

   @objc func tjcConnectWarning(notif: NSNotification) {
       var message = "Tapjoy Connect Warning"
       if let error = notif.userInfo?[TJC_CONNECT_USER_INFO_ERROR] as? NSError {
           message.append("\nError: \(error.code) - \(error.localizedDescription)")
           if let underlyingError = error.userInfo[NSUnderlyingErrorKey] as? NSError {
               message.append("\nUnderlying Error: \(underlyingError.code) - \(underlyingError.localizedDescription)")
           }
       }
   }
   ```

## 13.2.0##13.2.0

### Connect##connect

`connectFailure` コールバックにエラーコードとメッセージパラメーターを追加しました。以前のコールバックは非推奨になりましたが、引き続き機能します。

1. **Objective-C**

   ```objective-c
   NSError *error = notifyObj.userInfo[TJC_CONNECT_USER_INFO_ERROR];
   NSInteger code = error.code;
   NSString *message = error.localizedDescription;
   NSString *underlyingErrorMessage = underlyingError != nil ? [NSString stringWithFormat:@" - %li %@", underlyingError.code, underlyingError.localizedDescription] : @""; 
   ```

2. **Swift**

   ```swift
   if let error = notif.userInfo?[TJC_CONNECT_USER_INFO_ERROR] as? NSError {
       let code = error.code
       let message = error.localizedDescription
       if let underlyingError = error.userInfo[NSUnderlyingErrorKey] as? NSError {
           let underlyingErrorMessage = "\nUnderlying Error: \(underlyingError.code) - \(underlyingError.localizedDescription)"
       }
   }
   ```

### 最大ユーザーレベル##max-user-level

ゲーム内のレベル数を設定できるようになりました。接続前または接続後に設定できます。

1. **Objective-C**

   ```objective-c
   [Tapjoy setMaxLevel:10]; 
   ```

2. **Swift**

   ```swift
   Tapjoy.setMaxLevel(10) 
   ```

### ユーザーセグメント##user-segment

アプリを現在使用しているユーザーのタイプを設定できるようになりました。これは接続前、接続後、またはセッション中に設定できます。

1. **Objective-C**

   ```objective-c
   [Tapjoy setUserSegment:TJSegmentVIP];
   [Tapjoy setUserSegment:TJSegmentPayer];
   [Tapjoy setUserSegment:TJSegmentNonPayer];
   [Tapjoy setUserSegment:TJSegmentUnknown]; 
   ```

2. **Swift**

   ```swift
   Tapjoy.setUserSegment(TJSegment.VIP)
   Tapjoy.setUserSegment(TJSegment.payer)
   Tapjoy.setUserSegment(TJSegment.nonPayer)
   Tapjoy.setUserSegment(TJSegment.unknown) 
   ```

### エントリーポイント##entry-point

*request connect* を呼び出す前に、エントリーポイントを設定できます。これは、プレースメントがアプリのどこに表示されるかを示します。複数のプリセット値から 1 つを選択できます。

1. **Objective-C**

   ```objective-c
   TJPlacement *placement = [TJPlacement placementWithName:@"myPlacement" delegate:nil];
   [placement setEntryPoint:TJEntryPointMainMenu];
   [placement requestContent]; 

   // Values available
   TJEntryPointUnknown //設定されていないが、すでに設定されているすべての値を削除します
   TJEntryPointOther
   TJEntryPointMainMenu
   TJEntryPointHud
   TJEntryPointExit
   TJEntryPointFail
   TJEntryPointComplete
   TJEntryPointInbox 
   TJEntryPointInitialisation
   TJEntryPointStore 
   ```

2. **Swift**

   ```swift
   let placement = TJPlacement(name: "myPlacement", delegate: nil)
   placement?.entryPoint = TJEntryPoint.mainMenu
   placement?.requestContent() 

   // Values available
   TJEntryPoint.unknown
   TJEntryPoint.other
   TJEntryPoint.mainMenu
   TJEntryPoint.hud
   TJEntryPoint.exit
   TJEntryPoint.fail
   TJEntryPoint.complete
   TJEntryPoint.inbox
   TJEntryPoint.initialisation
   TJEntryPoint.store
   ```

### 通貨##currency

* get/spend/earn が負の値を受け付けなくなります。
* 自己管理通貨が管理通貨の API を呼び出すと、エラーが返されます。

プレースメントを作成する前にユーザーのバランスを設定できるようになりました。*requestContent* の前に設定する必要があります。

1. **Objective-C**

   ```objective-c
   TJPlacement* placement = [TJPlacement placementWithName:@"placementName" delegate:nil];
   [placement setBalance:100 forCurrencyId:@"1234" withCompletion:^(NSError * _Nullable error) {
       if (error != nil) {
           //Failure
           NSString *message = error.localizedDescription;
       } else {
           //Success
       }
   }]; 
   ```

2. **Swift**

   ```swift
   let placement = TJPlacement(name: "placementName", delegate: nil)
   placement?.setBalance(100, forCurrencyId:"1234", withCompletion: { error in
       if let error = error {
           //Failure
           let message = error.localizedDescription
       } else {
           //Success
       }
   }) 
   ```

ユーザーが目標を達成するために必要な通貨の金額を各プレースメントで設定することもできます。

1. **Objective-C**

   ```objective-c
   TJPlacement* placement = [TJPlacement placementWithName:@"placementName" delegate:nil];
   placement setRequiredAmount:100 forCurrencyId:@"1234" withCompletion:^(NSError * _Nullable error) {
       if (error != nil) {
           //Failure
           NSString *message = error.localizedDescription;
       } else {
           //Success
       }
   } 
   ```

2. **Swift**

   ```swift
   let placement = TJPlacement(name: "placementName", delegate: nil)
   placement?.setRequiredAmount(100, forCurrencyId: "1234", withCompletion: { error in
       if let error = error {
           //Failure
           let message = error.localizedDescription
       } else {
           //Success
       }
   }) 
   ```

## 12.8.0##12.8.0

Offerwall SDK が XCFramework を使用するようになり、個別のリソースバンドルが不要になりました。`Tapjoy.xcframework` を追加する前に、`Tapjoy.framework` と `TapjoyResources.bundle` を削除します。
