1.接入前项目检查(必接)

根据游戏接入后出现的问题,QuickSDK对游戏项目做以下几点要求:

· AndroidManifest.xml中android:targetSdkVersion="26" ()

部分渠道targetVersion为28时9.0设备http请求失败

application节点下添加

android:usesCleartextTraffic="true"

防止游戏与渠道sdk发生横竖屏切换出现问题

· U3D游戏项目下,AndroidManifest.xml中

Android:value值设置为true

· 为Activity添加横竖屏设置

根据游戏的横竖屏,将activity做横竖屏设置

android:screenOrientation="sensorLandscape"

android:screenOrientation="sensorPortrait"

或者

android:screenOrientation="landscape"

android:screenOrientation="portrait"

· AndroidManifest.xml中的Activity等组件路径为完整路径

· 游戏项目的类路径不要使用“com.quicksdk”,打渠道包时会删除该路径下的所有内容。

2.接入流程

2.1 添加资源(必接)

下载QuickSDK资源(http://www.quicksdk.com/download.html),将files文件夹下的文件libs和res拷贝到项目对应的文件夹中。

2.2 添加权限(必接)

Androidmanifest.xml中添加权限

2.3 添加QuickSdkApplication

2.3.1  新建游戏的Application(必接)

新建游戏的Application,继承自QuickSdkApplication

public class GameApplication extends QuickSdkApplication {

@Override

public void onCreate() {

super.onCreate();

}

}

2.3.2  将Application添加到AndroidManifest.xml中(必接)

在AndroidManifest.xml中的Application节点,修改android:name属性,其值为游戏新建的Application的全路径

2.4 添加闪屏

2.4.1  新建游戏闪屏Activity(必接)

新建游戏闪屏Activity,继承自QuickSdkSplashActivity

public class SplashActivity extends QuickSdkSplashActivity {

@Override

public int getBackgroundColor() {

return Color.WHITE;

}

@Override

public void onSplashStop() {

//闪屏结束后,跳转到游戏界面

Intent intent = new Intent(this, MainActivity.class);

startActivity(intent);

this.finish();

}

}

2.4.2  将闪屏Activity添加到AndroidManifest.xml中,并且设置为游戏启动Activity

说明:

android:name属性,其值为游戏自定义的闪屏Activity全路径

android:screenOrientation属性,其值根据游戏需求决定是横屏还是竖屏

2.4.3  高TargetSdkVesion强更适配(不使用强更可跳过此步骤)

备注: android:grantUriPermissions="true">的U注意大写!!!

2.4.4  在res下新建一个xml文件夹,在文件夹内新建一个filepaths.xml,并复制一下内容(不使用强更可跳过此步骤)

2.5 生命周期处理(必接)

游戏Activity的生命周期,调用相应的方法

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

com.quicksdk.Sdk.getInstance().onCreate(this);

}

@Override

protected void onStart() {

super.onStart();

com.quicksdk.Sdk.getInstance().onStart(this);

}

@Override

protected void onRestart() {

super.onRestart();

com.quicksdk.Sdk.getInstance().onRestart(this);

}

@Override

protected void onPause() {

super.onPause();

com.quicksdk.Sdk.getInstance().onPause(this);

}

@Override

protected void onResume() {

super.onResume();

com.quicksdk.Sdk.getInstance().onResume(this);

}

@Override

protected void onStop() {

super.onStop();

com.quicksdk.Sdk.getInstance().onStop(this);

}

@Override

protected void onDestroy() {

super.onDestroy();

com.quicksdk.Sdk.getInstance().onDestroy(this);

}

@Override

protected void onNewIntent(Intent intent) {

super.onNewIntent(intent);

com.quicksdk.Sdk.getInstance().onNewIntent(intent);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

com.quicksdk.Sdk.getInstance().onActivityResult(this, requestCode, resultCode, data);

}

2.6 QuickSDK初始化设置

2.6.1  设置初始化通知(必接)

类名:QuickSDK

方法:public QuickSDK setInitNotifier(InitNotifier notifier)

