Vigame接入说明手册
1. 将相关的文件添加到工程中
(备注:删除deps文件的引用。)
2. 添加所有 .framework 和 .a 文件的路径和头文件链接
(在target->build setting->search path->Header Search Paths中添加)特别添加一个目录路径
"$(SRCROOT)/Vigame/include"
"$(SRCROOT)/Vigame/tools"
"$(SRCROOT)/Vigame/deps/boost/include"
"$(SRCROOT)/Vigame/deps/curl/include"
"$(SRCROOT)/Vigame/deps/openssl/include"
"$(SRCROOT)/Vigame/deps/zlib/include"
3. 添加必要配置
- 打开Capabilities->Keychain Sharing获取设备唯一标识
- 在info.plist中添加Google广告配置GADIsAdManagerApp:YES
- 如果项目中使用到Applovin广告,在info.plist中添加AppLovinSdkKey:Occxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 在VigameLibrary.plist中检测company_appid、apple_appid、company_prijid以及相关的统计参数
- 如果海外包带有Facebook广告,需要在info.plist文件中添加Facebook的相关配置如下:
- 苹果新规定:无论是否使用相机或相册,都必须申请权限
- 游戏需要访问网络,需要有网络权限
- 游戏第三方可能会使用定位功能,因此需要在所有游戏的info.plist文件中添加NSLocationWhenInUseUsageDescription。
4.添加系统支持库文件
target->build phases -> Link Binary With Libraries
OpenGLES框架
OpenAL框架
iAd框架
WebKit框架
AVFoundation框架
Accelerate框架
MobileCoreServices框架
CoreMotion框架
CoreLocation框架
CoreTelephony框架
QuartzCore框架
StoreKit框架
AdSupport框架
UIKit框架
CoreFoundation框架
CoreGraphics框架
CoreMedia框架
CoreBluetooth框架
CoreText框架
Security框架
MediaPlayer框架
CFNetwork框架
libresolv.9.tbd
SystemConfiguration框架
MessageUI框架
JavaScriptCore框架
AudioToolBox框架
GLKit框架
libz.tbd
libsqlite3.tbd
libiconv.tbd
libxml2.tbd
libc++.tbd
libz.1.1.3.tbd
libresolv.tbd
libsqlite3.0.tbd
//接入TapJoy需要以下库,并且需要添加测试设备
PassKit框架
MapKit框架
ImageIO框架
CoreData框架
5. 设备编译选项
Other Linker Flags添加-ObjC
6 常见配置错误及解决方法
-
由于使用了xib进行自动布局,Google广告需要最低iOS9版本支持,否则会出现如下错误:
-
如果出现此错误,请将游戏支持的最小iOS版本修改为iOS9,参考下图:
-
缺少include文件配置会导致报错:
解决方案如下:
- 缺少boost文件引入会导致报错:
解决方案如下:
- 出现“__weak typeof(self)wSelf = self”错误:- A parameter list without types is only allowed in a function definition. A corresponding warning tells me that __weak only applies to Objective-C object or block pointer types; type here is 'int'
解决方案:在Xcode中,选择Build Settings → C Language Dialect修改配置,将C99改为GNU99,因为C99不包含typeof。
7. 确认c++ 编译项
8 设置项目为自动内存管理
9 接入微信配置(不接入忽略)
在info.plist文件中添加
添加微信登录URL Type
10 SDK初始化工作
1 导入头文件
在appDelegate文件中导入头文件#import "IOSLoader.h"
2 调用初始化入口文件
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[IOSLoader splashReport];//统计上报
return YES;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[IOSLoader progressWKContentViewCrash];//处理GDT开屏广告点击崩溃
[IOSLoader startLoaderLibrary];//初始化
return YES;
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
if (userActivity.activityType == NSUserActivityTypeBrowsingWeb) {
[IOSLoader application:application continueUserActivity:userActivity];//appflyer统计相关设置
return YES;
}
return NO;
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
[IOSLoader is_Active:false];//更新状态
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[IOSLoader isAwaken];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[IOSLoader is_Active:true]; //更新状态、开屏广告
[IOSLoader openAwakenAd];
}
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
[IOSLoader isOpenURL];//解决唤醒广告在微信登录、充值频繁问题
return YES;
}
11 代码调用
#import "IOSLoader.h"
1. 通过广告位名称打开一个广告
// 打开一个横幅广告
[IOSLoader openBanner];
// 关闭横幅广告
[IOSLoader closeBanner];
// 打开一个原生横幅广告
[IOSLoader openYSBanner:@"yuans" rect:CGRectMake(100, 20, 300, 190)];
// 关闭原生横幅广告
[IOSLoader closeYSBanner:@"yuans"];
// 打开一个插屏广告
[IOSLoader openAd:@"game_fail" callback:^(BOOL flag) {
if (flag == false) {
//恢复游戏音效
}
}];
//建议更换下面接口
[IOSLoader openAd:@"game_fail" adCallback:^(BOOL flag, KTMADType type) {
if (type == KTMADTypePlaque && flag == false) {
//恢复游戏音效
}
}];
/*检查某个视频广告位是否加载成功*/
//
[IOSLoader isAdReady:@"rotary_mfzs"];
// 打开一个视频广告 && 监听是否视频播放成功
[IOSLoader openAd:@"rotary_mfzs" callback:^(BOOL flag) {
//处理加载框
if (flag) {
NSLog(@"open succed");
}
else {
NSLog(@"open failure");
}
}];
//建议更换下面接口
[IOSLoader openAd:@"rotary_mfzs" adCallback:^(BOOL flag, KTMADType type) {
//处理加载框
if (type == KTMADTypeVideo) {
if (flag) {
NSLog(@"open succed");
}
else {
NSLog(@"open failure");
}
}
}];
2. 添加自定义统计事件
//统计
//统计付费
[IOSLoader tj_payWithMoney:6.00 productId:@"xxx.xxx.xxx" number:60 price:60];
+ (void)setFirstLaunchEventID0:(const char*)eventId0 eventID1:(const char*)eventId1 eventID2:(const char*)eventId2 eventID3:(const char*)eventId3;
+ (void)tj_name:(NSString *)name;
+ (void)tj_name:(NSString *)name value:(NSString *)value;
+ (void)tj_name:(const char *)name map:(const char *)json;
+ (void)isAdBeOpenInLevel:(NSString *)adPostionName level:(int)level;
//关卡统计相关接口
+ (void)tj_startLevel:(NSString *)level;
+ (void)tj_finishLevel:(NSString *)level;
+ (void)tj_failLevel:(NSString *)level;
//充值统计
+ (void)tj_payWithMoney:(double)money productId:(NSString *)productId number:(int)number price:(double)price;
// 导入支付头文件 发起支付
//充值接口
+ (void)textPayWithProductId:(int)productId;
//监听支付结果回调
+ (void)setOnPayFinishCallback:(void (^)(NSDictionary *))callback;
3. 是否越狱/审核中
#pragma mark - 是否审核中
+ (BOOL)isAudit;
#pragma mark - 是否越狱
+ (BOOL)isRoot;
4. 微信登录
// 在AppDelegate.m导入头文件
#import "WXSocialAgent.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXSocialAgent application:application DidFinishLaunchingWithOptions:launchOptions];
return YES;
}
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
[[[WXSocialAgent alloc] init] application:app handleOpenURL:url];
return YES;
}
// 导入头文件
#import "IOSLoader.h"
*注本接口已整合微信登录逻辑(已登录不再跳转到登录,游戏方不需再判断是否登录的情况)
[IOSLoader wxLogin:^(KTMLoginState code, NSString *returnMsg) {
if (code == KTMLoginStateSuccess) {
//调用获取用户信息接口
[IOSLoader getWXUserInfo:^(NSDictionary *userInfo) {
NSLog(@"userInfo == %@",userInfo);
}];
}
}];
userInfo数据格式如下,按需获取头像地址、openid、nickname等信息
{
city = "";
country = "";
headimgurl = "http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epXrSKiaXoSxs38WdicmRuwQQjzk5Xnia9N3OAfGCGdIjRCWXic5mbm2vMDPkx96tLKAHVHKjdjcWYDgA/132";
language = "zh_CN";
nickname = "\U5149\U5934\U5f3a2\U53f7";
openid = "oN702waxaalZ-1ycPtpfj0ALpbeg";
privilege = (
);
province = "";
sex = 0;
unionid = ofp95s1JJofVChMLEULM0H40iaEs;
}
交互流程
- 我们提供一个测试包名和证书(已上线的项目#用于发布广告#)
- 使用测试包名和证书生成一个测试包--然后进行测试
- 测试完成后,更换正式包名和证书生成正式包并上传App Store