VigameKit 版本 2.3.7

VigameKit 版本 2.3.7

Joshua维护。



VigameKit 版本 2.3.7

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"

添加sdk引用文件路径

3. 添加必要配置

  1. 打开Capabilities->Keychain Sharing获取设备唯一标识
  2. 在info.plist中添加Google广告配置GADIsAdManagerApp:YES
  3. 如果项目中使用到Applovin广告,在info.plist中添加AppLovinSdkKey:Occxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  4. 在VigameLibrary.plist中检测company_appid、apple_appid、company_prijid以及相关的统计参数
  5. 如果海外包带有Facebook广告,需要在info.plist文件中添加Facebook的相关配置如下:

fb配置

  1. 苹果新规定:无论是否使用相机或相册,都必须申请权限
  2. 游戏需要访问网络,需要有网络权限
  3. 游戏第三方可能会使用定位功能,因此需要在所有游戏的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. 设备编译选项

  1. Other Linker Flags添加-ObjC

添加-ObjC

  1. Enable Bitcode 设置为NO 设置Bitcode

6 常见配置错误及解决方法

  1. 在info.plist中添加Google广告配置 GADIsAdManagerApp:YES,不配置会导致崩溃 未配置Google广告ID

添加方法如下: 添加Google广告配置方式

  1. 由于使用了xib进行自动布局,Google广告需要最低iOS9版本支持,否则会出现如下错误:

  2. 如果出现此错误,请将游戏支持的最小iOS版本修改为iOS9,参考下图:

  3. 缺少include文件配置会导致报错:

解决方案如下:

  1. 缺少boost文件引入会导致报错:

解决方案如下:

  1. 出现“__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++ 编译项

确认C++编译设置

错误显示 D970B31A66A9D0CC47F120ECE3C4F362.jpg

8 设置项目为自动内存管理

设置ARC 设置.png

9 接入微信配置(不接入忽略)

在info.plist文件中添加

添加微信白名单

添加微信登录URL Type

添加微信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;
}

交互流程

  1. 我们提供一个测试包名和证书(已上线的项目#用于发布广告#)
  2. 使用测试包名和证书生成一个测试包--然后进行测试
  3. 测试完成后,更换正式包名和证书生成正式包并上传App Store