功能:设置初始化结果回调通知,一般在游戏开始前,初始化成功后,进行游戏登陆等相关的处理。

案例:

QuickSDK.getInstance().setInitNotifier(new InitNotifier() {

@Override

public void onSuccess() {

//初始化成功

}

@Override

public void onFailed(String message, String trace) {

//初始化失败

} });

2.6.2  设置登录通知(必接)

类名:QuickSDK

方法:public QuickSDK setLoginNotifier(LoginNotifier notifier)

功能:设置用户登陆结果回调通知的相关处理。

案例:

QuickSDK.getInstance().setLoginNotifier(new LoginNotifier() {

@Override

public void onSuccess(UserInfo userInfo) {

//登录成功,获取到用户信息userInfo

//通过userInfo中的UID、token做服务器登录认证

}

@Override

public void onCancel() {

//登录取消

}

@Override

public void onFailed(final String message, String trace) {

//登录失败

}

});

登录信息:

UserInfo

字段

类型

说明

UID

String

用户ID,SDK返回的唯一ID

username

String

用户登录名

token

String

用户验证token

接入要求:

1)启动游戏,在登录界面中获取到登录成功的通知,跳转到进入游戏的界面;

2)游戏以自动登录的方式调用登录时,获取到登录失败和登录取消的通知,应再次调用登录的功能;

3)不同渠道可能返回相同的UID,游戏应使用渠道ID+UID作为用户的唯一标识。渠道ID通过“public int getChannelType()”获取。

2.6.3  设置注销通知(必接)

类名:QuickSDK

方法:public QuickSDK setLogoutNotifier(LogoutNotifier notifier)

功能:设置用户注销结果回调通知等相关的处理。

案例:

QuickSDK.getInstance().setLogoutNotifier(new LogoutNotifier() {

@Override

public void onSuccess() {

//注销成功

}

@Override

public void onFailed(String message, String trace) {

//注销失败,不做处理

}

});

接入要求: 获取到注销成功的通知,游戏应回到登录界面并重新调用登录方法。

2.6.4  设置切换账号通知(必接)

类名:QuickSDK

方法:public QuickSDK setSwitchAccountNotifier(SwitchAccountNotifier notifier)

功能: 一些渠道(如:百度 等)在悬浮框有切换账号的功能,此回调即切换成功后的回调。游戏应清除当前的游戏角色信息。在切换账号成功后回到选择服务器界面,用回调结果里面的新的UID 和Token 进入游戏。注意:在此回调内无需调用登录接口

案例:

QuickSDK.getInstance().setSwitchAccountNotifier(new SwitchAccountNotifier() {

@Override

public void onSuccess(UserInfo userInfo) { //切换账号成功的回调,返回新账号的userInfo

}

@Override

public void onCancel() {

//切换账号取消

}

@Override

public void onFailed(String message, String trace) {

//切换账号失败

}

})

切换账号成功信息:

UserInfo

字段

类型

说明

UID

String

用户ID,SDK返回的唯一ID

username

String

用户登录名

token

String

用户验证token

接入要求:

在游戏界面中,获取到切换账号成功的通知,游戏注销当前的游戏角色,使用新的用户信息,回到进入游戏的界面。(针对渠道SDK在游戏界面中通过悬浮框进行账号的切换)

2.6.5  设置定额支付通知(必接)

类名:QuickSDK

方法:public QuickSDK setPayNotifier(PayNotifier notifier)

功能:设置用户支付结果回调通知等相关的处理

案例:

QuickSDK.getInstance().setPayNotifier(new PayNotifier() {

@Override

public void onSuccess(String sdkOrderID, String cpOrderID,

String extrasParams) {

//支付成功

//sdkOrderID:quick订单号 cpOrderID:游戏订单号

}

@Override

public void onCancel(String cpOrderID) {

//支付取消

}

@Override

public void onFailed(String cpOrderID, String message, String trace) {

//支付失败

}

});

说明:游戏充值是否成功到账,只能以服务器的通知为准,而不是客户端的通知,因为部分渠道SDK自身有时不会发送正确的通知。

