《框架接口设计》

系统介绍

AnySDK Framework 根据市场上存在的第三方 SDK,概括为六大系统,即:用户系统、支付系统、广告系统、统计系统、社交系统、分享系统。
用户系统接口:登陆、注销、切换账号、平台中心、显示悬浮按钮、隐藏悬浮按钮、显示退出页、显示暂停页等渠道相关功能。
支付系统接口:支付、获取订单号。
统计系统接口:开始会话、结束会话、设置会话时长、设置是否捕捉异常、异常错误信息报告、自定义事件等统计功能。
分享系统接口:分享。
广告系统接口:显示广告、隐藏广告。
社交系统接口:提交分数、显示排行榜、解锁成就、显示成就榜

接口调用原则

AnySDK Framework 是将第三方 SDK(jar 库)封装一层简单易用的 C++ 接口而开发的。

必接入流程简要描述

  1. 搭建 AnySDK Framework 的环境,导入 AnySDK Framework 的必要文件,参见 AnySDK Framework 开发环境搭建
  2. 初始化 Plugin,参见初始化。
  3. 初始化后必须马上设置监听类,监听回调信息,参见消息通知
  4. 用户系统
    4.1 可扩展接口调用方法,请参照扩展功能介绍
    4.2 捕捉到初始化完成的通知后根据需要调用登陆
    4.3 在进入游戏时需要调用悬浮按钮
    4.4 在退出游戏的时候,需要调用退出页接口
    4.5 应用中需要有明显入口进入平台中心
    4.6 应用中需要接入注销或切换账号入口
    4.7 应用中需要在几种情况下提交游戏数据

消息通知

主要用于将异步请求的结果信息通知给用户,每一个系统分别设置消息通知,用户只要实现抽象方法 Listener,设置监听类,即可捕获请求结果信息。
调用方法举例: 重写回调方法

class PluginChannel:public PayResultListener, public UserActionListener
{
public:
    virtual void onPayResult(PayResultCode ret, const char* msg, TProductInfo info);
    virtual void onActionResult(ProtocolUser* pPlugin, UserActionResultCode code, const char* msg);
}

设置监听类:

_pluginsIAPMap  = AgentManager::getInstance()->getIAPPlugin();
std::map<std::string , ProtocolIAP*>::iterator iter;
for(iter = _pluginsIAPMap->begin(); iter != _pluginsIAPMap->end(); iter++)
{
    (iter->second)->setResultListener(this);
}
if(AgentManager::getInstance()->getUserPlugin())
{
    AgentManager::getInstance()->getUserPlugin()->setActionListener(this);
}

可扩展性

AnySDK Framework 初衷是对第三方 SDK 进行整合,方便开发者接入第三方 SDK。整合,即是对第三方 SDK 取并集,这样便出现了某些功能(扩展功能)并不一定存在的情况。AnySDK Framework 对这一情况做了处理,即系统中必然存在的功能可直接调用,则扩展功能需要预先判断插件中是否存在,通过扩展方法进行调用。 调用扩展功能需要预先判断插件中是否存在,例如

if(AgentManager::getInstance()->getUserPlugin())
{
    return AgentManager::getInstance()->getUserPlugin()->isFunctionSupported(strClassName);
}

AnySDK Framework 提供了以下扩展方法

void callFuncWithParam(const char* funcName, PluginParam* param, ...);
void callFuncWithParam(const char* funcName, std::vector<PluginParam*> params);
std::string callStringFuncWithParam(const char* funcName, PluginParam* param, ...);
std::string callStringFuncWithParam(const char* funcName, std::vector<PluginParam*> params);

int callIntFuncWithParam(const char* funcName, PluginParam* param, ...);
int callIntFuncWithParam(const char* funcName, std::vector<PluginParam*> params);

bool callBoolFuncWithParam(const char* funcName, PluginParam* param, ...);
bool callBoolFuncWithParam(const char* funcName, std::vector<PluginParam*> params);

float callFloatFuncWithParam(const char* funcName, PluginParam* param, ...);
float callFloatFuncWithParam(const char* funcName, std::vector<PluginParam*> params);

有参函数需要将参数转化成 PluginParam 类型
举例说明:
调用void showToolBar(ToolBarPlace place)

PluginParam paramInfo(kToolBarTopRightMid);
AgentManager::getInstance()->getUserPlugin()->callFuncWithParam("showToolBar",&paramInfo,NULL);

测试模式

测试模式是为了方便开发者在没有接入任何渠道时,完成开发流程。模拟渠道 SDK,完成了渠道的登陆、登出、支付接口。
注:
使用 Sample 工程进行测试时,需要将 AppKey、AppSecret、PrivateKey 改成自己的参数。
账号注册地址

添加测试账号

AnySDK开发者后台 添加测试账号,并且添加相应的测试币。

使用测试账号

生成的测试账号,可用来完成接入 AnySDK Framework 的登陆、登出、支付功能

其他接口

其他接口 AnySDK Framework 也提供了简易的界面或者 Log 告知接口调用成功

【评论区】