在应用中可以集成多盟或者其他第三方移动广告商的积分墙增加自己收入。这篇文章简单介绍如何在应用中集成多盟的积分墙。
积分墙是用户完成移动广告商提供的积分任务后获取的相应积分,积分可以转换成游戏中的金币或者道具。首先你需要去多盟创建一个你的应用,创建完毕之后,你会得到一个PublishID,对应你的app。
这里简单写了一个积分墙Manager类,如果大家有需要,可以直接集成到你们的app中。
你只需要在显示积分墙的时候调用如下代码即可加载多盟积分墙。
[[CPOfferWallManager shareManager] presentOfferWall];
CPOfferWallManager.h头文件
//
// CPOfferWallManager.h
// ChickenRun
//
// Created by yangkun on 7/5/13.
//
//
#import <Foundation/Foundation.h>
#import "DMOfferWallViewController.h"
#define PUBLISHER_ID @"Your App PublishID" //替换成你的publishID
@interface CPOfferWallManager : NSObject<DMOfferWallDelegate,UIAlertViewDelegate> {
DMOfferWallViewController *_offerWallController;
int _lastConsumed;
}
+(CPOfferWallManager *)shareManager;
-(void)presentOfferWall;
@end
CPOfferWallManager.m文件
//
// CPOfferWallManager.m
// ChickenRun
//
// Created by yangkun on 7/5/13.
//
//
#import "CPOfferWallManager.h"
#import "DataManager.h"
#import "AppDelegate.h"
static CPOfferWallManager *_manager;
@implementation CPOfferWallManager
+(CPOfferWallManager*)shareManager {
if( _manager == nil ) {
_manager = [[CPOfferWallManager alloc] init];
}
return _manager;
}
-(id)init {
if( self = [super init] ) {
_lastConsumed = 0;
_offerWallController = [[DMOfferWallViewController alloc] initWithPublisherID:PUBLISHER_ID];
_offerWallController.disableStoreKit = NO;
_offerWallController.delegate = self;
_offerWallController.rootViewController = [AppDelegate sharedAppDelegate].rootViewController;
}
return self;
}
-(void)dealloc {
_offerWallController.delegate = nil;
[_offerWallController release];
[super dealloc];
}
-(void)presentOfferWall {
// 显示积分墙,并加载积分
[_offerWallController presentOfferWall];
[_offerWallController requestOnlinePointCheck];
}
#pragma DMOfferWallDelegate
// 积分墙开始加载数据。
- (void)offerWallDidStartLoad {
NSLog(@"offerWallDidStartLoad");
}
// 积分墙加载完成。此方法实现中可进行积分墙入口Button显示等操作。
- (void)offerWallDidFinishLoad {
NSLog(@"offerWallDidFinishLoad");
}
// 积分墙加载失败。可能的原因由error部分提供,例如网络连接失败、被禁用等。建议在此隐藏积分墙入口Button。
- (void)offerWallDidFailLoadWithError:(NSError *)error {
NSLog(@"offerWallDidFailLoadWithError:%@", error);
}
-(void)offerWallDidClosed{
NSLog(@"offer Wall closed!");
}
#pragma mark Point Check Callbacks
// 积分查询成功之后,回调该接口,获取总积分和总已消费积分。
- (void)offerWallDidFinishCheckPointWithTotalPoint:(NSInteger)totalPoint
andTotalConsumedPoint:(NSInteger)consumed {
NSLog(@"offerWallDidFinishCheckPoint");
//加载积分信息成功后立即消费积分
if( totalPoint > consumed ) {
_lastConsumed = totalPoint-consumed;
//告知用户积分消费
NSString *msg = [NSString stringWithFormat:@"You still have %d offer wall points. Do you want exchange them to coins?", _lastConsumed];
UIAlertView * alertView = [[[UIAlertView alloc] initWithTitle:@"Congratulations"
message:msg
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK",nil] autorelease];
[alertView show];
}
}
// 积分查询失败之后,回调该接口,返回查询失败的错误原因。
- (void)offerWallDidFailCheckPointWithError:(NSError *)error {
NSLog(@"offerWallDidFailCheckPointWithError:%@", error);
}
#pragma mark Consume Callbacks
// 消费请求正常应答后,回调该接口,并返回消费状态(成功或余额不足),以及总积分和总已消费积分。
- (void)offerWallDidFinishConsumePointWithStatusCode:(DMOfferWallConsumeStatusCode)statusCode
totalPoint:(NSInteger)totalPoint
totalConsumedPoint:(NSInteger)consumed {
NSLog(@"offerWallDidFinishConsumePoint");
switch (statusCode) {
case DMOfferWallConsumeStatusCodeSuccess:{
//1个积分10个金币
[DataManager shareManager].coins = [DataManager shareManager].coins + _lastConsumed*10;
//告知用户积分消费
NSString *msg = [NSString stringWithFormat:@"You get %d coins successfully from offer wall!", _lastConsumed*10];
UIAlertView * alertView = [[[UIAlertView alloc] initWithTitle:@"Congratulations"
message:msg
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil] autorelease];
[alertView show];
_lastConsumed = 0;
NSLog(@"积分消费成功");
}
break;
case DMOfferWallConsumeStatusCodeInsufficient:{
NSLog(@"积分消费失败,余额不足");
_lastConsumed = 0;
}
break;
default:
break;
}
}
// 消费请求异常应答后,回调该接口,并返回异常的错误原因。
- (void)offerWallDidFailConsumePointWithError:(NSError *)error {
NSLog(@"offerWallDidFailConsumePointWithError:%@", error);
// 重新检查积分信息并消费积分
[_offerWallController requestOnlinePointCheck];
}
#pragma mark UIAlertViewDelegate
-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
if( buttonIndex == 1) {
[_offerWallController requestOnlineConsumeWithPoint:_lastConsumed];
}
}
@end