现在的位置: 首页 > 综合 > 正文

Android支付接入(二):移动游戏基地

2018年02月16日 ⁄ 综合 ⁄ 共 5530字 ⁄ 字号 评论关闭

上篇博文跟大家一起走了一遍支付宝支付,今天我们来看看移动支付。众所周知目前付费通道的龙头老大还要当属三大运营商(移动、联通、电信)。运营商接入代码相对简单,但琐碎的要求太多,涉及到启动界面、桌面图标、主界面、退出界面等。在百度网盘中:http://pan.baidu.com/share/link?shareid=422365&uk=473193131我会为大家共享运营商接入的要求规范。移动游戏基地后台地址:http://g.10086.cn/


为了让大家看的更清楚,以后的博文中我会配上截图。
 
Android支付接入(二):移动游戏基地
Android支付接入(二):移动游戏基地

Android支付接入(二):移动游戏基地

Android支付接入(二):移动游戏基地

注意事项:

1.移动游戏基地sdk为动态打包,即公司信息,计费点信息都是在申请计费点的时候提交到移动的,而文中提到的计费点索引是移动申请后台看到的真实计费点的后三位(由于此处属于商务负责,本人无法登陆后台所以无法提供截图,见谅)。
2.注意文中提到的启动游戏界面前先启动移动界面,退出游戏时显示移动的退出确认界面。
3.注意主界面需要显示的:开始游戏,设置,帮助,关于,更多游戏,退出必有选项。

 

好了,继续贴代码:


AndroidManifest.xml配置:
<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.blogforyd.MainActivity"
            android:label="@string/app_name" >
        </activity>
        
        <!-- 移动所需Activity注册 -->
        <activity
            android:name="cn.emagsoftware.gamebilling.activity.GameOpenActivity"
            android:screenOrientation="sensor"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
//移动游戏基地需要启动游戏前先启动移动的闪屏界面,所以游戏主入口注册移到了这里
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.CHINAMOBILE_OMS_GAME" />

                <category android:name="android.intent.category.CHINAMOBILE_GAMES" />
            </intent-filter>
        </activity>
        <!-- 移动所需Activity注册-->
        
    </application>

    <!-- 移动所需权限注册 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    注意:如果下边这行报错,clean一下项目就行了,可以无视
    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" >
    </uses-permission>
    <!-- 移动所需权限注册 -->
 
MainActivity:游戏入口Activity
package com.example.blogforyd;
import cn.emagsoftware.gamebilling.api.GameInterface;
import cn.emagsoftware.gamebilling.api.GameInterface.GameExitCallback;
import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.View;
public class MainActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  // 调用初始化移动支付,否则无法启动支付界面(此方法最好放到启动游戏的时候调用)
  GameInterface.initializeApp(this);
  findViewById(R.id.button1).setOnClickListener(
    new View.OnClickListener() {
     @Override
     public void onClick(View v) {
      // TODO Auto-generated method stub
      Fiap fiap = new Fiap(MainActivity.this);
      
      // 需要购买什么道具传进去相应的index,此处传0为激活游戏
      fiap.android_Pay(0);
     }
    });
 }
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
  if (keyCode == KeyEvent.KEYCODE_BACK) {
   exit_game();
  }
  return super.onKeyDown(keyCode, event);
 }
 // 退出游戏
 public void exit_game() {
  GameInterface.exit(MainActivity.this, new GameExitCallback() {
   @Override
   public void onConfirmExit() {
    System.exit(0);
   }
   @Override
   public void onCancelExit() {
   }
  });
 }
 // 是否开启音效
 public boolean is_open_music() {
  return GameInterface.isMusicEnabled();
 }
}
Fiap.java:移动支付逻辑文件
//移动支付
//2013-04-28
package com.example.blogforyd;
import cn.emagsoftware.gamebilling.api.GameInterface;
import cn.emagsoftware.gamebilling.api.GameInterface.BillingCallback;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;
public class Fiap {
 
 private Activity mActivity;
 private boolean isRepeat;
 private String charge_Point;
 
 public Fiap(Activity activity){
  
  mActivity = activity;
 
 }
 
 //index是三种计费点对应的标识
 public void android_Pay(int index){
  
  switch (index) {
  case 0:
   //激活游戏
   isRepeat = false;
   //此处计费点填写移动平台申请的计费点的后三位作为计费点索引
   charge_Point = "000";
   break;
  case 1:
   isRepeat = true;
   charge_Point = "001";
   break;
  case 2:
   isRepeat = true;
   charge_Point = "002";
   break;
  case 3:
   isRepeat = true;
   charge_Point = "003";
   break;
  default:
   break;
  }
  
  fiapHandler.sendEmptyMessage(1);
  
 }
 
 Handler fiapHandler = new Handler(){
  
  public void handleMessage(Message msg) {
   
   if (msg.what == 1) {
    
    BillingCallback callBack = new BillingCallback() {
     @Override
     public void onBillingFail(String arg0) {
      // TODO Auto-generated method stub
      //此处表示支付失败
      Log.i("result of pay", arg0);
     }
     @Override
     public void onBillingSuccess(String arg0) {
      // TODO Auto-generated method stub
      //此处为支付成功逻辑
      Toast.makeText(mActivity, "支付成功", Toast.LENGTH_LONG).show();
     }
     @Override
     public void onUserOperCancel(String arg0) {
      // TODO Auto-generated method stub
      //此处表示用户取消支付
      Log.i("result of pay", arg0);
     }
    };
    //第一个参数为:触发计费接口的Context对象
    //第二个参数为:选择采用短信计费还是联网计费(true为短信,false为联网)
    //第三个参数为:计费点索引
    //第四个参数为:支付结果回调
    GameInterface.doBilling(mActivity, true, isRepeat, charge_Point,callBack);
   }
  };
 };
 

   至此移动计费接入就完成了,然后你就会面临着n次提交然后n次被驳回然后再n次修改,然后就没有然后了。。。我这样贴代码的方式看着有点不太爽,博文不断改进中,希望大家看到这篇博文的多提提意见,欢迎大家批评指正

抱歉!评论已关闭.