2.6.6  设置退出通知(必接)

类名:QuickSDK

方法:public  QuickSDK  setExitNotifier(ExitNotifier notifier)

功能:设置用户退出结果回调通知等相关的处理

案例:

QuickSDK.getInstance().setExitNotifier(new ExitNotifier() {

@Override

public void onSuccess() {

//退出成功,游戏在此做自身的退出逻辑处理

}

@Override

public void onFailed(String message, String trace) {

//退出失败,不做处理

}

});

接入要求:获取到退出成功的通知后,游戏做自身的退出逻辑处理。

2.7 渠道SDK接口调用

接入要求:SDK的接口需在UI主线程下调用

2.7.1   SDK初始化(必接)

类名:com.quicksdk.Sdk

方法:public void init(Activity activity, String productCode, String productKey)

功能:渠道SDK初始化

参数:activity  必填 当前Activity

targetVersion大于等于23时,需要在初始化之前申请权限。如下:

案例1(当targetVersion 较大时  动态申请读写权限和读取手机状态等权限(一般此方法在onCreate执行)  具体权限 具体而定):

try {

//check权限

if ((ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED)

|| (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) {

//没有 , 申请权限 权限数组

ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.READ_PHONE_STATE ,Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

} else {

// 有 则执行初始化

Sdk.getInstance().init(this, "Product_Code", "Product_Key");

}

} catch (Exception e) {

//异常 继续申请

ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.READ_PHONE_STATE ,Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1);

}

//申请权限的回调(结果)这是一个类似生命周期的回调

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

//申请成功

Sdk.getInstance().init(this,"Product_Code", "Product_Key");

} else {

//失败 这里逻辑以游戏为准 这里只是模拟申请失败 cp方可改为继续申请权限 或者退出游戏 或者其他逻辑

Sdk.getInstance().init(this,"Product_Code", "Product_Key");

}

}

targetVersion小于等于22时,无申请权限。如下:

案例2:

QuickSDK.getInstance().setInitNotifier(new InitNotifier() {

@Override

public void onSuccess() {

//初始化成功

}

@Override

public void onFailed(String message, String trace) {

//初始化失败

}

});

productCode 必填 QuickSDK后台申请的productCode

productKey 必填 QuickSDK后台申请的productKey

案例:

com.quicksdk.Sdk.getInstance().init(activity, "后台申请的productCode", "后台申请的productKey");

接入要求:初始化接口,应在Activity中onCreate方法中调用。

2.7.2  登录账号(必接)

类名:com.quicksdk.User

方法:public void login(Activity activity)

功能:调用渠道SDK登录

参数:activity 必填 当前Activity

案例:

User.getInstance().login(activity);

接入要求:进入到登录界面,自动调用此接口,须保证初始化成功后再调用登录接口。

2.7.3  上传角色信息(必接)

类名:com.quicksdk.User

方法:public void setGameRoleInfo(Activity activity, GameRoleInfo roleInfo, boolean createRole)

功能:向渠道SDK上传角色信息

参数:activity 必填 当前Activity

roleInfo 必填 角色信息

createRole 必填 是否创建角色

案例:

//注:GameRoleInfo的字段,以下所有参数必须传,没有的请模拟一个参数传入;

GameRoleInfo roleInfo = new GameRoleInfo();

roleInfo.setServerID("1");//数字字符串,不能含有中文字符

roleInfo.setServerName("服务器1");

roleInfo.setGameRoleName("石头");

roleInfo.setGameRoleID("1121121");

roleInfo.setGameBalance("5000");

roleInfo.setVipLevel("4");  //设置当前用户vip等级,必须为数字整型字符串,请勿传"vip1"等类似字符串

roleInfo.setGameUserLevel("12"); //设置游戏角色等级

roleInfo.setPartyName("无敌联盟"); //设置帮派名称

roleInfo.setRoleCreateTime("1473141432"); //UC,当乐与1881,TT渠道必传,值为10位数时间戳

roleInfo.setPartyId("1100"); //360渠道参数,设置帮派id,必须为整型字符串

