我应该使用哪种IAP服务来销售non consumable products个(一次性支付产品)的Ffltter应用程序?
我环顾四周,所有我能找到的都是为RevenueCat做宣传的人,他们的观点听起来更像是广告.
所以我想听听你的意见:
我应该创建自己的后端来处理交易,还是应该 Select 第三方选项(这将花费我收入的%1%左右[听起来不是很多,但当你仔细想想,他们的定价真的没有那么大意义吗?])?
我应该使用哪种IAP服务来销售non consumable products个(一次性支付产品)的Ffltter应用程序?
我环顾四周,所有我能找到的都是为RevenueCat做宣传的人,他们的观点听起来更像是广告.
所以我想听听你的意见:
我应该创建自己的后端来处理交易,还是应该 Select 第三方选项(这将花费我收入的%1%左右[听起来不是很多,但当你仔细想想,他们的定价真的没有那么大意义吗?])?
我从来没有try 过RevenueCat,但几年前,在我自己的Flight应用程序中,我使用了in_app_purchase个包+Firebase Cloud函数(firebase_core和firebase_functions个包)来实现非消费品的应用内购买.
这种方法确实相当复杂,特别是对于新手来说.在这种情况下,您还需要一些JavaScript/TypeScrip技能,因为这些是编写FB函数的语言.最终,您的功能将与Play Developer API交互.
你最好在谷歌上搜索一些关于这个主题的最新教程,但这里有一个计划草案:
functions
文件夹,并安装NPM依赖项("Firebase-admin"、"Firebase-Functions"、"googleapis"等).src/index.ts
文件中编写您的函数下面是index.ts
中与IAP相关的典型FB函数的外观:
export const loadProducts = functions
.region('europe-west1', 'us-central1')
.https.onCall(async (data) => {
const packageName: string = data.packageName;
try {
await authClient.authorize();
const res = await playDeveloperApiClient.inappproducts.list({
packageName: packageName,
});
const activeProducts = res.data.inappproduct?.filter(
(product) => product.status == 'active'
);
if (res.status === 200) {
return {
data: activeProducts,
status: 200,
message: 'Product list fetch successful!',
};
}
} catch (error) {
console.log('CloudFunction error: ', error);
}
return {
status: 500,
message: 'Failed to fetch product list. Try again!',
};
});
下面是你在你的应用程序中调用它的方式:
final packageName = appInfo.packageName;
final httpsCallable = fbFunctions.httpsCallable('loadProducts');
httpsCallable.call({'packageName': packageName}).then(
(rawResult) async {
final resultMap = Map<String, dynamic>.from(rawResult.data as Map);
final result = FbFunctionResult.fromJson(resultMap);
final isProductListFetched = result.status == 200;
if (isProductListFetched && result.data != null) {
final productList = result.data! as List<dynamic>;
// ignore: avoid_dynamic_calls
final productIdsSet = productList.map((e) => e['sku'] as String).toSet();
final productDetailsList = await loadProducts(productIdsSet);
if (isMounted() && productDetailsList != null) {
products.value = productDetailsList;
}
}
},
);
这是可行的,但这确实需要努力和勇气.因此,如果时间有限,你只需要完成工作,那么 Select 第三方服务可能会更好.否则,请抓住机会更多地了解Google Play API和IAP的内部工作原理.
这是一张good article美元的钞票,尽管已经过时了.