Skip to content

Commit

Permalink
feat:update upm
Browse files Browse the repository at this point in the history
  • Loading branch information
ci-gitlab committed Mar 8, 2022
0 parents commit d39f53e
Show file tree
Hide file tree
Showing 260 changed files with 7,832 additions and 0 deletions.
93 changes: 93 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# ChangeLog

## 3.6.3

### Optimization and fixed bugs
- Android 修复特定机型上繁体中文的识别
- Android 修复初始化时未配置 TapDBConfig 会初始化失败的问题

## 3.6.1

## 3.6.0

## 3.5.2

### New Feature
- 新增多语言配置

## 3.5.0

### Optimization and fixed bugs
- 支持性更新

## 3.4.0

## 3.3.0

- Native Update

## 3.2.0

- Native Update

## 3.1.0

- Native Update

## 3.0.0

### Optimization

- Bridge 新增 Task 桥接

## 2.1.7

### None

## 2.1.6

### BreakingChanges

- 修改 **TapCommon.OpenReviewInTapGlobal()** 方法命名

## 2.1.5

### Optimization and fixed bugs

- 内部优化

## 2.1.4

### Optimization and fixed bugs

- 优化多语言相关
- 修复 JSON 解析错误

## 2.1.3

### New Feature

* iOS 新增 TapTap 以及 Tap.IO 客户端安装判断

## 2.1.2

### Optimization and fixed bugs

* 修复 iOS ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 设置问题可能导致的 AppStore 审核无法通过

## 2.1.1

### Feature

* Android 新增 TapTap App 相关支持功能

## 2.1.0

* 新增长链接支持 TapTap.Friends
* 海内外域名切换

## 2.0.0

### Feature

* TapTap Common
3 changes: 3 additions & 0 deletions CHANGELOG.md.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Documentation.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

178 changes: 178 additions & 0 deletions Documentation/Bridge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
# TapCommon 用于支持 TapSDK 其他模块中 Android、iOS 与 Unity 的通信

> 目前 TapSDK 业务中,Unity 业务层实现的功能不多,主要作为桥接来调用 Android、iOS SDK 中的方法。
## 一、实现 Unity 调用 Android、iOS 方法

> 为了方便 Unity 一套代码可以调用双端方法,所以定义原生接口时,需要考虑 Android、iOS 语言之间的差异。
### Android 接口定义

- 使用 `@BridgeService``@BridgeMethod``@BridgeParam` 注解修饰 ```方法``参数`
- `Activity``BridgeCallback` 这两个类型参数不需要 `@BridgeParam` 注解。
- `@BridgeParam` 仅支持基本数据类型(包含 `String`)。

```java
@BridgeService("TestService")
public class TestService implementation IBridgeService {

@BridgeMethod("testMethodWithCallback")
void testMethodWithCallback(BridgeCallback callback);

@BridgeMethod("testMethodWithArgsAndCallback")
void testMethodWithArgsAndCallback(Activity activity, @BridgeParam("args1") String appId, @BridgeParam("args2") int args2, BridgeCallback callback);

}

```

### Android 接口实现

```java
public class TestService implementation TestService {

@Override
public void testMethodWithCallback(BridgeCallback callback){
callback.onResult("testMethodWithCallback 回调给 Unity 的参数");
}

@Override
public void testMethodWithArgsAndCallback(Activity activity, String appId,int args2, BridgeCallback callback){
callback.onResult("testMethodWithArgsAndCallback 回调给 Unity 的参数");
}

}

```

### iOS 接口定义

> iOS 方法名通过反射获取到的为 `args1:args2:bridgeCallback` ,所以 iOS 的方法定义与 Android 略有不同。
- 类名必须同 Android `@BridgeService` 所修饰的类名一致。
- 参数名例如 `args1``args2` 必须同 Android `@BridgeParam` 修饰的一致,用于回调的 `iOS` 闭包的参数名必须为 `bridgeCallback`
- 当参数个数仅为 0 或者 仅为 闭包时,方法名必须同 Android `@BridgeMethod` 修饰的方法一致。

```objectivec
@interface TestService

// 匹配的是 Android 中 testMethodWithCallback 方法
+(void) testMethodWithCallback:(void (^)(NSString *result))callback;

// 匹配的是 Android 中 testMethodWithArgsAndCallback 方法
+(void) args1:(NSString*)args1 args2:(NSNumber*)args2 bridgeCallback:(void (^)(NSString *result))callback;

@end
```
### iOS 接口实现
```objectivec
@implementation TestService
+(void) testMethodWithCallback:(void (^)(NSString *result)) callback{
callback(@"testMethodWithCallback 回调给 Unity 的参数");
}
+(void) args1:(NSString*)args1 args2:(NSNumber*)args2 bridgeCallback:(void (^)(NSString *result))callback{
callback(@"testMethodWithArgsAndCallback 回调给 Unity 的参数");
}
@end
```

### Unity 调用上文中定义的 Android、iOS 接口

#### 1.初始化

```c#
// Android 初始化
//CLZ_NAME 和IMP_NAME为 接口以及实现类的全路径包名 例如:com.tds.bridge.TestService,com.tds.bridge.TestServiceImpl
EngineBridge.GetInstance().Register(CLZ_NAME, IMP_NAME);

// iOS 无需初始化
```
#### 2.调用方法

