-
Notifications
You must be signed in to change notification settings - Fork 22
App开启内置购买
Ian edited this page Dec 7, 2016
·
5 revisions
###App 内置购买功能激活
像大部分的游戏、应用一样,附加的功能或者道具是需要用户另外购买的,那么内置购买功能非常的重要。
很多时候,我们并不需要根据功能拆分成多个产品,我们完全可以集成在一起。为了增加销售的收入是,内置购买可以解决部分问题。 首先,建议App应该是免费的,这样你可以了解有多少人下载了你的产品,哪些国家的,使用了什么语言找到你的,是德语,还是英语 其次,如何让这些用户愿意购买你的内置应用,是需要开发者、大家来考虑的。
下面,我们就详细说明,如何让你的App启动内置购买功能。
- Step1:你要规划自己的产品,哪些功能是希望用户另外购买的。
- Step2:将自己的规划集成到产品的逻辑和UI中
- Step3:实现内置购买的相关逻辑及展现形式
- Step4:向我们这边提供,插件说明文档
以下,我们以Resolution2为例,说明如何添加内置购买功能
现在文字说明一下,实现内置购买需要具备的条件: 1.你的App必须提供一个按钮来实现恢复购买 2.你的App必须提供明确的插件功能说明
图例1:
图例2:
点击“恢复购买”(Restore) 按钮,之前已经购买的插件信息,将由插件引擎接收到反馈的信息。(你可以根据这些信息,来激活相应的插件) 带“锁”标识的都是没有被激活的插件,都需要用户去购买。点击后,将弹出如图例2所示的内容:"Unlock [1024 x 768] preset" 对对话框,里面包含了说明,该插件需要花费多少钱,如果需要购买所有未解锁的功能,需要多少钱。用户,可以选择只购买单一,也可以选择购买所有。
现在,我们通过代码,来说明如何开启内置购买功能
Step1: 定义插件唯一标识的数组。
//App的唯一标识为com.romanysoft.app.macos.Resolution. (由我们提供)
//插件ID的定义,使用{App的唯一标识}.plugin.{插件描述符号} 的形式来表达
var pluginsIDList = [
"com.romanysoft.app.macos.Resolution.plugin.preset.800x600",
"com.romanysoft.app.macos.Resolution.plugin.preset.1024x768",
"com.romanysoft.app.macos.Resolution.plugin.preset.1152x900",
];
Step2:注册开启IAP的回调处理
//我们要注册开启IAP的回调处理,使用bs.js 提供的函数
// 处理IAP的回调
BS.b$.cb_handleIAPCallback = function(obj){
try{
var info = obj.info;
var notifyType = obj.notifyType;
if(notifyType == "ProductBuyFailed"){
//@"{'productIdentifier':'%@', 'message':'No products found in apple store'}"
var productIdentifier = info.productIdentifier;
var message = info.message;
UI.c$.log_buyPlugin(productIdentifier,"order plugin failed", message );
}else if(notifyType == "ProductPurchased"){
//@"{'productIdentifier':'%@', 'quantity':'%@'}"
// TODO: 购买成功后,处理同步插件的问题
var productIdentifier = info.productIdentifier;
UI.c$.pluginMethod.syncPluginsDataFromAppStore(productIdentifier);
UI.c$.log_buyPlugin(productIdentifier,"order plugin success");
}else if(notifyType == "ProductPurchaseFailed"){
//@"{‘transactionId':'%@',‘transactionDate’:'%@', 'payment':{'productIdentifier':'%@','quantity':'%@'}}"
var productIdentifier = info.payment.productIdentifier;
UI.c$.log_buyPlugin(productIdentifier,"order plugin failed");
}else if(notifyType == "ProductPurchaseFailedDetail"){
//@"{'failBy':'cancel', 'transactionId':'%@', 'message':'%@', ‘transactionDate’:'%@', 'payment':{'productIdentifier':'%@','quantity':'%@'}}"
var productIdentifier = info.payment.productIdentifier;
var message = "error:" + "failed by " + info.failBy + " (" + info.message + ") " + "order date:" + info.transactionDate;
UI.c$.log_buyPlugin(productIdentifier,"order plugin failed", message);
}else if(notifyType == "ProductRequested"){
//TODO:从AppStore商店获得的产品信息
if(typeof info == "string"){
info = JSON.parse(info);
}
UI.c$.pluginMethod.updatePluginsDataWithList(info);
}else if(notifyType == "ProductCompletePurchased"){
//@"{'productIdentifier':'%@', 'transactionId':'%@', 'receipt':'%@'}"
var productIdentifier = info.productIdentifier;
var message = "productIdentifier: " + info.productIdentifier + ", " + "transactionId: " + info.transactionId + ", " + "receipt: " + info.receipt;
UI.c$.log_buyPlugin(productIdentifier,"ProductCompletePurchased", message);
}
}catch(e){
console.error(e);
}
};
// 开启IAP回调处理
BS.b$.IAP.enableIAP({
cb_IAP_js:"BS.b$.cb_handleIAPCallback", // "BS.b$.cb_handleIAPCallback"是window下面的函数名称
productIds:pluginsIDList
});
在bs.js 中BS.b$.IAP.enableIAP 的处理方式如下:
b$.pIAPPlugin = {
path:"/plugin.iap.bundle"
};
// IAP 功能封装
b$.cb_handleIAPCallback = null; // IAP的回调函数
b$.IAP = {
enableIAP : function(parms){
if(b$.pN){
try{
//注册IAP回调
b$.pN.iap.regeditIAPCallbackJs(parms.cb_IAP_js || "BS.b$.cb_handleIAPCallback");
//注册IAPBundle
b$.pN.iap.regeditIAPCore($.toJSON({
path:b$.getAppPluginDir() + b$.pIAPPlugin.path
}));
//看看是否可以购买
if(b$.pN.iap.canMakePayments()){
//启动服务
b$.pN.iap.startIAPService();
//发送商品请求
b$.pN.iap.requestProducts($.toJSON({
productIdentifiers:parms.productIds ||[]
}));
}
}catch(e){
console.error(e);
}
}
}
//...
//...
};
Step3: 使用bs.js 中提供的IAP的其他功能函数
// 购买指定插件的函数
BS.b$.IAP.buyProduct({productIdentifier:"com.romanysoft.app.macos.Resolution.plugin.preset.1152x900", quantity:1});
// 恢复购买
BS.b$.IAP.restore();
####下面分享Resolution2或者叫BestDisplay的前端源码 下载 Resolution2的前端源码