# 1.4数据分析部分

## 1.4.1 Adjust部分数据分析

### 1.4.1.1 普通事件数据传递

**说明**

PM会在Adjust后台提前定义好事件，Demo中会有完整的事件Token,针对不同的事件需要调用不同的eventToken。

**接口**

```
-(void) adjustPlayerEventCalledWithEventToken:(NSString*) eventToken;
```

**参数说明**

* eventToken：Adjust后台定义好的事件Token

**示例**

```
[mCydoniaSDK adjustPlayerEventCalledWithEventToken:AdjustEventToken_AccountRegist];
[mCydoniaSDK adjustPlayerEventCalledWithEventToken:AdjustEventToken_TutorialComplete];
[mCydoniaSDK adjustPlayerEventCalledWithEventToken:AdjustEventToken_TwitterShare];
```

### 1.4.1.2 充值事件数据传递

**说明**

完成充值后需要调用此API

**接口**

```
-(void) adjustPlayerIapEventCalledWithEventToken:(NSString*) eventToken andProductPrice:(NSString*)proiductPrice andCurrency:(NSString*)currency andReceiptId:(NSString*)receiptId;
```

**参数说明**

* eventToken：Adjust后台定义好的事件Token
* proiductPrice：商品价格
* currency：货币种类，一般“JPY”
* receiptId：收据ID

**示例**

```
    [mCydoniaSDK adjustPlayerIapEventCalledWithEventToken:AdjustEventToken_InAppBilling andProductPrice:@"240.0" andCurrency:@"JPY" andReceiptId:@"12344"];
```

## 1.4.2 Cydonia平台数据分析

### 1.4.2.0新用户注册数据埋点(2019-07-02追加)

**说明**

1. 此埋点记录新用户注册，新用户注册完成时调用一次。
2. 另外，一般默认玩家注册完成后初始等级是1级，游戏还需调用一次 "玩家升级数据埋点"，否则统计数据看不到1级玩家

**调用场景**

1. 新用户注册完成后调用一次

**接口**

```
[mCydoniaSDK cydoniaPlayerRegistWithAppVersion:@"1.0.0.1" andGameServerId:@"1" andGameUserId:@"123456" andGameUserRoleId:@"6666"];
```

**参数说明**

* currentAppVersion：当前客户端版本号
* gameServerId：当前玩家所在服务器ID
* gameUserId：当前游戏服务器生成的玩家总ID（与SDK生成的玩家ID应该是一对一关系）
* gameUserRoleId：当前玩家进入服务器的角色ID

### 1.4.2.1 登录完成数据传递

**说明**

此API记录玩家登陆信息用来统计活跃用户和活跃设备。

调用场景：

1. 玩家登录完成时调用
2. 游戏打开后只要完成初始化也调用一次（打开游戏就算活跃）

**接口**

```
-(void) cydoniaPlayerLoginWithAppVersion:(NSString*)currentAppVersion andGameServerId:(NSString*)gameServerId andGameUserId:(NSString*)gameUserId andGameUserRoleId:(NSString*)gameUserRoleId;
```

**参数说明**

* currentAppVersion：当前客户端版本号
* gameServerId：当前玩家所在服务器ID
* gameUserId：当前游戏服务器生成的玩家总ID（与SDK生成的玩家ID应该是一对一关系）
* gameUserRoleId：当前玩家进入服务器的角色ID

**示例**

```
[mCydoniaSDK cydoniaPlayerLoginWithAppVersion:@"1.0.0.1" andGameServerId:@"1" andGameUserId:@"123456" andGameUserRoleId:@"6666"];
```

### 1.4.2.**2 新手教学开始数据传递**

**说明**

玩家开始新手教学时调用此接口

**接口**

```
-(void) cydoniaPlayerTutorialBeginWithAppVersion:(NSString*)currentAppVersion andGameServerId:(NSString*)gameServerId andGameUserId:(NSString*)gameUserId andGameUserRoleId:(NSString*)gameUserRoleId;
```