`Bridge.CallHandler` 为异步方法,执行线程的流程为:

Unity Thread -> Native MainThread -> Execute Function -> Unity Thread

所以执行 `CallHandler` 的 Thread 和 `Action<Result>` 的 Thread 都为 Unity 当前 Thread。

```c#
var command = new Command.Builder()
.Service("TestService") // @BridgeService 值以及 iOS 类名
.Method("testMethodWithArgsAndCallback") // @BridgeMethod 值 以及 iOS 方法名
.Args("args1","value") // @BridgeParam 值 以及 iOS 参数名
.Args("args2",1) // 同上
.Callback(true) // 是否需要添加 BridgeCallback
.OnceTime(true) // 当前 BridgeCallback 是否常驻内存
.CommandBuilder();

// 需要回调
EngineBridge.GetInstance().CallHandler(command,result=>{
if(EngineBridge.CheckResult(result)){
// 桥接调用成功
// 当前 Content 则为 Android、iOS 通过 BridgeCallback 传给 Unity 的值
var content = result.content;
}
});

// 不需要回调
EngineBridge.GetInstance().CallHandler(command);
```

## 二、Android 、iOS 调用 Unity

鉴于 TapSDK 3.1.+ 之后,Android 与 iOS 需要同步 `TapBootstrap``TDSUser` 的部分参数,所以 `TapCommon` 在当前版本支持了原生简单的调用 Unity 接口。

以下以 Android、iOS 需要 Unity 提供 `sessionToken` 以及 `objectId` 为例

### Unity 实现 ITapPropertiesProxy 接口并注册

```c#
public class SessionTokenProxy:ITapPropertiesProxy{

public string GetProperties(){
return "sessionToken-kafjaskldfjasjdhfajkdfajdfas";
}

}

public class ObjectIdProxy:ITapPropertiesProxy {

public string GetProperties(){
return "objectId-dafasdfad";
}

}

// 通过 TapCommon 注册 Native 需要调用的接口
TapCommon.RegisterProperties("sessionToken",new SessionTokenProxy());

TapCommon.RegisterProperties("objectid",new ObjectIdProxy());
```

### Android、iOS 调用 Unity 实现的 ITapPropertiesProxy 来获取所需要的值

Android 获取 `sessionToken` 以及 `objectId`

```java
String sessionToken = TapPropertiesHolder.INSTANCE.getProperty("sessionToken");
String objectId = TapPropertiesHolder.INSTANCE.getProperty("objectId");
```

iOS 获取 `sessionToken` 以及 `objectId`

```objectivec
NSString* sessionToken = [[TapPropertiesHolder shareInstance] getProperty:@"sessionToken"];
NSString* objectId = [[TapPropertiesHolder shareInstance] getProperty:@"objectId"];
```
7 changes: 7 additions & 0 deletions Documentation/Bridge.md.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

89 changes: 89 additions & 0 deletions Documentation/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
## TapTap.Common

### 接口描述

#### 1.获取地区

```c#
TapCommon.GetRegionCode(isMainland =>
{
// true 中国大陆 false 非中国大陆
});
```

#### 2. TapTap 是否安装

```c#
TapCommon.IsTapTapInstalled(installed =>
{
// true 安装 false 未安装
});
```

#### 3. TapTap IO 是否安装

```c#
TapCommon.IsTapTapGlobalInstalled(installed =>
{
// true 安装 false 未安装
});
```

### Android 独占方法

#### 4. 在 TapTap 更新游戏

```c#
TapCommon.UpdateGameInTapTap(appId,updateSuccess =>
{
// true 更新成功 false 更新失败
});
```

#### 5. 在 TapTap IO 更新游戏

```c#
TapCommon.UpdateGameInTapGlobal(appId,updateSuccess =>
{
// true 更新成功 false 更新失败
});
```

#### 6. 在 TapTap 打开当前游戏的评论区

```c#
TapCommon.OpenReviewInTapTap(appId,openSuccess =>
{
// true 打开评论区 false 打开失败
});
```

#### 6. 在 TapTap IO 打开当前游戏的评论区

```c#
TapCommon.OpenReviewInTapGlobal(appId,openSuccess =>
{
// true 打开评论区 false 打开失败
});
```

#### 7. 唤起 TapTap 客户端更新游戏

appId: 游戏在 TapTap 商店的唯一身份标识

例如:https://www.taptap.com/app/187168 ,其中 187168 是 appid.

```c#
// 在 TapTap 客户端更新游戏,失败时通过浏览器打开 Tap 网站对应的游戏页面
// 当你在国内区上架时使用
bool isSuccess = await TapCommon.UpdateGameAndFailToWebInTapTap(string appId);
// 当你在海外区上架时使用
bool isSuccess = await TapCommon.UpdateGameAndFailToWebInTapGlobal(string appId):
```

如果你需要在唤起 Tap 客户端失败时跳转到自己的网页

```c#
bool isSuccess = await TapCommon.UpdateGameAndFailToWebInTapTap(string appId, string webUrl)
bool isSuccess = await TapCommon.UpdateGameAndFailToWebInTapGlobal(string appId, string webUrl)
```
3 changes: 3 additions & 0 deletions Documentation/README.md.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit d39f53e

Please sign in to comment.