# 手動での統合

> SDK を手動で追加し、オファーウォール機能が有効になるようにプロジェクトを設定することで、Tapjoy Offerwall を iOS アプリに統合できます。

## SDK のダウンロード##download-sdk

アプリと統合するための最初のステップは、[iOS SDK をダウンロード](https://sdk.tapjoy.com/releases/14.8.0/TapjoySDK_iOS_v14.8.0.zip) することです。

## SDK をプロジェクトに加える##add-the-sdk-to-your-project

SDK を解凍すると、ドキュメント、ライブラリ、TapjoyEasyApp があります。

"TapjoyEasyApp" は、Tapjoy の統合を実演するサンプルプロジェクトです。Tapjoy をアプリケーションに統合する際には必要ありませんが、有用なリファレンスです。

ファイルをプロジェクトに追加するには、File (ファイル) を選択し、Add files to Project (ファイルをプロジェクトに追加) を選択します。"Libraries" フォルダーに移動し、`Tapjoy.xcframework` を選択します。ダイアログで、"copy items if needed" (必要な場合はアイテムをコピー) を選択してから、"Add" (追加) を選択します。

次に、ビルド設定で `Other Linker Flags (OTHER_LDFLAGS)` に移動し、`-ObjC` フラグを追加します。

### 必要なフレームワークを加える##add-required-frameworks

次のステップは、必要なフレームワークをプロジェクトに追加することです。これを行うには、プロジェクトナビゲーターでプロジェクトのアイコンを選択し、"ビルドフェーズ" (ビルドフェーズ) を選択します。次に、"Link Binary With Libraries" (バイナリをライブラリにリンク) を展開し、セクションの左下にある "+" 記号を選択します。フレームワークはアルファベット順に一覧表示され、CMD キーを長押しして複数のフレームワークを選択し、1 ステップで追加できます。

以下のすべてのフレームワークをプロジェクトに追加します。

* AdSupport
* CFNetwork
* CoreTelephony
* StoreKit
* SystemConfiguration
* UIKit
* WebKit
* libc++
* libz

## App Tracking Transparency 承認のリクエスト##request-app-tracking-transparency-authorization

アプリケーションが [App Tracking Transparency](https://developer.apple.com/documentation/apptrackingtransparency) を使用するように設計されている場合、IDFA へのアクセスをリクエストするダイアログを表示するには、アプリケーションで IDFA を使用するためのこの権限を説明するカスタムメッセージとともに `NSUserTrackingUsageDescription` キーを加えて Info.plist を更新します。

例を次に示します。

```text
<key>NSUserTrackingUsageDescription</key>
<string>This allows us to deliver personalized ads for you.</string>
```

![NSUserTrackingUsageDescription キーを含む情報プロパティリスト。](/api/media?file=/grow/media/images/att-desc-plist.png)

以下のスクリーンショットに示すように、使用目的の説明テキストが App Tracking Transparency 許可ダイアログの一部として表示されます。

![iOS アプリケーション追跡透明度権限ダイアログ。](/api/media?file=/grow/media/images/att-desc-ios.png)

`AppTrackingTransparency` フレームワークをプロジェクトに追加し、`requestTrackingAuthorizationWithCompletionHandler:` を呼び出して承認プロンプトを表示します。Tapjoy に接続する前に`requestTrackingAuthorization` 完了ハンドラーを待機することをお勧めします。これにより、すべてのリクエストで予期される IDFA 値を使用していることが保証されます。

1. **Objective-C**

   ```objective-c
   #import <apptrackingtransparency apptrackingtransparency.h>
   ... 
   - (void)fetchTrackingAuthorization { 
   [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { 
   // Call the Offerwall connect function here. 
   }]; 
   } 
   ```

2. **Swift**

   ```swift
   import AppTrackingTransparency
   ...
   func fetchTrackingAuthorization() {
     ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
       // Call the Offerwall connect function here.
     })
   }
   ```

## Tapjoy への接続##connect-to-tapjoy

次のステップは、アプリケーションに Tapjoy 接続コードを追加することです。このコードのキー ビットは、アプリケーションで Offerwall SDK を "オン" にします。

> **Note:**
>
> Tapjoy Connect 呼び出しは非常に重要です。正しく実装されていないと、Tapjoy の製品や機能は動作しません。\*

Tapjoy 接続呼び出しを実装するには、統合するアプリケーション用の Offerwall SDK キーが必要です。これを見つけるには、Tapjoy ダッシュボードでアプリケーションを操作し、上部のナビゲーションバーにある "Settings" (設定) ボタンを選択します。App Settings (アプリ設定) に移動すると、ページの下部に SDK
キーがあります。

次に、以下のコードスニペットをアプリケーションのアプリデリゲートファイルの `application:didFinishLaunchingWithOptions` メソッドに配置します。

1. **Objective-C**

   ```objective-c
   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
   {
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tjcConnectSuccess:) name:TJC_CONNECT_SUCCESS object:nil];
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tjcConnectFail:) name:TJC_CONNECT_FAILED object:nil];
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tjcConnectWarning:) name:TJC_CONNECT_WARNING object:nil];

       //Turn on Tapjoy debug mode
       [Tapjoy setLoggingLevel:TJLoggerLevelDebug]; //開発時のみデバッグモードを有効にします。アプリ公開前に無効にしてください。

       //If you are using Self-Managed currency, you need to set a user ID using the connect flags.
       NSDictionary *connectFlags = @{TJC_OPTION_USER_ID : @"<USER_ID_HERE>"};
       [Tapjoy connect:@"SDK_KEY_GOES_HERE" options:connectFlags];
       
       //If you are not using connect flags, you can omit them
       [Tapjoy connect:@"SDK_KEY_GOES_HERE"];

       return YES;
   }
   ```

2. **Swift**

   ```swift
   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey:Any]?) -> Bool {

       NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.tjcConnectSuccess(notif:)), name:NSNotification.Name(rawValue:TJC_CONNECT_SUCCESS), object: nil)
       
       NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.tjcConnectFail(notif:)), name:NSNotification.Name(rawValue:TJC_CONNECT_FAILED), object: nil)

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

       //Turn on Tapjoy debug mode
       Tapjoy.loggingLevel = .debug //開発時のみデバッグモードを有効にします。アプリ公開前に無効にしてください。
       
       //If you are using Self-Managed currency, you need to set a user ID using the connect flags.
       let connectFlags = [TJC_OPTION_USER_ID : "<USER_ID_HERE>"]
       Tapjoy.connect("SDK_KEY_GOES_HERE", options: connectFlags)
       
       //If you are not using connect flags, you can omit them
       Tapjoy.connect("SDK_KEY_GOES_HERE")
       
       return true
   }
   ```

メソッド `setLoggingLevel` は、接続呼び出しの前に定義する必要があります。接続フラグを使用してユーザー ID を設定することをお勧めします。そうすると、AppLaunch 配置が呼び出されたときに正しいユーザー ID を取得できるようになります。

詳細については、次の SDK リファレンスを参照してください: [Objective C](https://ltv.tapjoy.com/sdk/api/objc/Classes/Tapjoy.html) および [C++](https://ltv.tapjoy.com/sdk/api/cpp/index.html)。

## 接続の通知##connect-notifications

Tapjoy の接続が終了したとき、接続されたが警告があるとき、または接続に失敗したときに通知を受け取るには、前にセレクターとして設定したメソッドを実装する必要があります。`connectWarning` コールバックは、接続中にノンブロッキングの問題がある場合に発生します (その後に `connectSuccess` も発生します)。この機能は現在、ConnectFlags で送信されたときに UserId の問題のみを検出します。

1. **Objective-C**

   ```objective-c
   - (void)tjcConnectSuccess:(NSNotification *)notifyObj 
   {
       NSLog(@"Tapjoy connect succeeded");
   }

   - (void)tjcConnectFail:(NSNotification *)notifyObj 
   {
       NSLog(@"Tapjoy connect failed");
   }

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

2. **Swift**

   ```swift
   @objc func tjcConnectSuccess(notif: NSNotification) {
       NSLog("Tapjoy connect succeeded")
   }

   @objc func tjcConnectFail(notif:NSNotification) {
       NSLog("Tapjoy connect failed")
   }

   @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)")
           }
       }
   }
   ```

次に、アプリケーションをコンパイルして実行します。すべてを正しく実行すると、コンソールに以下のような出力が表示されます。

```swift
2020-01-29 16:01:55.422 Storyteller Roller[25869:1433019] [TJLog level:4] Connect success with type:0
```

Tapjoy ダッシュボード で、上部のナビゲーションの **Analytics** (分析) を選択し、左側のナビゲーションの "Real-time" (リアルタイム) タブを選択すると、実行直後にアプリケーションのアクティビティが表示されます。