**参数说明**

* currentAppVersion：当前客户端版本号
* gameServerId：当前玩家所在服务器ID
* gameUserId：当前游戏服务器生成的玩家总ID（与SDK生成的玩家ID应该是一对一关系）
* gameUserRoleId：当前玩家进入服务器的角色ID

**示例**

```
[mCydoniaSDK cydoniaPlayerTutorialBeginWithAppVersion:@"1.0.0.1" andGameServerId:@"1" andGameUserId:@"123456" andGameUserRoleId:@"6666"];
```

### 1.4.2.3 新手教学完成数据传递

**说明**

玩家新手教学完成之后调用此接口

**接口**

```
-(void) cydoniaPlayerTutorialCompleteWithAppVersion:(NSString*)currentAppVersion andGameServerId:(NSString*)gameServerId andGameUserId:(NSString*)gameUserId andGameUserRoleId:(NSString*)gameUserRoleId;
```

**参数说明**

* currentAppVersion：当前客户端版本号
* gameServerId：当前玩家所在服务器ID
* gameUserId：当前游戏服务器生成的玩家总ID（与SDK生成的玩家ID应该是一对一关系）
* gameUserRoleId：当前玩家进入服务器的角色ID

**示例**

```
[mCydoniaSDK cydoniaPlayerTutorialCompleteWithAppVersion:@"1.0.0.1" andGameServerId:@"1" andGameUserId:@"123456" andGameUserRoleId:@"6666"];
```

### 1.4.2.4 玩家升级数据传递

**说明**

玩家等级提升时调用此API。

\*\*\*一般默认玩家初始等级是1级，在玩家注册完成时，需要调用此接口将初始等级传递到服务器，否则统计数据没有初始等级。

**接口**

```
-(void) cydoniaPlayerLevelUpWithAppVersion:(NSString*)currentAppVersion andGameServerId:(NSString*)gameServerId andGameUserId:(NSString*)gameUserId andGameUserRoleId:(NSString*)gameUserRoleId andReachedLevel:(NSString*)currentLevel;
```

**参数说明**

* currentAppVersion：当前客户端版本号
* gameServerId：当前玩家所在服务器ID
* gameUserId：当前游戏服务器生成的玩家总ID（与SDK生成的玩家ID应该是一对一关系）
* gameUserRoleId：当前玩家进入服务器的角色ID
* currentLevel：当前玩家的等级

**示例**

```
[mCydoniaSDK cydoniaPlayerLevelUpWithAppVersion:@"1.0.0.1" andGameServerId:@"1" andGameUserId:@"123456" andGameUserRoleId:@"6666" andReachedLevel:@"11"];
```

### ~~1.4.2.5 玩家过关数据传递(废弃)~~

~~**说明**~~

~~玩家PVE过关之后调用此API~~

~~**接口**~~

```
-(void) cydoniaPlayerCompleteStageWithAppVersion:(NSString*)currentAppVersion andGameServerId:(NSString*)gameServerId andGameUserId:(NSString*)gameUserId andGameUserRoleId:(NSString*)gameUserRoleId andCompleteStage:(NSString*)currentStage;
```

~~**参数说明**~~

* ~~currentAppVersion：当前客户端版本号~~
* ~~gameServerId：当前玩家所在服务器ID~~
* ~~gameUserId：当前游戏服务器生成的玩家总ID（与SDK生成的玩家ID应该是一对一关系）~~
* ~~gameUserRoleId：当前玩家进入服务器的角色ID~~
* ~~currentStage：玩家的过的当前关卡。关卡ID必须唯一。如果PVE分第几章和第几节等，每一节ID需要全章唯一。例如，完成了第1章第12节的Stage设定为"112",完成了第11章第2节的Stage需要设定为"1102"，一般关卡ID=章ID\*100+节ID**示例**~~

### ~~1.4.2.6 **玩家**获得虚拟第一货币数据传递(废弃)~~

