cocos2dx android工程接入联通Unipay sdk
2015-06-02 20:28
417 查看
http://blog.csdn.net/xiechyun/article/details/45076311
版本:UnipaySDK_2.0.1_不带账户_三网_2.0.1U2111B0319
中国联通沃商店UniPay支付SDK开发者帮助文档V2.0.1
开发者社区
1、将SDK添加到工程
本SDK包,包含如下jar包:
Multimode_UniPay_base.jar(基本jar)
miniapay.jar(电信支付)
alipaysdk.jar(支付宝用)
MobileSecSdk.jar(支付宝用)
utdid4all-1.0.4.jar(支付宝用)
2、将这些包放入工程libs目录
如果您的工程已经包含支付宝的jar包,那就保留最新版本的jar包,将旧的jar包删除。
3、在EclipseAndroid工程,可以参照下面的步骤添加jar包:
1) 在“Package Explore”页签中右击你的工程并选择“Properties”;
2) 在左侧面板中选择“Java Build Path”;
3) 在主窗口中选择“Libraries”页签;
4) 点击“Add JARs…”按钮;
5) 选择 这些jar包
6) 点击“OK”完成。
4、拷贝assets目录下的资源到工程的assets目录下(移动支付)
5、拷贝armeabi目录下的so到工程libs/armeabi目录下(电信和移动支付)
6、拷贝res目录下的资源到工程res对应的目录下(电信和移动支付)
文件如下:
[html] view
plaincopy
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="你的包名"
android:versionCode="19"
android:versionName="1.1.9"
android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="9"/>
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:name="你的包名.MyApplication"
android:allowBackup="true"
android:label="@string/app_name"
android:icon="@drawable/icon">
<!-- Tell Cocos2dxActivity the name of our .so -->
<meta-data android:name="android.app.lib_name"
android:value="cocos2dcpp" />
<activity android:name="com.unicom.dcLoader.welcomeview"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="keyboardHidden|screenSize|navigation|orientation" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data android:name="UNICOM_DIST_ACTIVITY" android:value="org.cocos2dx.cpp.AppActivity"/>
</activity>
<activity android:name="org.cocos2dx.cpp.AppActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="orientation">
</activity>
<service android:name="com.unicom.wostore.unipay.paysecurity.SecurityServiceFramework">
<intent-filter>
<action android:name="你的包名.unicom.wostore.unipay.securityserviceframework" />
</intent-filter>
</service>
<meta-data android:name="wostore_billing_otherpay" android:value="false"/>
<meta-data android:name="wostore_billing_chinaunicom" android:value="true"/>
<meta-data android:name="wostore_billing_chinamobile" android:value="true" />
<meta-data android:name="wostore_billing_chinatele" android:value="true" />
</application>
<supports-screens android:anyDensity="true"
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"/>
</manifest>
注意:你的包名 此处填写你的工程的包名
8、初始化sdk,调用计费接口
注意事项:
初始化接口必须在Application onCreate方法中调用,不可在Activity的onCreate方法中调用。
1)、cocos2dx创建的工程在src下一般只有org.cocos2dx.cpp包,在src下再创建一个包,包名为你的游戏包名,再在此包下创建MyApplication.java文件
内容如下:
[html] view
plaincopy
package 你的包名;
import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;
import android.util.Log;
import com.unicom.dcLoader.Utils;
import com.unicom.dcLoader.Utils.UnipayPayResultListener;
public class MyApplication extends Application
{
@Override
public void onCreate()
{
super.onCreate();
System.loadLibrary("megjb");
Utils.getInstances().initSDK(this, new UnipayPayResultListener()
{
@Override
public void PayResult(String arg0, int arg1, int arg2, String arg3)
{
}
});
}
}
2)、org.cocos2dx.cpp包下的AppActivity.java 文件内容如下:
[html] view
plaincopy
package org.cocos2dx.cpp;
import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
import org.cocos2dx.lib.Cocos2dxHandler;
import org.cocos2dx.lib.Cocos2dxHelper;
import com.unicom.dcLoader.Utils;
import com.unicom.dcLoader.Utils.UnipayPayResultListener;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import android.util.Log;
public class AppActivity extends Cocos2dxActivity
{
public static AppActivity payActivity = null;
private static String jIndex = "";
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
payActivity = this;
}
//返回实例
public static Object getInstance()
{
if (payActivity == null)
{
payActivity = new AppActivity();
}
return payActivity;
}
private class payCallback implements UnipayPayResultListener
{
public void PayResult(String paycode, int flag, int flag2, String error)
{
// flag为支付回调结果,flag2为回调类型,error为当前结果描述,paycode是完整的支付编码
switch (flag)
{
case 1://success
//此处放置支付请求已提交的相关处理代码
runNativeCallback("1",jIndex);
break;
case 2://fail
runNativeCallback("2",jIndex);
break;
case 3://cancel
runNativeCallback("0",jIndex);
break;
default:
break;
}
}
}
public static void runNativeCallback(final String state, final String billingIndex)
{
Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable()
{
@Override
public void run()
{
callBack(state,billingIndex);
}
});
}
//根据返回结果,调用不同的处理 交易标志:istate 0:取消,1成功,2失败;
public native static void callBack(String state,String billingIndex);
//调用jdk的函数付款
public void jdkPay(String billingIndex)
{
jIndex = billingIndex;
String strSerial = "";
int iSerial = 1;
iSerial = Integer.parseInt(billingIndex);
payHandler.sendEmptyMessage(iSerial);
}
private Handler payHandler = new Handler()
{
public void handleMessage(android.os.Message msg)
{
//计费点001~015对应联通的计费代码001~015
switch(msg.what)
{
case 1:
Utils.getInstances().pay(payActivity, "001", new payCallback());
break;
case 2:
Utils.getInstances().pay(payActivity, "002", new payCallback());
break;
...//此处省略多个case
default:
break;
}
};
};
@Override
protected void onResume()
{
super.onResume();
Utils.getInstances().onResume(this);
}
@Override
protected void onPause()
{
super.onPause();
Utils.getInstances().onPause(this);
}
@Override
protected void onDestroy()
{
super.onDestroy();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}
}
如果jdkPay函数中直接调用Utils.getInstances().pay函数,会提示Can't create handler inside thread that
has not called Looper.prepare()
即不能在子线程中刷新ui
所以新建一个handler。
9、jni 调用文件 头文件
[html] view
plaincopy
extern "C"
{
//参数:...计费点代码字串
void showTipDialog(const char* billIndex);
}
#endif
10、cpp文件
[html] view
plaincopy
#include "../../Classes/Result.h"
#include "jniBridge.h"
#include "cocos2d.h"
#include "platform\android\jni/JniHelper.h"
#include <jni.h>
#define CLASS_NAME "org/cocos2dx/cpp/AppActivity"
using namespace cocos2d;
extern "C"
{
void Java_org_cocos2dx_cpp_AppActivity_callBack(JNIEnv* env,jobject thiz,jstring state, jstring billingIndex)
{
const char * pState = env->GetStringUTFChars(state,NULL);
const char * pIndex = env->GetStringUTFChars(billingIndex,NULL);
if(strcmp(pState,"1") == 0)
{
doSuccess(pIndex);//成功后调用的函数,在文件头部要#include此函数文件如Result.h
}
else if(strcmp(pState,"2") == 0)
{
doFault(pIndex);//失败后调用的函数,在文件头部要#include此函数文件如Result.h
}
else if(strcmp(pState,"0") == 0)
{ //取消购买时
doCancel(pIndex);//取消后调用的函数,在文件头部要#include此函数文件如Result.h
}
env->ReleaseStringUTFChars(state,pState);
env->ReleaseStringUTFChars(billingIndex,pIndex);
}
void showTipDialog(const char* billIndex)
{
JniMethodInfo minfo;
jobject jobj;
if (JniHelper::getStaticMethodInfo(minfo, CLASS_NAME,"getInstance", "()Ljava/lang/Object;"))
{
jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
if (JniHelper::getMethodInfo(minfo, CLASS_NAME,"jdkPay", "(Ljava/lang/String;)V"))
{
jstring jindex = minfo.env->NewStringUTF(billIndex);
minfo.env->CallVoidMethod(jobj, minfo.methodID,jindex);
minfo.env->DeleteLocalRef(jindex);
}
}
}
}
Over
版本:UnipaySDK_2.0.1_不带账户_三网_2.0.1U2111B0319
中国联通沃商店UniPay支付SDK开发者帮助文档V2.0.1
开发者社区
参考帮助文档
1、将SDK添加到工程本SDK包,包含如下jar包:
Multimode_UniPay_base.jar(基本jar)
miniapay.jar(电信支付)
alipaysdk.jar(支付宝用)
MobileSecSdk.jar(支付宝用)
utdid4all-1.0.4.jar(支付宝用)
2、将这些包放入工程libs目录
如果您的工程已经包含支付宝的jar包,那就保留最新版本的jar包,将旧的jar包删除。
3、在EclipseAndroid工程,可以参照下面的步骤添加jar包:
1) 在“Package Explore”页签中右击你的工程并选择“Properties”;
2) 在左侧面板中选择“Java Build Path”;
3) 在主窗口中选择“Libraries”页签;
4) 点击“Add JARs…”按钮;
5) 选择 这些jar包
6) 点击“OK”完成。
4、拷贝assets目录下的资源到工程的assets目录下(移动支付)
5、拷贝armeabi目录下的so到工程libs/armeabi目录下(电信和移动支付)
6、拷贝res目录下的资源到工程res对应的目录下(电信和移动支付)
7、配置AndroidManifest.xml文件
文件如下:[html] view
plaincopy
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="你的包名"
android:versionCode="19"
android:versionName="1.1.9"
android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="9"/>
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:name="你的包名.MyApplication"
android:allowBackup="true"
android:label="@string/app_name"
android:icon="@drawable/icon">
<!-- Tell Cocos2dxActivity the name of our .so -->
<meta-data android:name="android.app.lib_name"
android:value="cocos2dcpp" />
<activity android:name="com.unicom.dcLoader.welcomeview"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="keyboardHidden|screenSize|navigation|orientation" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data android:name="UNICOM_DIST_ACTIVITY" android:value="org.cocos2dx.cpp.AppActivity"/>
</activity>
<activity android:name="org.cocos2dx.cpp.AppActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="orientation">
</activity>
<service android:name="com.unicom.wostore.unipay.paysecurity.SecurityServiceFramework">
<intent-filter>
<action android:name="你的包名.unicom.wostore.unipay.securityserviceframework" />
</intent-filter>
</service>
<meta-data android:name="wostore_billing_otherpay" android:value="false"/>
<meta-data android:name="wostore_billing_chinaunicom" android:value="true"/>
<meta-data android:name="wostore_billing_chinamobile" android:value="true" />
<meta-data android:name="wostore_billing_chinatele" android:value="true" />
</application>
<supports-screens android:anyDensity="true"
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"/>
</manifest>
注意:你的包名 此处填写你的工程的包名
8、初始化sdk,调用计费接口
注意事项:
初始化接口必须在Application onCreate方法中调用,不可在Activity的onCreate方法中调用。
1)、cocos2dx创建的工程在src下一般只有org.cocos2dx.cpp包,在src下再创建一个包,包名为你的游戏包名,再在此包下创建MyApplication.java文件
内容如下:
[html] view
plaincopy
package 你的包名;
import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;
import android.util.Log;
import com.unicom.dcLoader.Utils;
import com.unicom.dcLoader.Utils.UnipayPayResultListener;
public class MyApplication extends Application
{
@Override
public void onCreate()
{
super.onCreate();
System.loadLibrary("megjb");
Utils.getInstances().initSDK(this, new UnipayPayResultListener()
{
@Override
public void PayResult(String arg0, int arg1, int arg2, String arg3)
{
}
});
}
}
2)、org.cocos2dx.cpp包下的AppActivity.java 文件内容如下:
[html] view
plaincopy
package org.cocos2dx.cpp;
import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
import org.cocos2dx.lib.Cocos2dxHandler;
import org.cocos2dx.lib.Cocos2dxHelper;
import com.unicom.dcLoader.Utils;
import com.unicom.dcLoader.Utils.UnipayPayResultListener;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import android.util.Log;
public class AppActivity extends Cocos2dxActivity
{
public static AppActivity payActivity = null;
private static String jIndex = "";
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
payActivity = this;
}
//返回实例
public static Object getInstance()
{
if (payActivity == null)
{
payActivity = new AppActivity();
}
return payActivity;
}
private class payCallback implements UnipayPayResultListener
{
public void PayResult(String paycode, int flag, int flag2, String error)
{
// flag为支付回调结果,flag2为回调类型,error为当前结果描述,paycode是完整的支付编码
switch (flag)
{
case 1://success
//此处放置支付请求已提交的相关处理代码
runNativeCallback("1",jIndex);
break;
case 2://fail
runNativeCallback("2",jIndex);
break;
case 3://cancel
runNativeCallback("0",jIndex);
break;
default:
break;
}
}
}
public static void runNativeCallback(final String state, final String billingIndex)
{
Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable()
{
@Override
public void run()
{
callBack(state,billingIndex);
}
});
}
//根据返回结果,调用不同的处理 交易标志:istate 0:取消,1成功,2失败;
public native static void callBack(String state,String billingIndex);
//调用jdk的函数付款
public void jdkPay(String billingIndex)
{
jIndex = billingIndex;
String strSerial = "";
int iSerial = 1;
iSerial = Integer.parseInt(billingIndex);
payHandler.sendEmptyMessage(iSerial);
}
private Handler payHandler = new Handler()
{
public void handleMessage(android.os.Message msg)
{
//计费点001~015对应联通的计费代码001~015
switch(msg.what)
{
case 1:
Utils.getInstances().pay(payActivity, "001", new payCallback());
break;
case 2:
Utils.getInstances().pay(payActivity, "002", new payCallback());
break;
...//此处省略多个case
default:
break;
}
};
};
@Override
protected void onResume()
{
super.onResume();
Utils.getInstances().onResume(this);
}
@Override
protected void onPause()
{
super.onPause();
Utils.getInstances().onPause(this);
}
@Override
protected void onDestroy()
{
super.onDestroy();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}
}
如果jdkPay函数中直接调用Utils.getInstances().pay函数,会提示Can't create handler inside thread that
has not called Looper.prepare()
即不能在子线程中刷新ui
所以新建一个handler。
9、jni 调用文件 头文件
[html] view
plaincopy
extern "C"
{
//参数:...计费点代码字串
void showTipDialog(const char* billIndex);
}
#endif
10、cpp文件
[html] view
plaincopy
#include "../../Classes/Result.h"
#include "jniBridge.h"
#include "cocos2d.h"
#include "platform\android\jni/JniHelper.h"
#include <jni.h>
#define CLASS_NAME "org/cocos2dx/cpp/AppActivity"
using namespace cocos2d;
extern "C"
{
void Java_org_cocos2dx_cpp_AppActivity_callBack(JNIEnv* env,jobject thiz,jstring state, jstring billingIndex)
{
const char * pState = env->GetStringUTFChars(state,NULL);
const char * pIndex = env->GetStringUTFChars(billingIndex,NULL);
if(strcmp(pState,"1") == 0)
{
doSuccess(pIndex);//成功后调用的函数,在文件头部要#include此函数文件如Result.h
}
else if(strcmp(pState,"2") == 0)
{
doFault(pIndex);//失败后调用的函数,在文件头部要#include此函数文件如Result.h
}
else if(strcmp(pState,"0") == 0)
{ //取消购买时
doCancel(pIndex);//取消后调用的函数,在文件头部要#include此函数文件如Result.h
}
env->ReleaseStringUTFChars(state,pState);
env->ReleaseStringUTFChars(billingIndex,pIndex);
}
void showTipDialog(const char* billIndex)
{
JniMethodInfo minfo;
jobject jobj;
if (JniHelper::getStaticMethodInfo(minfo, CLASS_NAME,"getInstance", "()Ljava/lang/Object;"))
{
jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
if (JniHelper::getMethodInfo(minfo, CLASS_NAME,"jdkPay", "(Ljava/lang/String;)V"))
{
jstring jindex = minfo.env->NewStringUTF(billIndex);
minfo.env->CallVoidMethod(jobj, minfo.methodID,jindex);
minfo.env->DeleteLocalRef(jindex);
}
}
}
}
Over
相关文章推荐
- 安卓加载动画崩溃
- 屏蔽多点触摸
- cocos2d-x 3.1 集成 云风pbc
- 安卓白屏问题
- 我的cocos2d-x-3.2集成云风pbc lua binding方法
- cocos2dx 自定义menu 添加到scrollview上可以滑动
- 我的Cocos2d-x学习笔记(十六)动作
- Cocos2d-x-3.6命令行安装
- 在Quick-cocos2dx中使用云风pbc解析Protocol Buffers,支持win、mac、ios、android
- cocos2dx安装
- 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(1)
- cocos2dx CCLabelTTF 字体自动换行
- Cocos2dx 3.0 -- lambda表达式的使用
- 用封装ClippingNode实现新手引导(cocos2dx 3.2版本)
- 【Cocos学习】平时技术点积累
- Cocos2d-x 3.x版2048游戏开发
- 《转》iOS 平台 Cocos2d-x 项目接入新浪微博 SDK 的坑
- cocos2d-x 1.0版本 自适应屏幕分辨率
- cocos2dx——实现儿童节贺卡03
- cocos2dx——实现儿童节贺卡02