cocos2dx android工程接入联通Unipay sdk
版本: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文件
文件如下:
<?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文件
内容如下:
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
{@Overridepublic void onCreate(){super.onCreate(); System.loadLibrary("megjb");Utils.getInstances().initSDK(this, new UnipayPayResultListener(){@Overridepublic void PayResult(String arg0, int arg1, int arg2, String arg3){ }});}}
2)、org.cocos2dx.cpp包下的AppActivity.java 文件内容如下:
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 = "";@Overrideprotected void onCreate(Bundle savedInstanceState){// TODO Auto-generated method stubsuper.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://failrunNativeCallback("2",jIndex);break;case 3://cancelrunNativeCallback("0",jIndex);break;default:break;}}}public static void runNativeCallback(final String state, final String billingIndex){Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable() {@Overridepublic 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~015switch(msg.what)
{case 1:Utils.getInstances().pay(payActivity, "001", new payCallback());break;case 2:Utils.getInstances().pay(payActivity, "002", new payCallback());break;...//此处省略多个casedefault:break; }};}; @Overrideprotected void onResume(){super.onResume();Utils.getInstances().onResume(this);}@Overrideprotected void onPause(){super.onPause(); Utils.getInstances().onPause(this);}@Overrideprotected void onDestroy(){super.onDestroy();}@Overrideprotected 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 调用文件 头文件
extern "C" { //参数:...计费点代码字串 void showTipDialog(const char* billIndex); } #endif
10、cpp文件
#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
cocos2dx android工程接入联通Unipay sdk相关推荐
- cocos2d-x Android版游戏之中国移动SDK嵌入
1. 拷贝API将SDK\runtime\CMBilling20007.jar拷贝至游戏工程的runtime目录下(或其他目录) ,但切记不能放在libs目录下编译,否则编译报错(如:bad rang ...
- Android App接入Facebook分享SDK,概率性无法启动Facebook客户端的问题分析
问题来源 由于我司的android app产品主要是面向海外,因此,app中的分享功能接入facebook分享是必不可少的.最近在接入facebook android sdk进行分享时,发现一个非常奇 ...
- 【Android】接入高德地图SDK
第一步 申请开发者权限 进入高德地图开放平台https://console.amap.com/dev/index申请认证个人开发者 第二步 创建应用 第三步 下载Android地图SDK 进入http ...
- Android支付接入(四):联通支付
注意事项: 1.联通支付是不需要自己标识软硬计费点的,当平台申请计费点的时候会提交每个计费点是否允许重复支付(即软硬计费点),支付时我们只需要传入相应的计费点即可,平台会帮我们记录哪个是软计费点,哪个 ...
- cocos2d-x基于windows平台交叉编辑android工程
cocos2d-x确实是一款优秀的引擎,尽管和正规军的unity3d比起来它显得有点土,但它在移动平台上的性能表现着实惊艳. 以下讲解如何将win32工程交叉编译到android平台. 一.环境搭建 ...
- Cocos2d-x学习之创建Android工程和编译
本文为 博客园 日月之明 原创,转载请详细标明原创作者及出处,以示尊重! 作者:日月之明 原文:http://www.cnblogs.com/lhming/archive/2012/06/27/256 ...
- cocos creator接入微信登陆sdk android篇
cocos creator接入微信登陆sdk 背景 项目引擎使用cocos creator,使用android studio集成开发工具,在开发之前先做好准备工作 在微信开放平台上创建好移动应用,拿到 ...
- Unity Android平台接入支付宝SDK
这篇文章前面讲的创建Android Studio工程的流程是不正确的!!! 正确的流程请参见:Unity Android平台下插件/SDK开发通用流程 最近帮一个群里的朋友接了一下支付宝的SDK,开发 ...
- 初体验-阿里云短视频 SDK For Android 快速接入
前言 近期的一些创意短视频 App 风靡年轻群体,比较典型的例如抖音.MUSE 等,阿里云也适时地推出了简单易用的短视频 SDK,帮助开发者们以较低的成本快速引入功能完备的创意短视频功能. 本文主要介 ...
- cocos2dx Android接入芒果插屏广告
cocos2dx Android接入芒果插屏广告 时间 2014-12-06 18:39:19 CSDN博客原文 http://blog.csdn.net/techkuki/article/det ...
最新文章
- idea springmvc_SSM三大框架使用Maven快速搭建整合(SpringMVC+Spring+Mybatis)
- QR分解原理与C实现(一般实矩阵)
- Android stadio Switch repository Android stadio切换仓库
- WinXP SSH连接不上虚拟机的解决方法
- mysql连接主备_mysql主备配置方法
- linux 升级 git版本,CentOS使用Yum升级Git到2.1x新版本
- mats测试所有显存命令_RGBLCD液晶屏层叠显示测试
- 提问:Server Application Unavailable
- 文件摆渡是什么意思_数据摆渡是什么意思?如何确保安全性?
- Python基础篇【第二篇】:运算符
- Spring启动过程——源码分析(finishBeanFactoryInitialization(beanFactory))
- 企业信用评分卡模型实战(python,附代码)
- 软件测试工程师简历项目经验怎么写
- 用java找出2个数组中重复的数字_【Java】 剑指offer(1) 找出数组中重复的数字
- 链表的中间结点-python
- 微信小程序自定义switch中带文字效果
- Python爬虫的应用:统记词频
- python 按键精灵 离线_(番外篇)Python操纵网盘客户端批量离线下载电影
- lio-sam框架:回环检测及位姿计算
- linux 移动硬盘 machine,MacBook使用一块移动硬盘做Win To Go及Time Machine备份