Android支付接入(五):机锋网

前边已经陆续跟大家走了一遍运营商和支付宝付费接入,今天跟大家一起看看机锋网的支付接入。事实上付费接入本身并没有太多须要注意的地方,做的多了以后你会发现套路都是大同小异的。而须要注意的地方在于怎么跟游戏兼容及后期的维护,包含增减支付方式。如今谈下我个人理解(说的不正确希望大家猛喷),付费界面及逻辑尽量不要给一个单独的Activity,由于

1.界面的频繁跳转会费时(尤其对于用cocos2d-x写的游戏来说界面跳出跳进延时非常大,会影响游戏性);

2.开启新Activity会涉及到数据的传递,新Activity的维护及销毁,这里力求简洁,频繁的数据传递难免会出错(大家都知道,支付的逻辑是不同意出现丁点错误的),假设单一渠道的付费逻辑上非常easy,假设集合了5、6个甚至很多其它的付费方式的时候以及掺杂游戏逻辑之后,支付逻辑不够简洁会使你头疼。

3.正在尝试的让cocos2d-x的游戏跟Unity3D的游戏使用一套付费接口,这种话Activity多了不会是一个好的选择

4.假设使用Activity那么AndroidManifest里边必须要注意注冊此Activity,这是一个定时炸弹,由于不同支付方式都须要在Manifest里边注冊相关配置,当配置量大了以后难免会漏掉次Activity的声明,SDK的接入是批量的你可能会同一时候接不同的游戏和不同的付费方式,这就须要在最短的时间里准确的接好多种游戏及付费方式,因此注意事项越少越好。

 

机锋的支付是比較简单的一种支付方式,并且其本身已经集成了支付宝和充值卡支付,如今我们来看下代码:

AndroiManifest.xml

[html] view plaincopy
  1. <!-- 机锋网 -->  
  2.         <activity  
  3.             android:name="com.gfan.sdk.payment.PaymentsActivity"  
  4.             android:configChanges="orientation|keyboardHidden" />  
  5.         <activity  
  6.             android:name="com.gfan.sdk.charge.ChargeActivity"  
  7.             android:configChanges="orientation|keyboardHidden" />  
  8.         <activity  
  9.             android:name="com.gfan.sdk.account.LoginActivity"  
  10.             android:configChanges="orientation|keyboardHidden"  
  11.             android:windowSoftInputMode="adjustUnspecified" />  
  12.   
  13.         <!-- 请替换gfan_pay_appkey为开发人员平台中的appKey -->  
  14.         <meta-data  
  15.             android:name="gfan_pay_appkey"  
  16.             android:value="XXX" />  
  17.   
  18.         <!-- 不用动 -->  
  19.         <meta-data  
  20.             android:name="gfan_type"  
  21.             android:value="paysdk" />  
  22.   
  23.         <!-- 不用动 -->  
  24.         <meta-data  
  25.             android:name="gfan_cpid"  
  26.             android:value="testcpid" />  
  27.   
  28. <!--这里是Activity的声明及机锋參数配置-->  
  29.    
  30.   
  31.     <uses-permission android:name="android.permission.INTERNET"/>  
  32.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
  33.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
  34.   
  35. <!--权限的配置,第三方平台支付都是走的网络,所以须要联网权限,及获取是否联网的权限-->  

 

Fiap.java

 

