sk-client/ChannelBackup/iOS_ilod/XCode/Libraries/Plugins/iOS/SDK.mm

489 lines
18 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#import "SDK.h"
#import <GamePot/GamePot.h>
#import <GamePotChannel/GamePotChannel.h>
#import "UnityAppController.h"
NSArray* order = @[@(GOOGLE), @(FACEBOOK), @(APPLE),@(NAVER), @(LINE), @(TWITTER), @(GUEST)];
GamePotChannelLoginOption* options = [[GamePotChannelLoginOption alloc] init:order];
extern UIViewController *UnityGetGLViewController();
//NSString转char*
#define MakeStringCopy( _x_ ) ( _x_ != NULL && [_x_ isKindOfClass:[NSString class]] ) ? strdup( [_x_ UTF8String] ) : NULL
//日志打印
#define DLOG(...) NSLog(__VA_ARGS__);
extern "C"{
void m_SDK_Init(){
[[SDK Instance] Init];
}
void m_SDK_Login(){
[[SDK Instance] Login];
}
void m_SDK_Logout(){
[[SDK Instance] Logout];
}
bool m_SDK_IsSupportExit(){
return [[SDK Instance] IsSupportExit];
}
void m_SDK_Exit(){
[[SDK Instance] ExitGame];
}
void m_SDK_SubmitExtraData(int dataType,int serverId,char* serverName, char* zoneID, char* zoneName, char* roleID, char* roleName, char* roleLevel, char* guildlD, char* Vip, int moneyNum, char* roleCreateTime, char* roleLevelUpTime){
[[SDK Instance] SubmitExtraData:dataType
serverId:serverId
serverName:[NSString stringWithUTF8String:serverName]
zoneID:[NSString stringWithUTF8String:zoneID]
zoneName:[NSString stringWithUTF8String:zoneName]
roleID:[NSString stringWithUTF8String:roleID]
roleName:[NSString stringWithUTF8String:roleName]
roleLevel:[NSString stringWithUTF8String:roleLevel]
guildlD:[NSString stringWithUTF8String:guildlD]
Vip:[NSString stringWithUTF8String:Vip]
moneyNum:moneyNum
roleCreateTime:[NSString stringWithUTF8String:roleCreateTime]
roleLevelUpTime:[NSString stringWithUTF8String:roleLevelUpTime]];
}
void m_SDK_Pay(char* rechargeId,int showType, int productId, char* productName, char* productDesc,char* price,char* currencyType,int ratio,int buyNum,int coinNum, char* zoneId, char* serverID, char* serverName, char* accounted, char* roleID, char* roleName,int roleLevel, char* Vip, char* guildlD, char* payNotifyUrl, char* extension, char* orderID){
[[SDK Instance] Pay:[NSString stringWithUTF8String:rechargeId]
showType:showType
productId:productId
productName:[NSString stringWithUTF8String:productName]
productDesc:[NSString stringWithUTF8String:productDesc]
price:[NSString stringWithUTF8String:price]
currencyType:[NSString stringWithUTF8String:currencyType]
ratio:ratio
buyNum:buyNum
coinNum:coinNum
zoneId:[NSString stringWithUTF8String:zoneId]
serverID:[NSString stringWithUTF8String:serverID]
serverName:[NSString stringWithUTF8String:serverName]
accounted:[NSString stringWithUTF8String:accounted]
roleID:[NSString stringWithUTF8String:roleID]
roleName:[NSString stringWithUTF8String:roleName]
roleLevel:roleLevel
Vip:[NSString stringWithUTF8String:Vip]
guildlD:[NSString stringWithUTF8String:guildlD]
payNotifyUrl:[NSString stringWithUTF8String:payNotifyUrl]
extension:[NSString stringWithUTF8String:extension]
orderID:[NSString stringWithUTF8String:orderID]];
}
void m_SDK_Bind(){
[[SDK Instance] Bind];
}
void m_SDK_Community(){
[[SDK Instance] Community];
}
void m_SDK_CustomerService(){
[[SDK Instance] CustomerService];
}
void m_SDK_Relation(char* type){
[[SDK Instance] Relation:[NSString stringWithUTF8String:type]];
}
void m_SDK_Cancellation(){
[[SDK Instance] Cancellation];
}
bool m_SDK_IsCDKey(){
return [[SDK Instance] IsCDKey];
}
void m_SDK_CDKey(char* cdkey, char* serverID, char* roleID){
[[SDK Instance] CDKey:[NSString stringWithUTF8String:cdkey] serverID:[NSString stringWithUTF8String:serverID] roleID:[NSString stringWithUTF8String:roleID]];
}
void m_SDK_LoginPanel_Btn1(){
[[SDK Instance] LoginPanel_Btn1];
}
void m_SDK_LoginPanel_Btn2(){
[[SDK Instance] LoginPanel_Btn2];
}
void m_SDK_CustomEvent(int type, char* param){
[[SDK Instance] CustomEvent:type param:[NSString stringWithUTF8String:param]];
}
}
@implementation SDK
NSString* callUnityTargetGameObjectName = @"SDK.SDKManager";
static SDK * instance = nil;
+(SDK*)Instance {
if(instance == nil){
instance =[[SDK alloc] init];
}
return instance;
}
- (void)GamePotPurchaseSuccess:(GamePotPurchaseInfo *)_info
{
// 付款成功
}
- (void)GamePotPurchaseFail:(NSError *)_error
{
// 支付错误。请在游戏弹窗显示失败原因相关消息。
// 消息语句请使用[error localizedDescription]。
}
- (void)GamePotPurchaseCancel
{
// 启动付款过程中取消
// 在游戏弹窗显示“已取消支付。”消息。
}
-(void)Init{
DLOG(@"Init");
[self callUnityFuncParam:@"InitCallback" param:@"1"];
[[GamePot getInstance] setAutoAgree:YES];
[[GamePot getInstance] setPurchaseDelegate:self];
// 开启/关闭推送接收
[[GamePot getInstance] setPushEnable:YES success:^{
} fail:^(NSError *error) {
}];
// 开启/关闭夜间推送接收
[[GamePot getInstance] setNightPushEnable:YES success:^{
} fail:^(NSError *error) {
}];
// 同时设置推送/夜间推送
// 如果是登录前需要获取推送/夜间推送权限的游戏,登录后必须调用以下代码。
[[GamePot getInstance] setPushStatus:YES night:YES ad:YES success:^{
} fail:^(NSError *error) {
}];
}
-(void)Login{
DLOG(@"Login");
[[GamePot getInstance] checkAppStatus:^{
//Login Success
} setFailHandler:^(NSError *error) {
//Failed
} setUpdateHandler:^(GamePotAppStatus *status) {
//NeedUpdate
// 需强制更新。调用以下API即可显示SDK自主弹窗。
// 需要自定义时在没有调用以下API的状态下进行自定义。
[[GamePot getInstance] showAppStatusPopup:UnityGetGLViewController() setAppStatus:status
setCloseHandler:^{
// 调用showAppStatusPopup API时在必须关闭应用的情况下调用。
// 请处理终止进程。
exit(0);
} setNextHandler:^(NSObject* resultPayload) {
// 将仪表盘的更新设置设为推荐时,会显示"下次进行"按钮。
// 用户选择该按钮时会调用。
// 请使用resultPayload信息进行与登录成功时同样的处理。
// GamePotUserInfo* userInfo = (GamePotUserInfo*)resultPayload;
}];
} setMaintenanceHandler:^(GamePotAppStatus *status) {
//OnMaintenance
[[GamePot getInstance] showAppStatusPopup:UnityGetGLViewController() setAppStatus:status
setCloseHandler:^{
// 调用showAppStatusPopup API时在必须关闭应用的情况下调用。
// 请处理终止进程。
exit(0);
}];
}];
// lastLoginType获取最后一次登录值。
GamePotChannelType type = [[GamePotChannel getInstance] lastLoginType];
if(type != NONE)
{
// 以最后一次登录的类型登录的方式。
// 处理自动登录时如下调用即可。
[[GamePotChannel getInstance] Login:type viewController:UnityGetGLViewController() success:^(GamePotUserInfo* userInfo) {
NSLog(@"登录成功");
NSString *acceesToken = [userInfo toJsonString];
NSString *uid = [[GamePot getInstance] getMemberId];
NSLog(@"accessToken=%@", acceesToken);
NSLog(@"uid=%@", uid);
NSString* rel = [NSString stringWithFormat:@"%@#%@#%@#%@",@"1",uid,@"",userInfo.token];
[self callUnityFuncParam:@"LoginCallback" param:rel];
} cancel:^{
NSLog(@"取消登录");
} fail:^(NSError *error) {
// 请在游戏弹窗显示失败原因相关消息。
// 消息语句请使用[error localizedDescription]。
NSLog(@"登录失败===%@",[error localizedDescription]);
}];
}
else
{
NSArray* order = @[@(GOOGLE),@(APPLE),@(GUEST)];
GamePotChannelLoginOption* options = [[GamePotChannelLoginOption alloc] init:order];
// 没有最后登录信息。跳转到有登录按钮的登录界面
[[GamePotChannel getInstance] showLoginWithUI:UnityGetGLViewController() option:options success:^(GamePotUserInfo *userInfo) {
// 登录成功。请根据游戏逻辑进行处理。
NSLog(@"登录成功");
NSString *acceesToken = [userInfo toJsonString];
NSString *uid = [[GamePot getInstance] getMemberId];
NSLog(@"accessToken=%@", acceesToken);
NSLog(@"uid=%@", uid);
NSString* rel = [NSString stringWithFormat:@"%@#%@#%@#%@",@"1",uid,@"",userInfo.token];
[self callUnityFuncParam:@"LoginCallback" param:rel];
} update:^(GamePotAppStatus *appStatus) {
// 需强制更新。调用以下API即可显示SDK自主弹窗。
// 需要自定义时在没有调用以下API的状态下进行自定义。
[[GamePot getInstance] showAppStatusPopup:UnityGetGLViewController() setAppStatus:appStatus
setCloseHandler:^{
// 调用showAppStatusPopup API时在必须关闭应用的情况下调用。
// 请处理终止进程。
} setNextHandler:^(NSObject* resultPayload) {
// 将仪表盘的更新设置设为推荐时,会显示"下次进行"按钮。
// 用户选择该按钮时会调用。
// 请使用resultPayload信息进行与登录成功时同样的处理。
GamePotUserInfo* userInfo = (GamePotUserInfo*)resultPayload;
NSString *acceesToken = [userInfo toJsonString];
NSString *uid = [[GamePot getInstance] getMemberId];
NSLog(@"accessToken=%@", acceesToken);
NSLog(@"uid=%@", uid);
NSString* rel = [NSString stringWithFormat:@"%@#%@#%@#%@",@"1",uid,@"",userInfo.token];
[self callUnityFuncParam:@"LoginCallback" param:rel];
}];
} maintenance:^(GamePotAppStatus *appStatus) {
// 正在维护中。调用以下API即可显示SDK自主弹窗。
// 需要自定义时在没有调用以下API的状态下进行自定义。
[[GamePot getInstance] showAppStatusPopup:UnityGetGLViewController() setAppStatus:appStatus
setCloseHandler:^{
// 调用showAppStatusPopup API时在必须关闭应用的情况下调用。
// 请处理终止进程。
exit(0);
}];
} exit:^{
// 点击X按钮时处理
NSLog(@"关闭选择登录窗口");
}];
}
}
-(void)SwitchLogin{
[[GamePotChannel getInstance] LogoutWithSuccess:^{
// 退出成功后跳转到初始页面。
[self callUnityFuncParam:@"LogoutCallback" param:@"1"];
} fail:^(NSError *error) {
// 退出登录失败。请在游戏弹窗显示失败原因相关消息。
// 消息语句请使用[error localizedDescription]。
}];
DLOG(@"SwitchLogin");
}
-(void)Logout{
[[GamePotChannel getInstance] LogoutWithSuccess:^{
// 退出成功后跳转到初始页面。
[self callUnityFuncParam:@"LogoutCallback" param:@"1"];
} fail:^(NSError *error) {
// 退出登录失败。请在游戏弹窗显示失败原因相关消息。
// 消息语句请使用[error localizedDescription]。
}];
DLOG(@"Logout");
}
-(bool)IsSupportExit{
DLOG(@"IsSupportExit");
return false;
}
-(void)ExitGame{
DLOG(@"ExitGame");
}
-(void)SubmitExtraData:(int) dataType
serverId :(int) serverId
serverName :(NSString *) serverName
zoneID :(NSString *) zoneID
zoneName :(NSString *) zoneName
roleID :(NSString *) roleID
roleName :(NSString *) roleName
roleLevel :(NSString *) roleLevel
guildlD :(NSString *) guildlD
Vip :(NSString *) Vip
moneyNum :(int) moneyNum
roleCreateTime :(NSString *) roleCreateTime
roleLevelUpTime :(NSString *) roleLevelUpTime{
if(dataType == 3){
[[GamePot getInstance] showNotice:UnityGetGLViewController() setSchemeHandler:^(NSString *scheme) {
NSLog(@"scheme = %@", scheme);
}];
}
NSDictionary *dict = @{@"name":roleName, @"level":roleLevel, @"serverid":[NSString stringWithFormat:@"%d",serverId], @"playerid":roleID, @"userdata":guildlD,};
[[GamePot getInstance] setUserData:dict handler:^(BOOL _success, NSError *_error) {
if(_success)
{
//setUserData成功
}
else
{
//setUserData失败
}
}];
DLOG(@"SubmitExtraData");
}
-(void)Pay:(NSString *) rechargeId
showType :(int)showType
productId :(int) productId
productName :(NSString *) productName
productDesc :(NSString *) productDesc
price :(NSString *) price
currencyType :(NSString *) currencyType
ratio :(int) ratio
buyNum :(int) buyNum
coinNum :(int) coinNum
zoneId :(NSString *) zoneId
serverID :(NSString *) serverID
serverName :(NSString *) serverName
accounted :(NSString *) accounted
roleID :(NSString *) roleID
roleName :(NSString *) roleName
roleLevel :(int) roleLevel
Vip :(NSString *) Vip
guildlD :(NSString *) guildlD
payNotifyUrl :(NSString *) payNotifyUrl
extension :(NSString *) extension
orderID :(NSString *) orderID{
[[GamePot getInstance] purchase:rechargeId uniqueId:@"" serverId:serverID playerId:roleID etc:extension];
DLOG(@"Pay");
}
-(void)Bind{
DLOG(@"Bind");
}
-(void)Community{
DLOG(@"Community");
}
-(void)CustomerService{
[[GamePot getInstance] showHelpWebView:UnityGetGLViewController()];
DLOG(@"CustomerService");
}
-(void)Relation:(NSString *) type {
if([[GamePotChannel getInstance] lastLoginType] != GUEST){
[self callUnityFuncParam:@"MessageCallback" param:@"현재 로그인 중입니다. 게스트 계정만 연동할 수 있습니다."];
return;
}
GamePotChannelType gamePotChannelType = NONE;
if ([type isEqualToString:@"google"]){
gamePotChannelType = GOOGLE;
}else if([type isEqualToString:@"apple"]){
gamePotChannelType = APPLE;
}
[[GamePotChannel getInstance] CreateLinking:gamePotChannelType viewController:UnityGetGLViewController() success:^(GamePotUserInfo *userInfo) {
// 关联成功。请在游戏弹窗显示关联结果相关消息。(例如:账户关联成功。)
[self callUnityFuncParam:@"MessageCallback" param:@"연결 성공"];
} cancel:^{
// 用户取消
[self callUnityFuncParam:@"MessageCallback" param:@"사용자 취소"];
} fail:^(NSError *error) {
// 关联失败。请在游戏弹窗显示失败原因相关消息。
// 消息语句请使用[error localizedDescription]。
[self callUnityFuncParam:@"MessageCallback" param:[error localizedDescription]];
}];
DLOG(@"Relation");
}
-(void)Cancellation{
[[GamePotChannel getInstance] DeleteMemberWithSuccess:^{
// 会员注销成功。将跳转至登录界面。
[self callUnityFuncParam:@"LogoutCallback" param:@"1"];
} fail:^(NSError *error) {
// 会员注销失败。请在游戏弹窗显示失败原因相关消息。
// 消息语句请使用[error localizedDescription]。
DLOG(@"注销失败");
}];
DLOG(@"Cancellation");
}
-(bool)IsCDKey{
DLOG(@"IsCDKey");
return true;
}
-(void)CDKey:(NSString *) cdkey
serverID :(NSString *)serverID
roleID :(NSString *)roleID{
[[GamePot getInstance] coupon:cdkey userData:[NSString stringWithFormat:@"%@#%@#%@",roleID,serverID,cdkey] handler:^(BOOL _success, NSError *_error) {
if(_success)
{
// message中返回优惠券使用相关结果。请在游戏弹窗显示相应消息。
[self callUnityFuncParam:@"MessageCallback" param:@"교환 성공"];
}
else
{
// _error中返回优惠券使用失败原因相关信息。
// 请在游戏弹窗显示[_error localizedDescription]内容。
[self callUnityFuncParam:@"MessageCallback" param:[_error localizedDescription]];
}
}];
DLOG(@"CDKey");
}
-(void)LoginPanel_Btn1{
[[GamePot getInstance] showTerms:UnityGetGLViewController()];
DLOG(@"LoginPanel_Btn1");
}
-(void)LoginPanel_Btn2{
[[GamePot getInstance] showPrivacy:UnityGetGLViewController()];
DLOG(@"LoginPanel_Btn2");
}
-(void)CustomEvent:(int) type
param :(NSString *) param{
DLOG(@"CustomEvent");
}
//调用Unity方法
-(void)callUnityFunc:(NSString*)funcName{
UnitySendMessage(MakeStringCopy(callUnityTargetGameObjectName), MakeStringCopy(funcName), "");
}
//调用Unity方法
-(void)callUnityFuncParam:(NSString*)funcName param:(NSString*)param{
UnitySendMessage(MakeStringCopy(callUnityTargetGameObjectName), MakeStringCopy(funcName), MakeStringCopy(param));
}
@end