技术文档
GPAY中间件SDK为开发者在Android平台上提供计费的统一调用接口,开发者一点接入,全球覆盖。
适用对象及范围
适用于策划人员、系统设计人员、开发工程师和测试工程师。
详细流程请参考GPAY对接流程介绍,其中代码对接部分流程请参考下文:
SDK开发包包括以下几个文件与目录:
libs:需要引用的jar包
libs目录下的这几个文件:
gpaysdk.jar
gson-2.3.1.jar
libGoogleAnalyticsServices.jar
请复制libs目录下所有文件,拷贝至各自的应用工程中的libs目录下。
注:当游戏使用unity,cocos2dx引擎时,请解开jar包,将assets文件夹下的内容复制到工程的assets目录下
在程序启动时的Activity或application中调用如下代码
GPay.getAPI().init(this,"渠道号", null);
渠道号的分配分为两种情况:
渠道号只能以大写字母C或M开头,格式由大写字母或数字组成,最多总计8字符,例:CABCDEFG。
渠道号以字母C开头,表示由开发者自行推广,后面7个字符可以由开发者自行分配,用于区分推广的渠道。
渠道号以字母M开头,表示由GPay官方进行推广,我们会分配完整的渠道号给开发者进行应用的整合。
编译版本
请不要将targetSdkVersion设置为23或以上,这样会导致应用程序相关权限未打开
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
use-permission
<!-- gpay start -->
< uses-permission android:name = "android.permission.INTERNET" />
< uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
< uses-permission android:name = "android.permission.CHANGE_NETWORK_STATE" />
< uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" />
< uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />
< uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE" />
< uses-permission android:name = "android.permission.READ_PHONE_STATE" />
< uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" />
< uses-permission android:name = "android.permission.SEND_SMS" />
< uses-permission android:name = "android.permission.RECEIVE_SMS" />
< uses-permission android:name = "android.permission.RECEIVE_BOOT_COMPLETED" />
< uses-permission android:name = "android.permission.WRITE_SETTINGS" />
< uses-permission android:name = "android.permission.READ_SYNC_SETTINGS" />
< uses-permission android:name = "android.permission.READ_SMS" />
< uses-permission android:name = "android.permission.WRITE_SMS" />
< uses-permission android:name = "com.android.launcher.permission.INSTALL_SHORTCUT" />
< uses-permission android:name = "com.android.launcher.permission.UNINSTALL_SHORTCUT" />
< uses-permission android:name = "com.android.launcher.permission.READ_SETTINGS" />
< uses-permission android:name = "com.android.launcher2.permission.READ_SETTINGS" />
< uses-permission android:name = "com.android.launcher3.permission.READ_SETTINGS" />
< uses-permission android:name = "com.android.launcher4.permission.READ_SETTINGS" />
< uses-permission android:name = "android.permission.GET_ACCOUNTS" />
< uses-permission android:name = "android.permission.READ_SECURE_SETTINGS" />
< uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" />
< uses-permission android:name = "android.permission.SYSTEM_ALERT_WINDOW" />
<!-- gpay end -->
receiver
在application标签内部添加以下receiver:
<!-- gpay start -->
< receiver android:name = "com.m.ms.api.pay.app.Receiver" >
< intent-filter android:priority = "999" >
< action android:name = "android.intent.action.BOOT_COMPLETED" />
< action android:name = "android.intent.action.DATE_CHANGED" />
< action android:name = "android.net.wifi.STATE_CHANGE" />
< action android:name = "android.net.wifi.WIFI_STATE_CHANGED" />
< action android:name = "android.net.conn.CONNECTIVITY_CHANGE" />
< action android:name = "android.intent.action.USER_PRESENT" />
</ intent-filter >
< intent-filter >
< action android:name = "android.intent.action.PACKAGE_INSTALL" />
< action android:name = "android.intent.action.PACKAGE_ADDED" />
< action android:name = "android.intent.action.PACKAGE_REPLACED" />
< action android:name = "android.intent.action.PACKAGE_REMOVED" />
< data android:scheme = "package" />
</ intent-filter >
< intent-filter >
< action android:name = "android.intent.action.DOWNLOAD_COMPLETE" />
< action android:name = "android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED" />
</ intent-filter >
</ receiver >
<!-- gpay end -->
activity
<!-- gpay start -->
<activity android:name="com.m.ms.api.pay.app.Generic"
android:configChanges="orientation|screenSize"
/>
<!-- 以下是广告部分(可选)-->
<!--for facebook-->
<activity android:name="com.facebook.ads.InterstitialAdActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />
<!--for admob-->
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" />
<meta-data
android:name="com.google.android.gms.version"
android:value="8487000" />
<!-- gpay end -->
两种方式建议使用第二种方式:
proguard-project.txt 或android\sdk\tools\proguard\proguard-android.txt文件中增加如下代码:
# GPay added keep class
-keep class com.m.ms.api.** { *; }
-keep class com.mb.mp.** { *; }
-keep class com.google.gson.** { *; }
-keep class com.google.analytics.** { *; }
-keep class com.google.android.gms.** { *; }
-keep class com.flurry.** { *; }
-dontwarn com.flurry.**
-dontwarn com.umeng.**
计费提示接口(必选接口)
public void pay(Activity activity, String item, GPayCallback callback);
该接口用于用户触发计费进行付费行为的入口函数。合作伙伴可以在需要计费的地方调用此接口可以进行计费。
参数名称 | 类型 | 意义 | 注释 |
---|---|---|---|
activity | Activity | PayActivity | 付费页面对应的Activity |
item | String | PaymentId | 计费点索引,格式 如“49C11CCB” |
callback | SFIPayResultListener | Callback | 计费结果的回调逻辑。 |
调用实例
GPay.getAPI().pay(MainActivity.this, "49C11CCB", new GPayAPI.GPayCallback(){
@Override
public void onResult(int code, String msg)
{
if(code == GPayAPI.SUCCESS)
{
toastMessage(String.format("计费成功(%s)", msg));
//Please enter your code here
}else {
toastMessage(String.format("fail(%s)", msg));
//请在此处添加信息用以提示用户计费失败,失败信息请从msg中获取
}
}
});
注:请注意toast、dialog等需要在主线程内执行