Tapjoy管理仮想通貨は、Tapjoy のサーバにユーザの仮想通貨の残高を保持するものです。この機能は、Tapjoy SDKを実装するアプリ開発者に対して無償で提供されるサービスです。 この方法を利用する場合、アプリ開発者はユーザーの仮想通貨データを保存するためのシステム構築の作業が必要ありません。実装は比較的簡単で、下記のように行います。
ユーザーの仮想通貨残高を取得するには、下記のメソッドを呼び出します:
仮想通貨のベスト プラクティス: ユーザーの最新の残高を得るために、getCurrencyBalance を多くの箇所で呼ぶようにする事をお勧めします。通常はアプリ起動時、レジューム時、Tapjoyコンテンツが閉じた時にユーザーの残高をチェックします。また、広告コンテンツが閉じた3.5秒後にgetCurrencyBalanceを呼び出す事を特にお勧めします。これにより、広告が終了した後にTapjoyサーバがユーザーの仮想通貨残高を変更する時間的余裕が取れるようになります。コンテンツ表示終了直後にgetCurrencyBalanceを呼ぶと、リワード額の残高への反映が間に合わない場合があります。
注: Tapjoyはユーザーへのリワードを可能な限り素早く付与しますが、ユーザーがすぐにリワードされる事は保証できません。ユーザーへリワードを行う時間に関わる要素が多く割るため、ユーザーへのリワードが行われる時間を決定する事は困難です。ベスト・プラクティスとしては、動画広告が閉じた後に仮想通貨残高をチェックするのに加え、定期的、および起動・レジューム・レベル完了・アプリ内ストアの表示前等のアプリイベントで残高を確認する事をお勧めします。また、ユーザーにオファーの完了までに時間がかかる場合がある旨を知らせておく事もお勧めします。
// This method requests the tapjoy server for current virtual currency of the user.
//Get currency
[Tapjoy getCurrencyBalanceWithCompletion:^(NSDictionary *parameters, NSError *error) {
if (error) {
//Show error message
NSLog(@"getCurrencyBalance error: %@", [error localizedDescription]);
} else {
//Update currency value of your app
NSLog(@"getCurrencyBalance returned %@: %d", parameters[@"currencyName"], [parameters[@"amount"] intValue]);
}
}];
上記のように、仮想通貨残高はコンプリーションのブロックで通知されます。parametersディクショナリの“currencyName”キーで仮想通貨の名前が、"amount"でユーザーの残高が取得できます。
実証の詳細についてはSDKパッケージに含まれるサンプルアプリを参考にして下さい。
Tapjoy.getCurrencyBalance(new TJGetCurrencyBalanceListener(){
@Override
public void onGetCurrencyBalanceResponse(String currencyName, int balance) {
Log.i(TAG, "getCurrencyBalance returned " + currencyName + ":" + balance);
}
@Override
public void onGetCurrencyBalanceResponseFailure(String error) {
Log.i("Tapjoy", "getCurrencyBalance error: " + error);
}
});
仮想通貨残高は TJGetCurrencyBalanceListener に実装した onGetCurrencyBalanceResponse(String currencyName, int balance) コールバックで currencyName が仮想通貨名、balance が仮想通貨残高となるパラメータで通知されます。エラーについては onGetCurrencyBalanceResponseFailure(String error) コールバックメソッドに通知されます。
注: getCurrencyBalance(…) をアプリの起動時やレジューム時に呼び出す事をお勧めします。仮想通貨のSPENDおよびAWARDを行う場合のコールバックでもユーザーの仮想通貨残高が通知されるので、この値をユーザーの最新の仮想通貨残高として使用して下さい。
// Get currency
Tapjoy.GetCurrencyBalance();
// on enable, add delegates
void OnEnable() {
Tapjoy.OnGetCurrencyBalanceResponse += HandleGetCurrencyBalanceResponse;
Tapjoy.OnGetCurrencyBalanceResponseFailure += HandleGetCurrencyBalanceResponseFailure;
}
// on disable, remove delegates
void OnDisable() {
Tapjoy.OnGetCurrencyBalanceResponse -= HandleGetCurrencyBalanceResponse;
Tapjoy.OnGetCurrencyBalanceResponseFailure -= HandleGetCurrencyBalanceResponseFailure;
}
public void HandleGetCurrencyBalanceResponse(string currencyName, int balance) {
Debug.Log("C#: HandleGetCurrencyBalanceResponse: currencyName: " + currencyName + ", balance: " + balance);
}
public void HandleGetCurrencyBalanceResponseFailure(string error) {
Debug.Log("C#: HandleGetCurrencyBalanceResponseFailure: " + error);
}
仮想通貨残高はOnGetCurrencyBalanceResponseに指定したハンドラに currencyName と balance パラメータで通知されます。エラーについてはOnGetCurrencyBalanceResponseFailure ハンドラにエラー詳細がerror パラメータとして通知されます。
// Get currency
TapjoyAIR.getCurrencyBalance();
// Setup handlers
TapjoyAIR.addEventListener(TJCurrencyEvent.GET_CURRENCY_BALANCE_SUCCESS, tapjoyCurrencyEventHandler);
TapjoyAIR.addEventListener(TJCurrencyEvent.GET_CURRENCY_BALANCE_FAILURE, tapjoyCurrencyEventHandler);
private function tapjoyCurrencyEvents(event:TJCurrencyEvent):void {
trace("Tapjoy sample event listener for " + event.type + ", " + event.balance + ", " + event.currencyName);
}
仮想通貨残高は TJCurrencyEvent.GET_CURRENCY_BALANCE_SUCCESS に指定したハンドラに currencyName と balance プロパティを持つオブジェクトで通知されます。エラーはTJCurrencyEvent.GET_CURRENCY_BALANCE_FAILURE ハンドラで通知されます。
アプリが最後にユーザーの仮想通貨残高を確認してから、ユーザーが仮想通貨を得た場合にユーザーに通知するには、ノーティフィケーション オブザーバを次のように指定します:
// Set the notification observer for earned-currency-notification. It's recommended that this be placed within the applicationDidBecomeActive method.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showEarnedCurrencyAlert:) name:TJC_CURRENCY_EARNED_NOTIFICATION object:nil];
// In the following method, you can set a custom message or use the default UIAlert to inform the user that they just earned some currency.
- (void)showEarnedCurrencyAlert:(NSNotification*)notifyObj
{
NSNumber *currencyEarned = notifyObj.object;
int earnedNum = [currencyEarned intValue];
NSLog(@"Currency earned: %d", earnedNum);
// Pops up a UIAlert notifying the user that they have successfully earned some currency.
// This is the default alert, so you may place a custom alert here if you choose to do so.
[Tapjoy showDefaultEarnedCurrencyAlert];
// This is a good place to remove this notification since it is undesirable to have a pop-up alert more than once per app run.
[[NSNotificationCenter defaultCenter] removeObserver:self name:TJC_CURRENCY_EARNED_NOTIFICATION object:nil];
}
アプリが最後にユーザーの仮想通貨残高を確認してから、ユーザーが仮想通貨を得た場合にユーザーに通知するには、CurrencyListenerを次のように指定します:
// Get notifications whenever Tapjoy currency is earned.
Tapjoy.setEarnedCurrencyListener(new TJEarnedCurrencyListener() {
@Override
public void onEarnedCurrency(String currencyName, int amount) {
Log.i("Tapjoy", "You've just earned " + amount + " " + currencyName);
}
});
TJEarnedCurrencyListenerに実装したonEarnedCurrency(String currencyName, int amount)コールバックに通知されるようになります。例えば、ある時点での仮想通貨残高が100で、ユーザーが25仮想通貨のオファーを完了したとします。getCurrencyBalance()メソッドが次に呼ばれると、 onEarnedCurrency メソッドが amount に 25 の値で呼ばれます。
// on enable, add delegates
void OnEnable() {
Tapjoy.OnEarnedCurrency += HandleEarnedCurrency;
}
// on disable, remove delegates
void OnDisable() {
Tapjoy.OnEarnedCurrency -= HandleEarnedCurrency;
}
public void HandleEarnedCurrency(string currencyName, int amount) {
Debug.Log("C#: HandleEarnedCurrency: currencyName: " + currencyName + ", amount: " + amount);
}
OnEarnedCurrency に指定したハンドラに、currencyName と amount パラメータ で増えた仮想通貨が通知されます。
TapjoyAIR.addEventListener(TJEarnedCurrencyEvent.EARNED_CURRENCY, tapjoyEarnedCurrencyEventHandler);
private function tapjoyEarnedCurrencyEventHandler(event:TJEarnedCurrencyEvent):void
{
trace("You can notify user's here that they've just earned " + event.amount + " " + event.currencyName);
}
TJEarnedCurrencyEvent.EARNED_CURRENCY に指定したハンドラに、TJEarnedCurrencyEvent オブジェクトで通知されます。そのオブジェクトには currencyName と amount プロパティが指定されています。
ユーザーの仮想通貨を消費するには、次のメソッドを呼び出します:
// This method call will deduct 10 virtual currencies from the user's total.
[Tapjoy spendCurrency:10 completion:^(NSDictionary *parameters, NSError *error) {
if (error) {
NSLog(@"spendCurrency error: %@", [error localizedDescription]);
} else {
NSLog(@"spendCurrency returned %@: %d", parameters[@"currencyName"], [parameters[@"amount"] intValue])
}
}];
上記にあるように、コンプリーション ブロックで "currencyName" に仮想通貨名、"amout" に残高を含むparameterディクショナリオブジェクトで仮想通貨残高が通知されます。
Tapjoy.spendCurrency(10, new TJSpendCurrencyListener() {
@Override
public void onSpendCurrencyResponse(String currencyName, int balance) {
Log.i("Tapjoy", currencyName + ": " + balance);
}
@Override
public void onSpendCurrencyResponseFailure(String error) {
Log.i("Tapjoy", "spendCurrency error: " + error);
}
});
TJSpendCurrencyListener のonSpendCurrencyResponse(String currencyName, int balance) に実装したメソッドに仮想通貨残高が通知されます。エラーの場合にはonSpendCurrencyResponseFailure(String error)メソッドに通知されます。
// Spend currency
Tapjoy.SpendCurrency(10);
// on enable, add delegates
void OnEnable() {
Tapjoy.OnSpendCurrencyResponse += HandleSpendCurrencyResponse;
Tapjoy.OnSpendCurrencyResponseFailure += HandleSpendCurrencyResponseFailure;
}
// on disable, remove delegates
void OnDisable() {
Tapjoy.OnSpendCurrencyResponse -= HandleSpendCurrencyResponse;
Tapjoy.OnSpendCurrencyResponseFailure -= HandleSpendCurrencyResponseFailure;
}
public void HandleSpendCurrencyResponse(string currencyName, int balance) {
Debug.Log("C#: HandleSpendCurrencyResponse: currencyName: " + currencyName + ", balance: " + balance);
}
public void HandleSpendCurrencyResponseFailure(string error) {
Debug.Log("C#: HandleSpendCurrencyResponseFailure: " + error);
}
OnSpendCurrencyResponseに指定したハンドラにcurrencyNameおよびbalanceパラメータで仮想通貨残高が通知されます。エラーの場合にはOnSpendCurrencyResponseFailureハンドラに通知されます。
// Spend currency
TapjoyAIR.spendCurrency(10);
// Setup handlers
TapjoyAIR.addEventListener(TJCurrencyEvent.SPEND_CURRENCY_SUCCESS, tapjoyCurrencyEventHandler);
TapjoyAIR.addEventListener(TJCurrencyEvent.SPEND_CURRENCY_FAILURE, tapjoyCurrencyEventHandler);
private function tapjoyCurrencyEventHandler(event:TJCurrencyEvent):void {
trace("Tapjoy sample event listener for " + event.type + ", " + event.balance + ", " + event.currencyName);
}
TJCurrencyEvent.SPEND_CURRENCY_SUCCESSに指定したハンドラに仮想通貨残高が通知されます。引数のTJCurrencyEventオブジェクトはcurrencyNameおよびbalanceプロパティを含んでいます。エラーの場合にはTJCurrencyEvent.SPEND_CURRENCY_FAILUREハンドラに通知されます。
ご不便をおかけしますが、新規アプリで本機能をご利用になる場合はアカウントマネージャーにご相談の上、許可を得る必要があります。
ユーザーの仮想通貨を増加するには、次のメソッドを呼び出します:
// This method call will award 10 virtual currencies to the user's total.
[Tapjoy awardCurrency:10 completion:^(NSDictionary *parameters, NSError *error) {
if (error) {
NSLog(@"awardCurrency error: %@", [error localizedDescription]);
} else {
NSLog(@"awardCurrency returned %@: %d", parameters[@"currencyName"], [parameters[@"amount"] intValue])
}
}];
上記にあるように、コンプリーション ブロックで "currencyName" に仮想通貨名、"amout" に残高を含むparameterディクショナリオブジェクトで仮想通貨残高が通知されます。
Tapjoy.awardCurrency(10, new TJAwardCurrencyListener() {
@Override
public void onAwardCurrencyResponseFailure(String error) {
Log.i("Tapjoy", "awardCurrency error: " + error); }
@Override
public void onAwardCurrencyResponse(String currencyName, int balance) {
Log.i("Tapjoy", currencyName + ": " + balance);
}
});
TJAwardCurrencyListener onAwardCurrencyResponse(String currencyName, int balance) に実装したメソッドに仮想通貨残高が通知されます。
// Award currency
Tapjoy.AwardCurrency(10);
// on enable, add delegates
void OnEnable() {
Tapjoy.OnAwardCurrencyResponse += HandleAwardCurrencyResponse;
Tapjoy.OnAwardCurrencyResponseFailure += HandleAwardCurrencyResponseFailure;
}
// on disable, remove delegates
void OnDisable() {
Tapjoy.OnAwardCurrencyResponse -= HandleAwardCurrencyResponse;
Tapjoy.OnAwardCurrencyResponseFailure -= HandleAwardCurrencyResponseFailure;
}
public void HandleAwardCurrencyResponse(string currencyName, int balance) {
Debug.Log("C#: HandleAwardCurrencySucceeded: currencyName: " + currencyName + ", balance: " + balance);
}
public void HandleAwardCurrencyResponseFailure(string error) {
Debug.Log("C#: HandleAwardCurrencyResponseFailure: " + error);
}
OnAwardCurrencyResponseに指定したハンドラにcurrencyNameおよびbalanceパラメータで仮想通貨残高が通知されます。エラーの場合にはOnAwardCurrencyResponseFailureハンドラに通知されます。
// Award currency
TapjoyAIR.awardCurrency(10);
// Setup handlers
TapjoyAIR.addEventListener(TJCurrencyEvent.AWARD_CURRENCY_SUCCESS, tapjoyCurrencyEventHandler);
TapjoyAIR.addEventListener(TJCurrencyEvent.AWARD_CURRENCY_FAILED, tapjoyCurrencyEventHandler);
private function tapjoyCurrencyEventHandler(event:TJCurrencyEvent):void {
trace("Tapjoy sample event listener for " + event.type + ", " + event.balance + ", " + event.currencyName);
}
TJCurrencyEvent.AWARD_CURRENCY_SUCCESSに指定したハンドラに仮想通貨残高が通知されます。引数のTJCurrencyEventオブジェクトはcurrencyNameおよびbalanceプロパティを含んでいます。エラーの場合にはTJCurrencyEvent.AWARD_CURRENCY_FAILUREハンドラに通知されます。
オファーウォールでテスト広告をみる場合、アプリにテスト端末を追加します。 これによりオファーウォールにテスト広告が表示されるため、仮想通貨を容易にテストできるようになります。
また、Tapjoyダッシュボードの"Get User Balance"ツールを使う事もできます:
アプリがこのツールで表示される値と違う残高を表示している場合、アプリがTapjoyで管理している仮想通貨と同期していない事になります。こうした状況は通常はアプリで getCurrencyBalance を充分な頻度で呼ぶ事で修正できます。
注意: Tapjoyはユーザーへのリワードを可能な限り素早く付与しますが、ユーザーがすぐにリワードされる事は保証できません。ユーザーへリワードを行う時間に関わる要素が多く割るため、ユーザーへのリワードが行われる時間を決定する事は困難です。ベスト・プラクティスとしては、動画広告が閉じた後に仮想通貨残高をチェックするのに加え、定期的、および起動・レジューム・レベル完了・アプリ内ストアの表示前等のアプリイベントで残高を確認する事をお勧めします。また、ユーザーにオファーの完了までに時間がかかる場合がある旨を知らせておく事もお勧めします。