cocos2dx android工程接入联通Unipay sdk

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 plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="你的包名"  
  4.       android:versionCode="19"  
  5.       android:versionName="1.1.9"  
  6.       android:installLocation="preferExternal">  
  7.   
  8.     <uses-sdk android:minSdkVersion="9"/>  
  9.     <uses-feature android:glEsVersion="0x00020000" />  
  10.   
  11.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
  12.   <uses-permission android:name="android.permission.INTERNET"/>  
  13.   <uses-permission android:name="android.permission.SEND_SMS"/>  
  14.   <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
  15. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
  16. <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>  
  17. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  18.       
  19.       
  20.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    
  21.     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />   
  22.      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />   
  23.       
  24.       
  25.       
  26.     <application   
  27.         android:name="你的包名.MyApplication"  
  28.         android:allowBackup="true"  
  29.         android:label="@string/app_name"  
  30.         android:icon="@drawable/icon">  
  31.           
  32.         <!-- Tell Cocos2dxActivity the name of our .so -->  
  33.         <meta-data android:name="android.app.lib_name"  
  34.                   android:value="cocos2dcpp" />  
  35.                   
  36.         <activity   android:name="com.unicom.dcLoader.welcomeview"  
  37.                     android:label="@string/app_name"  
  38.                     android:screenOrientation="portrait"  
  39.                     android:theme="@android:style/Theme.NoTitleBar.Fullscreen"  
  40.                     android:configChanges="keyboardHidden|screenSize|navigation|orientation" >  
  41.             <intent-filter>  
  42.                 <action android:name="android.intent.action.MAIN"/>  
  43.                 <category android:name="android.intent.category.LAUNCHER"/>  
  44.             </intent-filter>  
  45.             <meta-data android:name="UNICOM_DIST_ACTIVITY"   android:value="org.cocos2dx.cpp.AppActivity"/>  
  46.         </activity>  
  47.           
  48.         <activity android:name="org.cocos2dx.cpp.AppActivity"  
  49.                   android:label="@string/app_name"  
  50.                   android:screenOrientation="portrait"  
  51.                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"  
  52.                   android:configChanges="orientation">  
  53.   
  54.         </activity>  
  55.           
  56.         <service android:name="com.unicom.wostore.unipay.paysecurity.SecurityServiceFramework">      
  57.             <intent-filter>  
  58.                 <action android:name="你的包名.unicom.wostore.unipay.securityserviceframework" />  
  59.             </intent-filter>  
  60.         </service>  
  61.           
  62.           
  63.         <meta-data android:name="wostore_billing_otherpay" android:value="false"/>  
  64.         <meta-data android:name="wostore_billing_chinaunicom" android:value="true"/>  
  65.         <meta-data android:name="wostore_billing_chinamobile"  android:value="true" />  
  66.         <meta-data android:name="wostore_billing_chinatele"  android:value="true" />  
  67.           
  68.           
  69.     </application>  
  70.   
  71.     <supports-screens android:anyDensity="true"  
  72.                       android:smallScreens="true"  
  73.                       android:normalScreens="true"  
  74.                       android:largeScreens="true"  
  75.                       android:xlargeScreens="true"/>  
  76.   
  77. </manifest>   

注意:你的包名   此处填写你的工程的包名


8、初始化sdk,调用计费接口

注意事项:

初始化接口必须在Application onCreate方法中调用,不可在Activity的onCreate方法中调用。

1)、cocos2dx创建的工程在src下一般只有org.cocos2dx.cpp包,在src下再创建一个包,包名为你的游戏包名,再在此包下创建MyApplication.java文件

内容如下:

[html]  view plain copy
  1. package 你的包名;  
  2.   
  3. import android.app.ActivityManager;  
  4. import android.app.Application;  
  5. import android.content.Context;  
  6. import android.util.Log;  
  7.   
  8.   
  9. import com.unicom.dcLoader.Utils;  
  10. import com.unicom.dcLoader.Utils.UnipayPayResultListener;  
  11.   
  12.   
  13. public class MyApplication extends Application   
  14. {  
  15.   
  16.     @Override  
  17.     public void onCreate()  
  18.     {  
  19.         super.onCreate();         
  20.         System.loadLibrary("megjb");  
  21.         Utils.getInstances().initSDK(this, new UnipayPayResultListener()  
  22.             {  
  23.                 @Override  
  24.                 public void PayResult(String arg0, int arg1, int arg2, String arg3)  
  25.                 {                     
  26.                 }  
  27.             });  
  28.     }  
  29.       
  30.       
  31. }  

2)、org.cocos2dx.cpp包下的AppActivity.java 文件内容如下:

[html]  view plain copy
  1. package org.cocos2dx.cpp;  
  2.   
  3.   
  4. import org.cocos2dx.lib.Cocos2dxActivity;  
  5. import org.cocos2dx.lib.Cocos2dxGLSurfaceView;  
  6. import org.cocos2dx.lib.Cocos2dxHandler;  
  7. import org.cocos2dx.lib.Cocos2dxHelper;  
  8.   
  9.   
  10. import com.unicom.dcLoader.Utils;  
  11. import com.unicom.dcLoader.Utils.UnipayPayResultListener;  
  12.   
  13. import android.content.Intent;  
  14. import android.os.Bundle;  
  15. import android.os.Handler;  
  16. import android.os.Message;  
  17. import android.widget.Toast;   
  18. import android.util.Log;    
  19.   
  20. public class AppActivity extends Cocos2dxActivity  
  21.  {  
  22.   
  23.     public static AppActivity payActivity = null;  
  24.     private static String jIndex = "";  
  25.       
  26.   
  27.     @Override  
  28.     protected void onCreate(Bundle savedInstanceState)  
  29.     {  
  30.         // TODO Auto-generated method stub  
  31.         super.onCreate(savedInstanceState);       
  32.         payActivity = this;  
  33.     }  
  34.       
  35.     //返回实例  
  36.     public static Object getInstance()  
  37.     {  
  38.         if (payActivity == null)  
  39.         {  
  40.             payActivity = new AppActivity();  
  41.         }  
  42.         return payActivity;  
  43.     }  
  44.       
  45.       
  46.     private class payCallback implements UnipayPayResultListener  
  47.     {  
  48.         public void PayResult(String paycode, int flag, int flag2, String error)   
  49.         {  
  50.             // flag为支付回调结果,flag2为回调类型,error为当前结果描述,paycode是完整的支付编码  
  51.              switch (flag)   
  52.              {  
  53.                 case 1://success  
  54.                     //此处放置支付请求已提交的相关处理代码  
  55.                     runNativeCallback("1",jIndex);  
  56.                     break;  
  57.   
  58.                 case 2://fail  
  59.                     runNativeCallback("2",jIndex);  
  60.                      break;  
  61.                   
  62.                 case 3://cancel  
  63.                     runNativeCallback("0",jIndex);  
  64.                     break;  
  65.                   
  66.                  default:  
  67.                      break;  
  68.              }  
  69.         }  
  70.      }  
  71.       
  72.   
  73.     public static void runNativeCallback(final String state, final String billingIndex)  
  74.     {  
  75.         Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable()   
  76.                 {  
  77.                     @Override  
  78.                     public void run()  
  79.                     {  
  80.                         callBack(state,billingIndex);  
  81.                     }  
  82.                 });  
  83.     }  
  84.     //根据返回结果,调用不同的处理  交易标志:istate 0:取消,1成功,2失败;  
  85.     public native static void callBack(String state,String billingIndex);  
  86.           
  87.   
  88.   
  89.   
  90.     //调用jdk的函数付款     
  91.     public void jdkPay(String billingIndex)  
  92.     {  
  93.         jIndex = billingIndex;  
  94.         String strSerial = "";  
  95.         int iSerial = 1;  
  96.               
  97.         iSerial = Integer.parseInt(billingIndex);  
  98.         payHandler.sendEmptyMessage(iSerial);   
  99.   
  100.     }  
  101.   
  102.     private Handler payHandler = new Handler()  
  103.        {    
  104.                 public void handleMessage(android.os.Message msg)  
  105.                 {    
  106.             //计费点001~015对应联通的计费代码001~015  
  107.                         switch(msg.what)    
  108.                         {  
  109.                          case 1:  
  110.                            Utils.getInstances().pay(payActivity, "001", new payCallback());  
  111.                            break;  
  112.                          case 2:  
  113.                            Utils.getInstances().pay(payActivity, "002", new payCallback());  
  114.                            break;  
  115.                      ...//此处省略多个case  
  116.                          default:  
  117.                            break;     
  118.                         }  
  119.   
  120.                };  
  121.         };    
  122.                
  123.     @Override  
  124.     protected void onResume()  
  125.     {  
  126.         super.onResume();  
  127.         Utils.getInstances().onResume(this);  
  128.     }  
  129.   
  130.     @Override  
  131.     protected void onPause()  
  132.     {  
  133.         super.onPause();          
  134.         Utils.getInstances().onPause(this);  
  135.     }  
  136.       
  137.     @Override  
  138.     protected void onDestroy()  
  139.     {  
  140.         super.onDestroy();  
  141.     }  
  142.   
  143.       
  144.      @Override  
  145.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  146.           
  147.     }  
  148.    
  149. }  

如果jdkPay函数中直接调用Utils.getInstances().pay函数,会提示 Can't create handler inside thread  that has not called Looper.prepare()

即不能在子线程中刷新ui

所以新建一个handler。



9、jni 调用文件 头文件

[html]  view plain copy
  1. extern "C"    
  2. {    
  3.     //参数:...计费点代码字串    
  4.     void showTipDialog(const char* billIndex);           
  5. }    
  6.     
  7. #endif    

10、cpp文件

[html]  view plain copy
  1. #include "../../Classes/Result.h"    
  2. #include "jniBridge.h"    
  3. #include "cocos2d.h"    
  4. #include "platform\android\jni/JniHelper.h"    
  5. #include <jni.h>    
  6. #define CLASS_NAME "org/cocos2dx/cpp/AppActivity"    
  7.     
  8. using namespace cocos2d;    
  9. extern "C"    
  10. {    
  11.     
  12.     
  13.     void Java_org_cocos2dx_cpp_AppActivity_callBack(JNIEnv* env,jobject thiz,jstring state, jstring billingIndex)    
  14.         {    
  15.             const char * pState = env->GetStringUTFChars(state,NULL);    
  16.             const char * pIndex = env->GetStringUTFChars(billingIndex,NULL);    
  17.     
  18.             if(strcmp(pState,"1") == 0)    
  19.             {    
  20.                 doSuccess(pIndex);//成功后调用的函数,在文件头部要#include此函数文件如Result.h    
  21.             }    
  22.             else if(strcmp(pState,"2") == 0)    
  23.             {    
  24.                 doFault(pIndex);//失败后调用的函数,在文件头部要#include此函数文件如Result.h    
  25.             }    
  26.             else if(strcmp(pState,"0") == 0)    
  27.             {   //取消购买时    
  28.                 doCancel(pIndex);//取消后调用的函数,在文件头部要#include此函数文件如Result.h    
  29.             }    
  30.             env->ReleaseStringUTFChars(state,pState);    
  31.             env->ReleaseStringUTFChars(billingIndex,pIndex);    
  32.         }    
  33.     
  34.     
  35.     
  36.     void showTipDialog(const char* billIndex)    
  37.     {    
  38.         JniMethodInfo minfo;    
  39.         jobject jobj;    
  40.         if (JniHelper::getStaticMethodInfo(minfo, CLASS_NAME,"getInstance", "()Ljava/lang/Object;"))    
  41.         {    
  42.             jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);    
  43.             if (JniHelper::getMethodInfo(minfo, CLASS_NAME,"jdkPay", "(Ljava/lang/String;)V"))    
  44.             {    
  45.                 jstring jindex = minfo.env->NewStringUTF(billIndex);    
  46.                 minfo.env->CallVoidMethod(jobj, minfo.methodID,jindex);    
  47.                 minfo.env->DeleteLocalRef(jindex);    
  48.             }    
  49.         }    
  50.     }          
  51.           
  52.     
  53. }    

Over


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值