[java] view plaincopy
  1. package com.example.blogforgfan;  
  2.   
  3. // 机锋应用内支付  
  4. import com.gfan.sdk.payment.PaymentInfo;  
  5. import com.gfan.sdk.payment.PaymentsActivity;  
  6. import android.annotation.SuppressLint;  
  7. import android.app.Activity;  
  8. import android.app.AlertDialog;  
  9. import android.content.Context;  
  10. import android.content.Intent;  
  11. import android.net.ConnectivityManager;  
  12. import android.net.NetworkInfo;  
  13. import android.os.Bundle;  
  14. import android.os.Handler;  
  15. import android.view.View;  
  16.   
  17. @SuppressLint("HandlerLeak")  
  18. public class Fiap extends Activity {  
  19.   
  20.     final int CATCAP_ANDROID_PAY = 0// 跳转Activity请求码  
  21.     int catcap_android_pay_catcap_coin = 0// 购买的猫币  
  22.   
  23.     @Override  
  24.     protected void onCreate(Bundle savedInstanceState) {  
  25.         // TODO Auto-generated method stub  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.activity_main);  
  28.         findViewById(R.id.button1).setOnClickListener(  
  29.                 new View.OnClickListener() {  
  30.   
  31.                     @Override  
  32.                     public void onClick(View v) {  
  33.                         // TODO Auto-generated method stub  
  34.                         android_pay(2);  
  35.                     }  
  36.                 });  
  37.     }  
  38.   
  39.     // ===================================  
  40.     // JAVA  
  41.     // ===================================  
  42.   
  43.     public void android_pay(int index) {  
  44.         if (!is_can_internet(Fiap.this)) {  
  45.             fiapHandler.sendEmptyMessage(1);  
  46.             return;  
  47.         }  
  48.         int coin = 0;  
  49.         switch (index) {  
  50.         case 0:  
  51.             coin = 2;  
  52.             this.catcap_android_pay_catcap_coin = 50;  
  53.             break;  
  54.         case 1:  
  55.             coin = 4;  
  56.             this.catcap_android_pay_catcap_coin = 120;  
  57.             break;  
  58.         case 2:  
  59.             coin = 6;  
  60.             this.catcap_android_pay_catcap_coin = 200;  
  61.             break;  
  62.         case 3:  
  63.             coin = 8;  
  64.             this.catcap_android_pay_catcap_coin = 300;  
  65.             break;  
  66.   
  67.         default:  
  68.             break;  
  69.         }  
  70.         // coin *= 10;此处coin是人民币,换算成机锋券需*10  
  71.         // 设置购买信息(购买的道具名,付费描写叙述,支付金额,订单号)  
  72.         // PS:这里须要自己组织订单号,所以需保证每次订单号是唯一的,此处传入的金额是机锋券(1元=10机锋券)  
  73.         PaymentInfo info = new PaymentInfo("猫币""购买游戏所用猫币", coin,  
  74.                 get_order_id());  
  75.         // 到购买页面  
  76.         Intent intent = new Intent(this, PaymentsActivity.class);  
  77.         intent.putExtra(PaymentsActivity.EXTRA_KEY_PAYMENTINFO, info);  
  78.         startActivityForResult(intent, CATCAP_ANDROID_PAY);  
  79.     }  
  80.   
  81.     // ===================================  
  82.     // Android  
  83.     // ===================================  
  84.     @Override  
  85.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  86.         if (requestCode == CATCAP_ANDROID_PAY) { // 保证结果码跟请求码一致  
  87.             if (resultCode == RESULT_OK) { // 支付成功,这里填写支付成功后的逻辑  
  88.   
  89.                 new AlertDialog.Builder(this).setTitle("感谢购买猫币")  
  90.                         .setPositiveButton("确定"null).create().show();  
  91.   
  92.             }  
  93.         }  
  94.         // 清空数据  
  95.         this.catcap_android_pay_catcap_coin = 0;  
  96.         super.onActivityResult(requestCode, resultCode, data);  
  97.     }  
  98.   
  99.     public boolean is_can_internet(final Context context) {  
  100.         try {  
  101.             ConnectivityManager manger = (ConnectivityManager) context  
  102.                     .getSystemService(Context.CONNECTIVITY_SERVICE);  
  103.             NetworkInfo info = manger.getActiveNetworkInfo();  
  104.             return (info != null && info.isConnected());  
  105.         } catch (Exception e) {  
  106.             return false;  
  107.         }  
  108.     }  
  109.   
  110.     public String get_order_id() {  
  111.         long ran1 = get_round(11119999);  
  112.         long ran2 = get_round(11119999);  
  113.         // return android_get_umeng_channel () + "_" + ran1 +  
  114.         // System.currentTimeMillis () + ran2;  
  115.         return "_" + ran1 + System.currentTimeMillis() + ran2;  
  116.     }  
  117.   
  118.     public long get_round(int min, int max) {  
  119.         return Math.round(Math.random() * (max - min) + min);  
  120.     }  
  121.   
  122.     Handler fiapHandler = new Handler() {  
  123.   
  124.         public void handleMessage(android.os.Message msg) {  
  125.             if (msg.what == 1) {  
  126.                 new AlertDialog.Builder(Fiap.this).setTitle("提示")  
  127.                         .setMessage("连接不到网络。").setPositiveButton("确定"null)  
  128.                         .create().show();  
  129.             }  
  130.         };  
  131.     };  
  132. }  


 

