您的位置:首页 > 移动开发 > Cocos引擎

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对应的目录下(电信和移动支付)


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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: