# クイックスタート

> CocoaPods または Swift Package Manager を使用して Tapjoy Offerwall を iOS アプリに統合し、Offerwall の機能をすぐに有効にすることができます。

## SDK のインテグレーション##sdk-integration

### CocoaPods##cocoapods

[CocoaPods](https://cocoapods.org/) は Objective-C と Swift の依存関係マネージャーです。

Tapjoy を使用するには、プロファイルに追加します。

```swift
    platform :ios, '13.0'
    source 'https://github.com/CocoaPods/Specs.git'

    use_frameworks!

    target 'MyApp' do
        pod 'TapjoySDK'
    end
```

CocoaPods を使用して統合する場合は、静的または動的フレームワークのオプションがあります。デフォルトは静的です。以下をプロファイルに追加して、動的フレームワークを選択できます。

```swift
pod 'TapjoySDK/Dynamic'
```

### Swift Package Manager##swift-package-manager

SDK v13.4.0 以降では、Swift Package Manager をサポートしています。

*File > Add Packages Dependancies* (追加 > パッケージ依存関係を追加) に移動します。右上の検索バーにリポジトリ `https://github.com/Tapjoy/swift-packages.git` を貼り付け、**Add Package** (パッケージを追加) を選択します。

## 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 値を使用していることが保証されます。

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

```swift title="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` メソッドに配置します。

```objective-c title="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;
}
```

```swift title="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 の問題のみを検出します。

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

- (void)tjcConnectFail:(NSNotification *)notifyObj
{
    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] : @"";
    NSLog(@"%@", underlyingErrorMessage);
}

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

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

@objc func tjcConnectFail(notif:NSNotification) {
    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)"
            NSLog(underlyingErrorMessage);
        }
    }
}

@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 App Name[25869:1433019] [TJLog level:4] Connect success with type:0
```

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

Tapjoy にゲーム内のレベル数を伝えることができます。この値は、connect を呼び出す前または後に設定できます。

```objective-c title="Objective-C"
[Tapjoy setMaxLevel:10]; 
```

```swift title="Swift"
Tapjoy.setMaxLevel(10) 
```

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

`setUserSegment` を呼び出すことで、ユーザーをセグメントの一部として識別できます。これは connect を呼び出す前または後に設定できます。

```objective-c title="Objective-C"
[Tapjoy setUserSegment:TJSegmentVIP];
[Tapjoy setUserSegment:TJSegmentPayer];
[Tapjoy setUserSegment:TJSegmentNonPayer];
[Tapjoy setUserSegment:TJSegmentUnknown]; 
```

```swift title="Swift"
Tapjoy.setUserSegment(TJSegment.VIP)
Tapjoy.setUserSegment(TJSegment.payer)
Tapjoy.setUserSegment(TJSegment.nonPayer)
Tapjoy.setUserSegment(TJSegment.unknown) 
```