<!-- 转载完成-->

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存的使用

内容整理于朱有鹏老师的课程。 1、冯诺依曼结构和哈佛结构 冯诺依曼结构是数据和代码放在一起&#xff0c;哈佛结构是数据和代码分开存在。什么是代码&#xff1a;函数。什么是数据&#xff1a;全局变量、局部变量。在S5PV210中运行的linux系统上&#xff0c;运行应用程序时&am…

java启动密码,java - 用户验证密码后如何启动java applet程序? - SO中文参考 - www.soinside.com...

我正在尝试连接两个简单的java程序&#xff0c;一个密码登录程序&#xff0c;然后打开第二个程序(一个非常简单的PrintWriter程序)。我是一个大型菜鸟&#xff0c;所以尝试将二级程序添加到密码程序中。显然这没用。我看到很多关于创建密码程序的条目&#xff0c;以及一些关于使…

WPF 中的换行符

WPF中UI上和后台代码中的换行符不同。 其中&#xff1a; XAML中为 C#代码中为 \r\n 或者&#xff1a; Environment.NewLine转载于:https://www.cnblogs.com/eric_ibm/archive/2013/05/09/WPF.html

matlab教程蚁群算法,蚁群算法怎样用MATLAB仿真

蚁群算法采用matlab开发的仿真平台&#xff1a;算法实现&#xff0c;路径显示&#xff0c;人机交互控制等希望对你有帮助&#xff01;是可以运行的% the procedure of ant colony algorithm for VRP%% % % % % % % % % % %%initialize the pa…

androidpn的一次亲密接触(二)

简单看了一下源码的实现&#xff0c;这里贴一点个人觉得比叫重要的代码。 XmppManager.java 构造方法&#xff1a;Java代码public XmppManager(NotificationService notificationService) 在这里主要是从共享引用中取得xmpp服务器地址和端口号、用户名和密码。 内部类Java代码…

指针知识学习[总]

printf("p %p.\n", p); // %p打印指针和%x打印指针&#xff0c;打印出的值是一样的 printf("p 0x%x.\n", p); 一、指针是什么&#xff1f; 1、指针变量和普通变量的区别 指针的实质就是个变量&#xff0c;它跟普通变量没有任何本质区别。指针完整的名字…

网络游戏性能测试的几点想法

进入游戏行业也有一段时间了&#xff0c;在日常的工作中对游戏的性能测试也产生了一些想法&#xff0c;因此写出来与大家讨论讨论。网络游戏行业现在越做越大&#xff0c;面也越来越广了&#xff0c;依我的观点主要分为以下几个方面&#xff1a;1、传统的c/s架构的网络游戏&…

mongodb java报授权,mongoDB 3.0用户创建与授权

选择数据库 use admin添加用户&#xff1a;db.createUser({user: "admin",pwd: "12345678",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})此命令创建的用户只有管理用户的权限&#xff0c;并没有操作数据库的权限。查看…

交换排序-经典的快速排序算法总结

时间复杂度&#xff0c;平均O&#xff08;nlogn&#xff09;&#xff0c;最坏O&#xff08;n)&#xff1b; 不稳定的算法 1、算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略&#xff0c;通常称其为分治法(Divide-and-ConquerMethod)。…

