mirror of https://github.com/axmolengine/axmol.git
Submit protocol of social share plugin
This commit is contained in:
parent
1af72075bc
commit
4e24ce40ea
|
@ -0,0 +1,89 @@
|
||||||
|
#ifndef __CXX_PROTOCOL_SOCIAL_H__
|
||||||
|
#define __CXX_PROTOCOL_SOCIAL_H__
|
||||||
|
|
||||||
|
#include "PluginProtocol.h"
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace cocos2d { namespace plugin {
|
||||||
|
|
||||||
|
typedef std::map<std::string, std::string> TDeveloperInfo;
|
||||||
|
typedef std::map<std::string, std::string> TShareInfo;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
eShareSuccess = 0,
|
||||||
|
eShareFail,
|
||||||
|
eShareCancel,
|
||||||
|
eShareTimeOut,
|
||||||
|
} EShareResult;
|
||||||
|
|
||||||
|
class ShareResultListener
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void shareResult(EShareResult ret, const char* msg, TShareInfo info) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ProtocolSocial : public PluginProtocol
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief plugin initialization
|
||||||
|
*/
|
||||||
|
virtual bool init();
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief initialize the developer info
|
||||||
|
@param devInfo This parameter is the info of developer,
|
||||||
|
different plugin have different format
|
||||||
|
@warning Must invoke this interface before other interfaces.
|
||||||
|
And invoked only once.
|
||||||
|
*/
|
||||||
|
virtual void initDeveloperInfo(TDeveloperInfo devInfo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief share information
|
||||||
|
@param info The info of share, must contains key:
|
||||||
|
text The text of share
|
||||||
|
@warning For different plugin, the parameter should have other keys to share.
|
||||||
|
Look at the manual of plugins.
|
||||||
|
*/
|
||||||
|
virtual void share(TShareInfo info);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief Set whether needs to output logs to console.
|
||||||
|
@param debug if true debug mode enabled, or debug mode disabled.
|
||||||
|
*/
|
||||||
|
virtual void setDebugMode(bool debug);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@breif set the result listener
|
||||||
|
@param pListener The callback object for share result
|
||||||
|
@wraning Must invoke this interface before share
|
||||||
|
*/
|
||||||
|
static void setResultListener(ShareResultListener* pListener);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief share result callback
|
||||||
|
*/
|
||||||
|
static void shareResult(EShareResult ret, const char* msg);
|
||||||
|
|
||||||
|
virtual const char* getPluginVersion() { return "ProtocolSocial, v0.1.00 , subclass should override this interface!"; };
|
||||||
|
virtual const char* getSDKVersion();
|
||||||
|
virtual const char* getPluginName() = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ProtocolSocial();
|
||||||
|
public:
|
||||||
|
virtual ~ProtocolSocial();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static bool m_bSharing;
|
||||||
|
static ShareResultListener* m_pListener;
|
||||||
|
static TShareInfo m_curInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
}} // namespace cocos2d { namespace plugin {
|
||||||
|
|
||||||
|
#endif /* ----- #ifndef __CXX_PROTOCOL_SOCIAL_H__ ----- */
|
|
@ -0,0 +1,151 @@
|
||||||
|
#include "ProtocolSocial.h"
|
||||||
|
#include "PluginJniHelper.h"
|
||||||
|
#include <android/log.h>
|
||||||
|
#include "PluginUtils.h"
|
||||||
|
#include "PluginJavaData.h"
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
#define LOG_TAG "ProtocolSocial"
|
||||||
|
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
#define LOGD(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace cocos2d { namespace plugin {
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
JNIEXPORT void JNICALL Java_org_cocos2dx_plugin_InterfaceSocial_nativeShareResult(JNIEnv* env, jobject thiz, jint ret, jstring msg)
|
||||||
|
{
|
||||||
|
std::string strMsg = PluginJniHelper::jstring2string(msg);
|
||||||
|
ProtocolSocial::shareResult((EShareResult) ret, strMsg.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProtocolSocial::m_bSharing = false;
|
||||||
|
ShareResultListener* ProtocolSocial::m_pListener = NULL;
|
||||||
|
TShareInfo ProtocolSocial::m_curInfo;
|
||||||
|
|
||||||
|
ProtocolSocial::ProtocolSocial()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ProtocolSocial::~ProtocolSocial()
|
||||||
|
{
|
||||||
|
PluginUtils::erasePluginJavaData(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProtocolSocial::init()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProtocolSocial::initDeveloperInfo(TDeveloperInfo devInfo)
|
||||||
|
{
|
||||||
|
if (devInfo.empty())
|
||||||
|
{
|
||||||
|
LOGD("The developer info is empty!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PluginJavaData* pData = PluginUtils::getPluginJavaData(this);
|
||||||
|
PluginJniMethodInfo t;
|
||||||
|
if (PluginJniHelper::getMethodInfo(t
|
||||||
|
, pData->jclassName.c_str()
|
||||||
|
, "initDeveloperInfo"
|
||||||
|
, "(Ljava/util/Hashtable;)V"))
|
||||||
|
{
|
||||||
|
// generate the hashtable from map
|
||||||
|
jobject obj_Map = PluginUtils::createJavaMapObject(t, &devInfo);
|
||||||
|
|
||||||
|
// invoke java method
|
||||||
|
t.env->CallVoidMethod(pData->jobj, t.methodID, obj_Map);
|
||||||
|
t.env->DeleteLocalRef(obj_Map);
|
||||||
|
t.env->DeleteLocalRef(t.classID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProtocolSocial::share(TShareInfo info)
|
||||||
|
{
|
||||||
|
if (m_bSharing)
|
||||||
|
{
|
||||||
|
LOGD("Now is sharing");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.empty())
|
||||||
|
{
|
||||||
|
if (NULL != m_pListener)
|
||||||
|
{
|
||||||
|
shareResult(eShareFail, "Share info error");
|
||||||
|
}
|
||||||
|
LOGD("The Share info is empty!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_bSharing = true;
|
||||||
|
m_curInfo = info;
|
||||||
|
|
||||||
|
PluginJavaData* pData = PluginUtils::getPluginJavaData(this);
|
||||||
|
PluginJniMethodInfo t;
|
||||||
|
if (PluginJniHelper::getMethodInfo(t
|
||||||
|
, pData->jclassName.c_str()
|
||||||
|
, "share"
|
||||||
|
, "(Ljava/util/Hashtable;)V"))
|
||||||
|
{
|
||||||
|
// generate the hashtable from map
|
||||||
|
jobject obj_Map = PluginUtils::createJavaMapObject(t, &info);
|
||||||
|
|
||||||
|
// invoke java method
|
||||||
|
t.env->CallVoidMethod(pData->jobj, t.methodID, obj_Map);
|
||||||
|
t.env->DeleteLocalRef(obj_Map);
|
||||||
|
t.env->DeleteLocalRef(t.classID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProtocolSocial::setResultListener(ShareResultListener* pListener)
|
||||||
|
{
|
||||||
|
m_pListener = pListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProtocolSocial::shareResult(EShareResult ret, const char* msg)
|
||||||
|
{
|
||||||
|
m_bSharing = false;
|
||||||
|
if (m_pListener)
|
||||||
|
{
|
||||||
|
m_pListener->shareResult(ret, msg, m_curInfo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOGD("Result listener is null!");
|
||||||
|
}
|
||||||
|
m_curInfo.clear();
|
||||||
|
LOGD("Share result is : %d(%s)", (int) ret, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* ProtocolSocial::getSDKVersion()
|
||||||
|
{
|
||||||
|
std::string verName;
|
||||||
|
|
||||||
|
PluginJavaData* pData = PluginUtils::getPluginJavaData(this);
|
||||||
|
PluginJniMethodInfo t;
|
||||||
|
if (PluginJniHelper::getMethodInfo(t
|
||||||
|
, pData->jclassName.c_str()
|
||||||
|
, "getSDKVersion"
|
||||||
|
, "()Ljava/lang/String;"))
|
||||||
|
{
|
||||||
|
jstring ret = (jstring)(t.env->CallObjectMethod(pData->jobj, t.methodID));
|
||||||
|
verName = PluginJniHelper::jstring2string(ret);
|
||||||
|
}
|
||||||
|
return verName.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProtocolSocial::setDebugMode(bool debug)
|
||||||
|
{
|
||||||
|
PluginUtils::callJavaFunctionWithName_oneBaseType(this, "setDebugMode", "(Z)V", debug);
|
||||||
|
}
|
||||||
|
|
||||||
|
}} // namespace cocos2d { namespace plugin {
|
|
@ -13,6 +13,7 @@ $(addprefix ../../platform/android/, \
|
||||||
ProtocolAnalytics.cpp \
|
ProtocolAnalytics.cpp \
|
||||||
ProtocolIAP.cpp \
|
ProtocolIAP.cpp \
|
||||||
ProtocolAds.cpp \
|
ProtocolAds.cpp \
|
||||||
|
ProtocolSocial.cpp \
|
||||||
) \
|
) \
|
||||||
../../PluginManager.cpp \
|
../../PluginManager.cpp \
|
||||||
../../RegisterPlugin.cpp \
|
../../RegisterPlugin.cpp \
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
package org.cocos2dx.plugin;
|
||||||
|
|
||||||
|
import java.util.Hashtable;
|
||||||
|
|
||||||
|
public class InterfaceSocial {
|
||||||
|
public static final int SHARERESULT_SUCCESS = 0;
|
||||||
|
public static final int SHARERESULT_FAIL = 1;
|
||||||
|
public static final int SHARERESULT_CANCEL = 2;
|
||||||
|
public static final int SHARERESULT_TIMEOUT = 3;
|
||||||
|
|
||||||
|
public interface ShareAdapter {
|
||||||
|
public void initDeveloperInfo(Hashtable<String, String> cpInfo);
|
||||||
|
public void share(Hashtable<String, String> cpInfo);
|
||||||
|
public void setDebugMode(boolean debug);
|
||||||
|
public String getSDKVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void shareResult(int ret, String msg) {
|
||||||
|
final int curRet = ret;
|
||||||
|
final String curMsg = msg;
|
||||||
|
PluginWrapper.runOnGLThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
nativeShareResult(curRet, curMsg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
private static native void nativeShareResult(int ret, String msg);
|
||||||
|
}
|
Loading…
Reference in New Issue