~~**说明**~~

~~玩家每次获得了游戏第一资源的时候调用此API~~

~~**接口**~~

```
-(void) cydoniaPlayerVCurrencyInWithAppVersion:(NSString*)currentAppVersion andGameServerId:(NSString*)gameServerId andGameUserId:(NSString*)gameUserId andGameUserRoleId:(NSString*)gameUserRoleId andVCurrencyName:(NSString*)vCurrencyName andVCurrencyVal:(NSString*)vCurrencyVal andVCurrencyType:(NSString*)vCurrencyType andVCurrencyInMethod:(NSString*)vCurrencyInMethod;
```

**参数说明**

* ~~currentAppVersion：当前客户端版本号~~
* ~~gameServerId：当前玩家所在服务器ID~~
* ~~gameUserId：当前游戏服务器生成的玩家总ID（与SDK生成的玩家ID应该是一对一关系）~~
* ~~gameUserRoleId：当前玩家进入服务器的角色ID~~
* ~~VCurrencyName：传入玩家获取的资源名称，比如diamond等等~~
* ~~VCurrencyVal：传入玩家获取的第一虚拟货币的数量~~
* ~~VCurrencyType：虚拟货币类型 1:用钱购买的虚拟货币 2：免费获取的虚拟货币~~
* ~~VCurrencyInMethod：1.氪金获得 2.活动获得 3.系统赠送 4.任务完成获得 5.使用兑换码获得, 如果有其他方式请联系程序~~

**示例**

```
/*
     VCurrencyName  传入玩家获取的资源名称
     VCurrencyVal 传入玩家获取的资源数量，比如钻石，元宝等等
     VCurrencyType 虚拟货币类型 1:用钱购买的资源 2：免费获取的资源
     VCurrencyInMethod 1.氪金获得 2.活动获得 3.系统赠送 4.任务完成获得 5.使用兑换码获得, 如果有其他方式请联系程序
     */
    [mCydoniaSDK cydoniaPlayerVCurrencyInWithAppVersion:@"1.0.0.1" andGameServerId:@"1" andGameUserId:@"123456" andGameUserRoleId:@"6666" andVCurrencyName:@"diamond" andVCurrencyVal:@"100" andVCurrencyType:@"1" andVCurrencyInMethod:@"3"];
```

### ~~1.4.2.7 玩家消耗虚拟第一货币数据传递（废弃）~~

~~**说明**~~

~~玩家每次消耗游戏第一资源的时候调用此API。优先消耗免费获得的第一资源。~~

**接口**

```
-(void) cydoniaPlayerVCurrencyOutWithAppVersion:(NSString*)currentAppVersion andGameServerId:(NSString*)gameServerId andGameUserId:(NSString*)gameUserId andGameUserRoleId:(NSString*)gameUserRoleId andVCurrencyName:(NSString*)vCurrencyName andVCurrencyVal:(NSString*)vCurrencyVal andVCurrencyType:(NSString*)vCurrencyType andPaidItemCategory:(NSString*)paidItemCategory andPaidItemName:(NSString*)paidItemName;
```

**参数说明**

* ~~currentAppVersion：当前客户端版本号~~
* ~~gameServerId：当前玩家所在服务器ID~~
* ~~gameUserId：当前游戏服务器生成的玩家总ID（与SDK生成的玩家ID应该是一对一关系）~~
* ~~gameUserRoleId：当前玩家进入服务器的角色ID~~
* ~~VCurrencyName：传入玩家消耗的虚拟第一货币名称，比如diamond等等~~
* ~~VCurrencyVal：传入玩家消耗的虚拟第一货币数量~~
* ~~VCurrencyType：虚拟货币类型 1:用钱购买的 2：免费获取的~~
* ~~VCurrencyPaidItemCategor&#x79;**：**&#x82B1;费在哪些类型 1.道具 2.抽奖 3.建筑加速, 4:买基础资源 如果有其他方式请联系程序，统计要用~~
* ~~VCurrencyPaidItemName：花费在该类型下的具体哪个道具/哪个卡池/哪个建筑/资源ID~~