roleInfo.setGameRoleGender("男"); //360渠道参数

roleInfo.setGameRolePower("38"); //360,TT语音渠道参数,设置角色战力,必须为整型字符串

roleInfo.setPartyRoleId("11"); //360渠道参数,设置角色在帮派中的id

roleInfo.setPartyRoleName("帮主"); //360渠道参数,设置角色在帮派中的名称

roleInfo.setProfessionId("38"); //360渠道参数,设置角色职业id,必须为整型字符串

roleInfo.setProfession("法师"); //360渠道参数,设置角色职业名称

roleInfo.setFriendlist("无"); //360渠道参数,设置好友关系列表,格式请参考:http://open.quicksdk.net/help/detail/aid/190

创建角色

User.getInstance().setGameRoleInfo(activity, roleInfo, true);

进入游戏及角色升级

User.getInstance().setGameRoleInfo(activity, roleInfo, false);

GameRoleInfo

字段

类型

说明

serverID

String

服务器ID(数字字符串)

serverName

String

服务器名称

gameRoleName

String

角色名称

gameRoleID

String

角色ID

gameRoleBalance

String

角色用户余额

vipLevel

String

VIP等级

gameRoleLevel

String

角色用户等级

partyName

String

公会社团

roleCreateTime

String

角色创建时间(10位数的unix timestamp时间戳)

partyId

String

帮派id

gameRoleGender

String

角色性别

gameRolePower

String

战力

partyRoleId

String

角色在帮派中的id

partyRoleName

String

角色在帮派中的名称

professionId

String

角色职业id

profession

String

角色职业名称

friendlist

String

好友关系列表

接入说明:

1) 在创建游戏角色、进入游戏和角色升级3个地方调用此接口,当创建角色时createRole值为true,其他两种情况为false。true & false  均需要调用一遍

2) GameRoleInfo所有字段均不能传null,游戏没有的字段传一个默认值。

2.7.4  定额支付(必接)

类名:com.quicksdk.Payment

方法:public void pay(final Activity activity, final OrderInfo orderInfo, final GameRoleInfo roleInfo)

功能:调用渠道SDK支付

参数:activity 必填 当前Activity

orderInfo 所有参数必填 订单信息

roleInfo 所有参数必填 角色信息

案例:

GameRoleInfo roleInfo = new GameRoleInfo();

roleInfo.setServerID("1");//数字字符串

roleInfo.setServerName("服务器1");

roleInfo.setGameRoleName("石头");

roleInfo.setGameRoleID("1121121");

roleInfo.setGameUserLevel("12");

roleInfo.setVipLevel("4");

roleInfo.setGameBalance("5000");

roleInfo.setPartyName("xx联盟");

OrderInfo orderInfo = new OrderInfo();

orderInfo.setCpOrderID("20150917003200119310");

orderInfo.setGoodsName("元宝");//商品名称,不带数量

orderInfo.setCount(60);//游戏币数量

orderInfo.setAmount(6);

orderInfo.setGoodsID("1");

orderInfo.setGoodsDesc("Diamond_60_商品描述");

orderInfo.setPrice(0.1);

orderInfo.setExtrasParams("额外参数");

Payment.getInstance().pay(activity, orderInfo, roleInfo);

支付信息参数表:

OrderInfo

字段

类型

说明

goodsID

String

产品ID,用来识别购买的产品

goodsName

String

产品名称

cpOrderID

String

产品订单号(游戏方的订单号)

count

int

游戏币数量

amount

double

总金额(元)

goodsdesc

String

商品描述

extrasParams

String

透传参数,服务器发送异步通知时原样回传

为了兼容各个渠道商品名称能够统一显示,订单应以如下案例的形式传入:

案例1:                               案例2:

amount:6.0                         amount:10.0

count:60                             count:1

goodsName:元宝                 goodsName:月卡

接入要求:

· GoodsName产品名称以“月卡”、“钻石”、“元宝”的形式传入,不带数量;

· 其中OrderInfo中Count字段表示游戏币数量