c语言数组问题解析

#import <Foundation/Foundation.h>#define COUNT 10int main(int argc, const char * argv[]){//1、随机产生20个[10 , 50]的正整数存到数组中&#xff0c;并求数组中的所有元素最大值、最小值、平均值以及各元素之和。第二大值。// int max 0, min 0, sum 0, sec…

指针学习2

主要是指针数组、数组指针、函数指针的学习&#xff0c;以及二重指针、二维数组的学习。 一、指针数组与数组指针 1、概念 指针数组的实质是一个数组&#xff0c;这个数组中存储的内容全部是指针变量。数组指针的实质是一个指针&#xff0c;这个指针指向的是一个数组。2、分析…

php excel 分页,excel分页线怎么增加

增加excel分页线的方法&#xff1a;首先依次点击“工作簿视图-分页预览”&#xff1b;然后点击要在其下方插入分页符的这一行&#xff1b;最后在“页面布局”选项卡上的“页面设置”组中&#xff0c;单击“分隔符”即可。本文操作环境&#xff1a;Windows7系统&#xff0c;Micr…

C# 中的委托和事件

PDF 浏览&#xff1a;http://www.tracefact.net/Document/Delegates-and-Events-in-CSharp.pdf文中代码在VS2005下通过&#xff0c;由于VS2003(.Net Framework 1.1)不支持隐式的委托变量&#xff0c;所以如果在一个接受委托类型的位置直接赋予方法名&#xff0c;在VS2003下会报…

DEBUG、void、NULL、C库和API、临时匿名变量、main函数

一、程序调试的debug宏 1、程序调试的常见方案 单步调试、裸机LED调试、打印信息、log文件 利用调试器进行单步调试&#xff08;譬如IDE中&#xff0c;Jlink&#xff09;适用于新手&#xff0c;最大的好处就是直观&#xff0c;能够帮助找到问题。缺点是限制性大、速度慢。裸机…

php7 有ext skel吗,PHP扩展开发系列02 - 老司机起步之函数

上一篇扩展开发引导文章中。创建了编写扩展的三个基本文件。或许你会有个疑问PHP没有类似的自动生成项目框架的工具吗&#xff1f; 当然有。这篇文章就开始介绍使用 "php-ext-cli" 工具来生成扩展项目文件注意这里的 "php-ext-cli" 本身没有这玩意&#xf…

php 数据类型转换与比较

<?php define("PI", 3.1415926); echo PI."<br>"; //定义一个常量 define("GREETING","Hello world!");echo constant("GREETING")."<br>"; $a 10; $b "10a"; echo (string)$a $b; …

(转载)说说char

char一直都在使用并且大量的使用&#xff0c;但是&#xff0c;大部分都是在单一平台上&#xff0c;那样没有太多的问题&#xff0c;在windows上大量直接使用wchar_t来解决中文的问题。并且在使用跨平台时也大多直接使用了Qt的QString来节省了很多的麻烦&#xff0c;但是现在项目…

字符串类型、结构体、共用体、枚举、container宏、内存来源

一、C语言的字符串类型 1、C语言没有原生字符串类型 很多高级语言像java、C#等就有字符串类型&#xff0c;有个String来表示字符串&#xff0c;用法和int这些很像&#xff0c;可以String s1 "linux";来定义字符串类型的变量。C语言没有String类型&#xff0c;C语言…

WPF 正確理解ContentPresenter

2019独角兽企业重金招聘Python工程师标准>>> 我們先由下圖來看類層次,可知ContentControl繼承Control,ContentPresenter繼承FrameworkElement(Control也繼承FrameworkElement); 同樣的,ItemsControl繼承Control,ItemsPresenter繼承FrameworkElement. 在Control類並…

java 数据网格,easyui数据网格

easyui中的数据网格应用1.页面代码&#xff1a;class"java" name"code">String path request.getContextPath();String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/";…