**示例**

\
~~例如：玩家在游戏中的钻石有1000，购买获得的是400，通过游戏活动获得的是600。要购买道具消耗700钻石的时候消耗的是600免费钻石加上100充值钻石。优先消耗免费获得的钻石。~~

```
[mCydoniaSDK cydoniaPlayerVCurrencyOutWithAppVersion:@"1.0.0.1" andGameServerId:@"1" andGameUserId:@"123456" andGameUserRoleId:@"6666" andVCurrencyName:@"diamond" andVCurrencyVal:@"50" andVCurrencyType:@"2" andPaidItemCategory:@"1" andPaidItemName:@"item2"];
```

### 1.4.2.8 玩家完成充值数据传递

**说明**

玩家完成了充值时调用此API

**接口**

```
-(void) cydoniaPlayerBillingWithAppVersion:(NSString*)currentAppVersion andGameServerId:(NSString*)gameServerId andGameUserId:(NSString*)gameUserId  andGameUserRoleId:(NSString*)gameUserRoleId andProductId:(NSString*)productId andProductPrice:(NSString*)proiductPrice andCurrency:(NSString*)currency andReceiptId:(NSString*)receiptId andGameUserLevel:(NSString*)gameUserLevel;
```

**参数说明**

* currentAppVersion：当前客户端版本号
* gameServerId：当前玩家所在服务器ID
* gameUserId：当前游戏服务器生成的玩家总ID（与SDK生成的玩家ID应该是一对一关系）
* gameUserRoleId：当前玩家进入服务器的角色ID
* productId：玩家购入的内购商品ID
* productPrice：玩家购入的内购商品价格
* currency：货币种类，一般"JPY"
* receiptId：收据ID (iOS使用MD5(iOS返回的收据)|AppleOrderId，Android使用充值返回数据中的GoogleOrderId)
* gameUserLevel: 充值时玩家等级

**示例**

```
[mCydoniaSDK cydoniaPlayerBillingWithAppVersion:@"1.0.0.1" andGameServerId:@"1" andGameUserId:@"123456" andGameUserRoleId:@"6666" andProductId:@"com.cydonia.item1" andProductPrice:@"240" andCurrency:@"JPY" andReceiptId:@"aaaaaa"];
```

iOS md5算法如下：

```
#pragma mark md5加密算法
- (NSString *)md5HexDigest:(NSString *)knownStr
{
    const char *original_str = [knownStr UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(original_str, (CC_LONG)strlen(original_str), result);
    NSMutableString *hash = [NSMutableString string];
    for (int i = 0; i < 16; i++)
        [hash appendFormat:@"%02X", result[i]];
    return [hash lowercaseString];
}
```

### 1.4.2.9 玩家持续在线1分钟数据传递

**说明**

客户端在前台每一分钟调用一次此API

**接口**

```
-(void) cydoniaPlayerHeartBeatWithAppVersion:(NSString*)currentAppVersion andGameServerId:(NSString*)gameServerId andGameUserId:(NSString*)gameUserId andGameUserRoleId:(NSString*)gameUserRoleId;
```

**参数说明**

* currentAppVersion：当前客户端版本号
* gameServerId：当前玩家所在服务器ID
* gameUserId：当前游戏服务器生成的玩家总ID（与SDK生成的玩家ID应该是一对一关系）
* gameUserRoleId：当前玩家进入服务器的角色ID

**示例**

```
[mCydoniaSDK cydoniaPlayerHeartBeatWithAppVersion:@"1.0.0.1" andGameServerId:@"1" andGameUserId:@"123456" andGameUserRoleId:@"6666"];
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://cydonia.gitbook.io/doc/cydonia-sdk/ios-integration/ios-sdk-api-doc/1.4-dataanalytics.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