· OrderInfo,GameRoleInfo所有字段均不能传null,游戏没有的字段传一个默认值或空字符。

2.7.5  注销账号(必接)

类名:com.quicksdk.User

方法:public void logout(Activity activity)

功能:渠道SDK注销

案例:

User.getInstance().logout(activity);

2.7.6 退出(必接)

类名:com.quicksdk.Sdk

方法:public void exit(Activity activity)

功能:渠道SDK退出,游戏做退出逻辑时,先通过isShowExitDialog接口判断渠道是否有退出框,如果渠道有退出框,直接调用QuickSDK的exit接口;如果渠道没有退出框,则调用游戏自身的退出框,退出框点击“确定”后,调用QuickSDK的exit接口。

案例:

//通过isShowExitDialog判断渠道sdk是否有退出框

if(QuickSDK.getInstance().isShowExitDialog()){

Sdk.getInstance().exit(activity);

}else{

// 游戏调用自身的退出对话框,点击确定后,调用quick的exit接口

new AlertDialog.Builder(MainActivity.this).setTitle("退出").setMessage("是否退出游戏?").setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface arg0, int arg1) {

Sdk.getInstance().exit(MainActivity.this);

}

}).setNegativeButton("取消", null).show();

}

3.扩展接口

3.1 获取渠道类型

类名:com.quicksdk.Extend

方法:public int getChannelType()

功能:获取渠道号

说明:渠道ID

案例:

Extend.getInstance().getChannelType();

3.2 获取设备号(DeviceID)

类名:com.quicksdk.Extend

方法:public String getDeviceID(Activity activity)

功能:获取QuickSDK定义的设备号

说明:此设备号仅以QuickSDK算法计算得来,与渠道或cp设备号不一致;

案例:

Extend.getInstance().getDeviceID(MainActivity.this);

3.3 上传自定义数据

类名:com.quicksdk.Extend

方法:public void uploadNode(Activity activity,String eventCode ,String eventParams)

功能:上传cp自定义的数据

说明:上传cp自定义的数据

案例:

Extend.getInstance(). uploadNode(activity,"eventCode ","eventParams");

3.4 获取配置参数值

类名:com.quicksdk.Extend

方法:public String getExtrasConfig(String key)

功能:获取配置参数值

说明:运行游戏自定义参数配置在quicksdk.xml文件中,根据一定的规则,在打包的时候进行改变

案例:

Extend.getInstance().getExtrasConfig("key");

3.5 是否支持指定方法

类名:com.quicksdk.Extend

方法:public boolean isFunctionSupported(final int funcType)

功能:是否支持指定方法

说明:某些SDK具有打开关闭浮动工具栏、进入用户中心、进入论坛等功能,该方法可以用来判断是否支持,方便游戏中进行判断. 指定方法的定义请参见SDK库com.quicksdk.FuncType的定义

案例:

Extend.getInstance().isFunctionSupported(FuncType.HIDE_TOOLBAR); //是否支持隐藏悬浮框功能

3.6 调用指定方法

类名:com.quicksdk.Extend

方法:public String callFunction(final Activity activity, final int funcType)

功能:调用指定方法

说明:某些渠道有显示/隐藏悬浮按扭、进入用户中心、进入论坛等功能,该方法可以用来调用第三方渠道支持的方法,调用前请先用isFunctionSupported进行判断。

案例:

Extend.getInstance().callFunction(activity, FuncType.HIDE_TOOLBAR); //调用隐藏悬浮框的方法

3.7调用QuickSDK客服插件(客服属收费项目,不需要就不接)

类名:com.quicksdk.Extend

方法:public void callPlugin(final Activity activity, final int funcType,final Object ... infos)

功能:调用显示客服插件的方法

说明:母包实现按钮调用该方法,然后到QuickSDK后台添加客服插件(QuickSDKCustomService)进行打包。

案例:

Extend.getInstance().callPlugin(MainActivity.this, FuncType.CUSTOM, "1000","嘻嘻哈哈","zzzz","1");//后四个参数请依次传入 角色id,角色名,区服名,vip等级

3.8调用渠道带参数的拓展功能(以下以渠道分享功能为例)

ShareInfo类字段说明

参数名称

数据类型

说明

title

string

分享标题

content

string

分享内容

imgPath

string

分享图片本地地址

imgUrl

string

分享图片网络地址

url

string

分享链接

type

string

分享类型

shareTo

string

分享到哪里

extenal

string

额外备注

类名:com.quicksdk.Extend

方法:public void callFunctionWithParams(final Activity activity, final int funcType,final Object ... infos)

功能:调用渠道的含参方法

说明:以下案例已分享为例 母包调用接口传入分享对象,打出对应渠道包之后即可调起对应渠道的分享功能。

案例:

Extend.getInstance().callFunctionWithParams(MainActivity.this, FuncType.SHARE,shareInfo);

3.9 调用实名认证接口(登录成功后进行调用)

类名:com.quicksdk.Extend

方法:Extend.getInstance().callFunctionWithParamsCallBack(activity, FuncType.REAL_NAME_REGISTER, callback)

功能:获取渠道实名认证信息

说明:callback的onSuccess将返回封装的json实体;uid (表示用户id),age (表示年龄, 如果渠道没返回默认为-1),realName (是否已实名: true表示已实名, false表示未实名;如果渠道没返回默认为 false),resumeGame (渠道实名认证失败之后是否可以继续游戏 :true表示可以, false表示不可以;如果渠道没返回默认为 true),other (预留字段,如果渠道没返回默认为""的字符串)

返回数据示例:

{"uid":"jc453530202","resumeGame":true,"realName":false,"other":"","age":-1}

案例:

private void verifyRealName() {

final Activity activity = this;

activity.runOnUiThread(new Runnable() {

@Override

public void run() {

// 判断渠道是否支持实名认证功能

if (Extend.getInstance().isFunctionSupported(FuncType.REAL_NAME_REGISTER)) {

Extend.getInstance().callFunctionWithParamsCallBack(activity, FuncType.REAL_NAME_REGISTER, new BaseCallBack() {

@Override

public void onSuccess(Object... arg0) {

if (arg0 != null && arg0.length > 0) {

JSONObject jsonObject = (JSONObject) arg0[0];

Log.d("json", "==========" + jsonObject.toString());

try {

// 用户id

String uid = jsonObject.getString("uid");

// 年龄, 如果渠道没返回默认为-1

int age = jsonObject.getInt("age");

// 是否已实名 true表示已实名

// false表示未实名,如果渠道没返回默认为false

boolean realName = jsonObject.getBoolean("realName");

// oppo实名认证失败之后是否可以继续游戏 true表示可以

// false表示不可以,如果渠道没返回默认为true

boolean resumeGame = jsonObject.getBoolean("resumeGame");

// 预留字段,如果渠道没返回默认为""的字符串

String other = jsonObject.getString("other");

// 游戏根据返回信息做对应的逻辑处理

} catch (JSONException e) {

}

}

}

@Override

public void onFailed(Object... arg0) {

}

});

}

}

});

}

4.其他

4.1 关于混淆

QuickSDK 已经经过了混淆,如果要混淆java代码,请不要混淆联编的jar包中的类。可以添加以下类到proguard配置,排除在混淆之外:

-keep class com.quicksdk.** { *; }

4.2 配置自定义参数

当游戏当游戏需要设置渠道相关的参数时。可以通过Quick后台添加自定义参数,在渠道列表中配置对应的值,最后通过Extend.getInstance().getExtrasConfig(String key)可以获取到该值。

4.3 测试要求

所有接口接入完成后,生成的母包,应严格按照母包测试用例进行测试,测试通过后,方可打出正确的渠道包。

android 退出登录通知到每个界面,文档中心 | QuickSDK——专业的手游第三方SDK接入服务平台,渠道SDK聚合,广告跟踪,客服,登录充值SDK...相关推荐

  1. Java 第三方sdk服务_文档中心 | QuickSDK——专业的手游第三方SDK接入服务平台,渠道SDK聚合,广告跟踪,客服,登录充值SDK...

    1.接入前项目检查(必接) 根据游戏接入后出现的问题,QuickSDK对游戏项目做以下几点要求: · AndroidManifest.xml中android:targetSdkVersion=&quo ...

  2. android无法安装ios应用程序,蒲公英 - 文档中心 - iOS 应用安装失败原因排查

    iOS 的内测应用在安装时,很多人都遇到过安装失败的情况,安装失败的原因比较多,下面我们将一些常见原因总结如下,方便开发者进行排查. 启动应用时,出现提示"未受信任的企业级开发者" ...

  3. DevOps文档中心的技术实践演进

    这应该算是<Git企业开发者教程>的篇外篇,介绍一下这个教程是怎样写出来的.相信每个技术人都有类似下面的文件夹,保存着你辛苦工作的成果.实际的感觉:看着闹心,弃之不舍.一份文档久经修改,不 ...

  4. PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】...

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...

  5. JAVA毕业设计Vue网上书籍购买商城登录计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计Vue网上书籍购买商城登录计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计Vue网上书籍购买商城登录计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构 ...

  6. Android 第三方应用接入微信平台(1)

    关键字:微信开放平台   Android第三方应用接入微信 微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台, 毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可 以节约 ...

  7. Android 第三方应用接入微信平台(2)

    关键字:微信开放平台   Android第三方应用接入微信 微信平台开放后倒是挺火的,许多第三方应用都想试下,毕竟可以利用微信 建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方 面的 ...

  8. 微服务实践分享(9)文档中心

    1.文档中心 在项目中,需要协同开发,所以会写许多API文档给其他同事,以前都是写一个简单的TXT文本或Word文档,口口相传,这种方式比较老土了,所以,需要有个api管理系统专门来管理这些api 2 ...

  9. 项目视频讲解_深入浅出Lucene4.X实战开发大型企业文档中心管理系统

    深入浅出Lucene4.X实战开发大型企业文档中心管理系统 视频教程:http://pan.baidu.com/s/1CcuVM

最新文章

  1. 新特效火爆抖音!各路神仙齐唱《蚂蚁呀嘿》,网友:短短几秒需一生来治愈...
  2. 计算机教室怎样自动批量修改ip,批量设置IP地址和计算机名
  3. Keras .ImageDataGenerator图像增强用法大全以及如何和模型结合起来(有代码)
  4. [js] 不用 + eval Function 实现加法
  5. 《Python Cookbook 3rd》笔记(1.17):从字典中提取子集
  6. Linux学习第三步(Centos7安装mysql5.7数据库)
  7. python websocket异步高并发_python – WebSocket聊天异步示例崩溃
  8. SpringBoot和缓存
  9. JavaScript字符串String常用方法介绍
  10. 背部辨识度极高!红米K30系列将率先采用高通5G处理器
  11. 7. Reverse Integer(反转整数)
  12. php k线图粒度计算,【k线】k线图中MA均线计算
  13. 2021全国大学生电子设计大赛题目汇总
  14. mmc驱动中的mmc_host结构体中rescan_disable变量的作用及使用
  15. ubuntu虚拟机传文件到当前主机
  16. redis集群-局域网中两台电脑通信
  17. (混沌序列统计特性)离散傅里叶测试---matlab
  18. Linux运维踩过的坑---Temporary failure in name resolution
  19. 利用openpose跑关键点
  20. java中的double相乘-------保留精度

热门文章

  1. HTML CSS 梦幻仙境 图片显示在视频上方
  2. 感觉很失落——哈利波特与凤凰社观后感
  3. 禅道admin忘记密码
  4. 30岁转行做初级程序员是一种什么样的体验?
  5. 因素负荷量(factor loadings)的理解
  6. 人工智能轨道交通行业周刊-第39期(2023.3.20-3.26)
  7. python字母表顺序向后偏移3,python3:完全字母顺序
  8. 你绝不能错过的效率神器 —— Alfred
  9. 敏捷软件开发总结——什么是敏捷设计
  10. 数据库视图 触发器 存储过程