iap26最強(qiáng)內(nèi)購插件 | 最簡(jiǎn)潔的中文源
Cydiakk源
關(guān)于我們
官方Q群
官方主頁
官方博客
展開
首頁
博客
登錄
Cydiakk中文源?
首頁
資源列表
技術(shù)文章
關(guān)于我們
資源列表/[插件 ]
您未登錄賬號(hào)
iap26最強(qiáng)內(nèi)購插件
軟件版本:0.0.2
支持設(shè)備:
iPhone
iPad
文件大?。?5.45 KB
支持版本:iOS 11.0 ~ iOS 15.6
?
提供作者:JustinPet26
下載數(shù)量:59245次??????????總下載量:61958次
收藏?cái)?shù)量:392次
?
Cydiakk中文源?
https://apt.cydiakk.com/
5050
資源
494343
粉絲
1654477
人氣
去看看
軟件內(nèi)容
掃描二維碼下載
請(qǐng)確保到
添加Cydiakk中文源?
刷新列表 以后再掃描二維碼下載
軟件描述:一款破解APP超強(qiáng)內(nèi)購插件
軟件簡(jiǎn)介:
一款破解APP超強(qiáng)內(nèi)購插件
===============
內(nèi)購是最強(qiáng)的放心產(chǎn)品
===============
點(diǎn)擊購買,然后點(diǎn)擊取消
=================
即可內(nèi)購 ,千萬別點(diǎn)擊確認(rèn)
更新說明:
屏幕截圖
搜索
最新上傳更多
Sushi音樂模幅
83下載 / 1.0版本
2024-03-07 00:23:44發(fā)布
No2Theft iOS 16設(shè)備防盜系統(tǒng)
50下載 / 1.1.1版本
2024-03-07 00:23:42發(fā)布
Latchkey鎖頭自定義
72下載 / 2.3.2版本
2024-03-07 00:23:20發(fā)布
BioProtect XS 面容/指紋加密【破解版】
34下載 / 4.6-229版本
2024-03-07 00:23:14發(fā)布
最新下載更多
Diatrus Installer為unc0ver安裝Sileo
2970下載 / 0.0001版本
2024-03-08 02:21:37發(fā)布
CCLess++控制中心模塊
3481下載 / 1.8.2版本
2024-03-08 02:21:29發(fā)布
阿凡達(dá)屏蔽助手
32524下載 / 1.0.0.4-4版本
2024-03-08 02:20:59發(fā)布
GoodWiFi無線WiFi增強(qiáng)
1765下載 / 1.2版本
2024-03-08 02:20:46發(fā)布
廣告終結(jié)者
3727下載 / 2.3.1版本
2024-03-08 02:20:43發(fā)布
源主推薦
MCPatch屏蔽OTA更新
允許安裝iOS12屏蔽OTA更新描述文件
新騰翔嘉麗圓縮小版
好看的騰翔嘉麗圓縮小版字體
Bubble 主題
精致的Bubble主題,圖標(biāo)涵蓋464個(gè)
Unc&雷神&Ele 最新防凍屏插件
完美解決11系統(tǒng)全系列越獄工具神經(jīng)性卡死、假死、凍結(jié)
STMoon 超好看的單色主題[VIP5專享]
超好看的單色輪廓主題
MaxiX 主題 [VIP5專享]
好看的多彩主題
BlackOrs 2 主題 [VIP5專享]
超精美的主題 兼容7.0-11.4系統(tǒng)
Amara XI 主題 [VIP5專享]
超精美的主題 兼容7.0-11.4系統(tǒng)
旗下網(wǎng)站
博客
|
Cydiakk中文源
|
版權(quán)與免責(zé)聲明
粵ICP備18011282號(hào)-4
Copyright 版權(quán)所有 ? 2017-2024 CydiaKK.Com ?. All rights reserved. Cydiakk中文源?版權(quán)或產(chǎn)權(quán)保護(hù)
返回頂部
iOS 內(nèi)購(IAP)的整個(gè)流程有哪些問題? - 知乎首頁知乎知學(xué)堂發(fā)現(xiàn)等你來答?切換模式登錄/注冊(cè)iOS 開發(fā)應(yīng)用內(nèi)購(In-App Purchase)iOS 內(nèi)購(IAP)的整個(gè)流程有哪些問題?來自 @Bill Cheng 答「用戶使用 iOS 內(nèi)支付成功,但是服務(wù)器端沒有收到客戶端發(fā)來的 Receipt 的話,怎么進(jìn)行支付的確認(rèn)? 」—— …顯示全部 ?關(guān)注者177被瀏覽102,055關(guān)注問題?寫回答?邀請(qǐng)回答?好問題?1 條評(píng)論?分享?6 個(gè)回答默認(rèn)排序Bill Cheng??iOS 開發(fā)等 2 個(gè)話題下的優(yōu)秀答主? 關(guān)注感謝邀請(qǐng)首先貼上IAP流程:用戶點(diǎn)擊內(nèi)購按鈕——>用戶確認(rèn)購買內(nèi)容——>用戶通過App Store賬戶驗(yàn)證——>蘋果服務(wù)器驗(yàn)證用戶請(qǐng)求——>蘋果服務(wù)器從用戶帳號(hào)扣款——>蘋果向用戶返回購買成功信息——>軟件接收并顯示用戶購買信息觀察上面的流程,不難發(fā)現(xiàn)整個(gè)流程所有對(duì)于用戶的驗(yàn)證都是蘋果處理的,這就導(dǎo)致了第一個(gè)問題:『開發(fā)者實(shí)際上并不知道這個(gè)用戶是誰』,或者說『開發(fā)者實(shí)際上并不知道付錢的是誰』一般來說開發(fā)者會(huì)默認(rèn)付錢的用戶和購買內(nèi)容的用戶為同一個(gè)人,而在這個(gè)流程中,實(shí)際上付錢的用戶和購買內(nèi)容的用戶是兩個(gè)賬號(hào),而且這兩個(gè)賬號(hào)分別屬于不同的體系這樣的問題在針對(duì)軟件內(nèi)容的IAP里面可能看不到問題,但是對(duì)于『服務(wù)』這種和用戶賬號(hào)關(guān)聯(lián)的東西問題就很大了——我如何才能知道,是我向其提供服務(wù)的用戶進(jìn)行了付款行為,而不是其他用戶違反條例幫助此用戶獲得授權(quán),或者說其他用戶想要把自己購買的服務(wù)應(yīng)用到其他賬號(hào)上上面這段可能有些繞口,那么我來舉個(gè)例子:現(xiàn)在我有一個(gè)通過IAP出售的服務(wù)A,此服務(wù)是一個(gè)一次性購買服務(wù)。一個(gè)用戶使用賬號(hào)X購買了這個(gè)服務(wù),然后用戶通過自己的App Store賬號(hào)在使用賬號(hào)Y的機(jī)器上使用了恢復(fù)IAP功能,那么此時(shí)我是否應(yīng)該給賬號(hào)Y提供服務(wù)A呢?針對(duì)這個(gè)問題,雖然現(xiàn)在有各種各樣的解決方法,不過大部分情況,最后用戶還是會(huì)和客服聯(lián)系抱怨,這是IAP兩套賬號(hào)系統(tǒng)導(dǎo)致的第一個(gè)問題第二個(gè)問題就是,觀察流程可以發(fā)現(xiàn),對(duì)于用戶購買流程中給開發(fā)者發(fā)送的信號(hào)都來自于用戶本地程序,這個(gè)也就是早期IAP內(nèi)購插件可以存在的原因了,好在現(xiàn)在蘋果給開發(fā)者提供了中間步驟的驗(yàn)證,才使得內(nèi)購插件不會(huì)影響到開發(fā)者服務(wù)器端數(shù)據(jù)檢測(cè)??偟膩碚f,蘋果的IAP流程對(duì)于本地軟件增值功能來說是一個(gè)很好的服務(wù),但是對(duì)于任何有雙重賬號(hào)問題的服務(wù)來說都是絕對(duì)的悲劇,而且由于蘋果對(duì)于iOS生態(tài)圈封閉的態(tài)度,對(duì)于這個(gè)大問題的修復(fù)也總只是點(diǎn)到為止,國(guó)外可能還比較無所謂,但是在中國(guó)這個(gè)對(duì)于『用戶』看重的環(huán)境中,產(chǎn)品經(jīng)理和程序員都會(huì)面臨各種悲劇……IAP還有些亂七八糟的問題,比如說去年讓萬眾瘋狂的『免費(fèi)IAP DNS』、取消訂單必須通過蘋果處理等等。當(dāng)然還有一些中國(guó)環(huán)境下的,讓產(chǎn)品經(jīng)理煩躁的問題(Android下我可以直接拿到用戶信用卡賬號(hào)密碼,iOS下我連用戶App Store ID都很難拿到,怎么賣數(shù)據(jù))。發(fā)布于 2013-04-28 18:05?贊同 36??8 條評(píng)論?分享?收藏?喜歡收起?NewPanRust? 關(guān)注我寫了一套完整的 IAP 方案, 處理了 IAP 的九大坑,感興趣的朋友來看看吧: 第一篇:[[iOS]貝聊 IAP 實(shí)戰(zhàn)之滿地是坑](https://www.jianshu.com/p/07b5ec193353),這一篇是支付基礎(chǔ)知識(shí)的講解,主要會(huì)詳細(xì)介紹 IAP,同時(shí)也會(huì)對(duì)比支付寶和微信支付,從而引出 IAP 的坑和注意點(diǎn)。第二篇:[[iOS]貝聊 IAP 實(shí)戰(zhàn)之見坑填坑](https://www.jianshu.com/p/8e5bf711f9f0),這一篇是高潮性的一篇,主要針對(duì)第一篇文章中分析出的 IAP 的問題進(jìn)行具體解決。第三篇:[[iOS]貝聊 IAP 實(shí)戰(zhàn)之訂單綁定](https://www.jianshu.com/p/847838cde48b),這一篇是關(guān)鍵性的一篇,主要講述作者探索將自己服務(wù)器生成的訂單號(hào)綁定到 IAP 上的過程。發(fā)布于 2018-01-14 21:36?贊同 9??添加評(píng)論?分享?收藏?喜歡
【Flutter】App集成谷歌內(nèi)購(GooglePay)的全過程(全程詳細(xì)圖文加代碼) - 掘金
首頁 首頁
沸點(diǎn)
課程
直播
活動(dòng)
競(jìng)賽
商城
APP
插件 搜索歷史
清空
創(chuàng)作者中心
寫文章 發(fā)沸點(diǎn) 寫筆記 寫代碼 草稿箱 創(chuàng)作靈感
查看更多
會(huì)員
登錄
注冊(cè)
【Flutter】App集成谷歌內(nèi)購(GooglePay)的全過程(全程詳細(xì)圖文加代碼)
Newki
2023-05-15
3,770
閱讀13分鐘
Flutter集成谷歌內(nèi)購與使用的全過程
我正在參加「掘金·啟航計(jì)劃」
前言
注意:本文包含大量的圖片與代碼,注意流量使用。
在之前的文章中,我們了解到 Flutter 的頁面開發(fā),以及 Flutter 的架構(gòu)搭建,完成對(duì)應(yīng)的頁面與邏輯是沒什么問題了。
但是開發(fā)一個(gè) App 又不是只有頁面的基本邏輯,如果涉及到一些第三方的對(duì)接就顯得比較麻煩,比如推送,支付,內(nèi)購,IM 等等。
而如果第三方?jīng)]有提供到 Flutter 的插件,那么我們就需要通過 Channel 的方式自己去實(shí)現(xiàn) Android 與 iOS 的具體實(shí)現(xiàn)。
還好,F(xiàn)lutter 推出這么些年,基本上常用的一些插件都已經(jīng)有支持,就算官方?jīng)]出,也有民間大神出了類似的插件。
而本文所說的就是相對(duì)比較復(fù)雜的第三方集成,應(yīng)用商城內(nèi)購,大部分是講谷歌內(nèi)購,其實(shí)蘋果內(nèi)購比谷歌內(nèi)購要更容易一下,兼容一下同樣的代碼就能完成相關(guān)的流程。
以谷歌內(nèi)購為例,我們需要做的總共為三步,每一步我會(huì)給出詳細(xì)的相關(guān)設(shè)置對(duì)應(yīng)的圖片或代碼。
需要在谷歌市場(chǎng)配置商品,設(shè)置測(cè)試渠道,配置開發(fā)者賬號(hào),設(shè)置對(duì)應(yīng)權(quán)限。
配置完商品之后,如何在 Flutter 中獲取到商品,購買指定商品,消耗商品等。
購買成功之后,如何到服務(wù)器校驗(yàn)是否支付成功,后臺(tái)服務(wù)器如何配置通行權(quán)限,谷歌市場(chǎng)與谷歌云的關(guān)聯(lián)以及相關(guān)校驗(yàn)。
注意:由于谷歌市場(chǎng)版本老在變化,本文的谷歌市場(chǎng)以 2023-05-02 時(shí)間為準(zhǔn),如果后期谷歌市場(chǎng)與谷歌云的相關(guān)網(wǎng)頁布局 或 Tab 發(fā)生變化,大家可以參考使用。
好了,大致的步驟了解了之后,我們就開始一步步的走相關(guān)流程。
一、谷歌市場(chǎng)配置商品
按道理,我們只需要在谷歌市場(chǎng)中,找到指定的應(yīng)用,然后在內(nèi)購的 Tab 中直接添加商品即可。但是并沒有這么簡(jiǎn)單,會(huì)提示報(bào)錯(cuò),沒有設(shè)置付款賬號(hào)。
1.1 定價(jià)模板
所以我們要切換到整個(gè)賬號(hào)的設(shè)置頁面,而不是指定應(yīng)用的選項(xiàng)。
找到付款概況之后,如果沒有付款賬號(hào),我們填寫一些信息,姓名,郵箱,賬號(hào),等等信息,創(chuàng)建完成之后我們就可以設(shè)置定價(jià)的模板。
如果能創(chuàng)建模板說明你付款賬號(hào)沒問題,定價(jià)模板是非必須的,可有可無,但是定義了模板之后會(huì)更加方便,到時(shí)候創(chuàng)建商品可以直接關(guān)聯(lián)模板,賬號(hào)下的每一個(gè)子應(yīng)用的內(nèi)購商品都能關(guān)聯(lián)對(duì)應(yīng)的模板,有一個(gè)統(tǒng)一的定價(jià)。
如何創(chuàng)建定價(jià)模板如下:
我們創(chuàng)建模板之后,就可以定義模板的價(jià)格與標(biāo)題,選擇的金額會(huì)有對(duì)應(yīng)的匯率轉(zhuǎn)換,比如我創(chuàng)建的新加坡幣,如果用港元支付的話,會(huì)根據(jù)匯率轉(zhuǎn)換為對(duì)應(yīng)的港元支付。
創(chuàng)建完成之后,我們就能看到對(duì)應(yīng)的定價(jià)模板如下圖所示:
1.2 應(yīng)用上架
當(dāng)我們的一些定價(jià)模板定義完成之后,我們就可以設(shè)置應(yīng)用的內(nèi)購了,點(diǎn)擊應(yīng)用商品內(nèi)購的 Tab ,結(jié)果是不能創(chuàng)建,因?yàn)槟汶m然創(chuàng)建了子應(yīng)用,但是你沒有上傳APK包,并沒有應(yīng)用所以沒有對(duì)應(yīng)的應(yīng)用內(nèi)商品。
所以在此之前我們還需要做一些配置。我們需要?jiǎng)?chuàng)建一個(gè)內(nèi)部測(cè)試渠道,然后配置對(duì)應(yīng)的開發(fā)者或測(cè)試人員。
哎,對(duì)對(duì)對(duì),我知道是很麻煩,很SB,但誰叫谷歌就是這么定的流程呢,沒有辦法,按流程走把。
首先需要?jiǎng)?chuàng)建一個(gè)測(cè)試軌道:比如我選擇的是內(nèi)部測(cè)試:
發(fā)布一個(gè) APK / AAB 文件到測(cè)試渠道,然后 選擇/創(chuàng)建 測(cè)試人員。
如果沒有的話,創(chuàng)建一個(gè)測(cè)試者,輸入對(duì)應(yīng)的郵箱即可。
這樣就能添加測(cè)試人員了,同時(shí)你還可以在底部邀請(qǐng)鏈接去邀請(qǐng)測(cè)試者,激活測(cè)試規(guī)則等。
當(dāng)一切都配置完成之后(會(huì)有一個(gè)進(jìn)度條的,當(dāng)完成一步會(huì)中劃線標(biāo)記的),我們到發(fā)布中選擇審核以及發(fā)布,谷歌審核很快,一切正常2個(gè)小時(shí)內(nèi)就能通過,然后我們打開谷歌應(yīng)用市場(chǎng)搜索我們的應(yīng)用就能找到內(nèi)部測(cè)試的渠道應(yīng)用:
點(diǎn)擊下載之后,我們安裝的就是我們之前創(chuàng)建的內(nèi)部測(cè)試渠道應(yīng)用啦。
1.3 創(chuàng)建應(yīng)用內(nèi)購商品
應(yīng)用雖然是上線了,但是我們還沒創(chuàng)建內(nèi)購商品呢,此時(shí)我們?cè)冱c(diǎn)擊應(yīng)用內(nèi)購的 Tab 就能創(chuàng)建對(duì)應(yīng)的商品了。
商品其實(shí)是分訂閱類型與內(nèi)購商品,內(nèi)購商品又分消耗型與非消耗型,由于我們的商品并不復(fù)雜,是輸入消耗型的,所以我的代碼都是以消耗性為例。
如何區(qū)別各種類型?舉個(gè)栗子:
訂閱類型:愛奇藝的VIP月卡。
非消耗性:消消樂免費(fèi)玩前10關(guān)卡,付費(fèi)解鎖后面的關(guān)卡內(nèi)容。
消耗性:歡樂斗地主買100個(gè)歡樂豆。
我們其實(shí)就是最簡(jiǎn)單的消耗性,花錢買虛擬幣,可重復(fù)購買的那種。
下面開始創(chuàng)建商品,這一點(diǎn)反倒是蠻簡(jiǎn)單:
注意的是,創(chuàng)建應(yīng)用id的時(shí)候,最好是包名加上商品id。避免沖突
com.xxgroup.whatsapp.coin10
隨后定義對(duì)應(yīng)的標(biāo)題與描述,以及商品對(duì)應(yīng)的價(jià)格,可以使用價(jià)格模板,也可以直接寫。
創(chuàng)建完成之后別急,需要激活之后才能生效:
此時(shí)列表上就有了,這樣才是生效狀態(tài)。
此時(shí)就能買了嗎?可以了,但是測(cè)試賬號(hào)并沒有關(guān)聯(lián)信用卡,也不方便,我們?cè)O(shè)置一下測(cè)試賬號(hào)的測(cè)試購買授權(quán):
下面的授權(quán)方式改為:LICENSED
好了到此,我們的谷歌市場(chǎng)配置就完成了。
二、集成支付插件兼容Android與iOS支付
接下來我們就在 Flutter 中使用插件集成應(yīng)用內(nèi)支付功能。
in_app_purchase: 3.1.5
文檔地址:【傳送門】
使用起來并不復(fù)雜,可以說是 Android 與 iOS 的邏輯是一樣樣的。
貼一下我的代碼:
首先是生命周期的回調(diào),頁面創(chuàng)建完成初始化插件,并設(shè)置監(jiān)聽,當(dāng)頁面關(guān)閉的時(shí)間銷毀資源:
late StreamSubscription> _subscription;
late InAppPurchase _inAppPurchase;
List
@override
void onReady() {
fetchCoinList();
// 初始化in_app_purchase插件
_inAppPurchase = InAppPurchase.instance;
//監(jiān)聽購買的事件
final Stream> purchaseUpdated = _inAppPurchase.purchaseStream;
_subscription = purchaseUpdated.listen((purchaseDetailsList) {
_listenToPurchaseUpdated(purchaseDetailsList);
}, onDone: () {
_subscription.cancel();
}, onError: (error) {
error.printError();
SmartDialog.showToast("購買失敗了");
});
//加載全部的商品
loadProducts();
}
@override
void onClose() {
refreshController.dispose();
datas.clear();
if (Device.isIOS) {
final InAppPurchaseStoreKitPlatformAddition iosPlatformAddition =
_inAppPurchase.getPlatformAddition
iosPlatformAddition.setDelegate(null);
}
_subscription.cancel();
}
加載全部的商品,這里真實(shí)開發(fā)環(huán)境是由后端接口返回的,我這里作為測(cè)試就寫死了:
/// 加載全部的商品
void loadProducts() async {
final bool available = await _inAppPurchase.isAvailable();
if (!available) {
SmartDialog.showToast("無法連接到商店");
return;
}
//開始購買
SmartDialog.showToast("連接成功-開始查詢?nèi)可唐?);
const Set
'com.hongyegroup.whatsapp.android.coin100',
'com.hongyegroup.whatsapp.android.coin500',
'com.hongyegroup.whatsapp.android.coin1000',
'com.hongyegroup.whatsapp.android.coin3000',
};
final ProductDetailsResponse response = await _inAppPurchase.queryProductDetails(_kIds);
if (response.notFoundIDs.isNotEmpty) {
SmartDialog.showToast("無法找到指定的商品");
return;
}
// 處理查詢到的商品列表
List
if (products.isNotEmpty) {
//賦值內(nèi)購商品集合
_products = products;
}
SmartDialog.showToast("全部商品加載完成了,可以啟動(dòng)購買了,總共商品數(shù)量為:${products.length}");
//先恢復(fù)可重復(fù)購買
await _inAppPurchase.restorePurchases();
}
查詢到商品之后就可以在 ListView 顯示商品的屬性,如過 UI 設(shè)計(jì)的列表樣式比較復(fù)雜,當(dāng)我們谷歌內(nèi)購設(shè)置的標(biāo)題與詳情滿足不了設(shè)計(jì)的需求,可以由我們自己的后臺(tái)返回對(duì)應(yīng)接口,當(dāng)商品加載成功之后的商品 id 去匹配對(duì)應(yīng)后臺(tái)的列表數(shù)據(jù)并展示出來。
當(dāng)我們點(diǎn)擊對(duì)應(yīng)的 Item 就可以拿到對(duì)應(yīng)的商品ID,執(zhí)行購買的邏輯:
// 調(diào)用此函數(shù)以啟動(dòng)購買過程
void startPurchase(String productId) async {
if (_products != null && _products!.isNotEmpty) {
SmartDialog.showToast("準(zhǔn)備開始啟動(dòng)購買流程");
try {
ProductDetails productDetails = _getProduct(productId);
Log.d("一切正常,開始購買,信息如下:title: ${productDetails.title} desc:${productDetails.description} "
"price:${productDetails.price} currencyCode:${productDetails.currencyCode} currencySymbol:${productDetails.currencySymbol}");
_inAppPurchase.buyConsumable(purchaseParam: PurchaseParam(productDetails: productDetails));
} catch (e) {
e.printError();
Log.e("購買失敗了");
}
} else {
SmartDialog.showToast("當(dāng)前沒有商品無法調(diào)用購買邏輯");
}
}
// 根據(jù)產(chǎn)品ID獲取產(chǎn)品信息
ProductDetails _getProduct(String productId) {
return _products!.firstWhere((product) => product.id == productId);
}
我們的商品都是消耗類型的,所以這里我們就寫死了,如果你的商品有多種類型,你可以判斷類型是輸入哪一種類型,分別就行不同種類的購買方式。
當(dāng)我們點(diǎn)擊購買之后,就可以走到購買監(jiān)聽中了,我們?cè)诶锩姹O(jiān)聽當(dāng)前購買的狀態(tài)。當(dāng)確定購買完成之后我們就能進(jìn)行商品的消耗。如果購買完成不消耗,那么三天之后會(huì)自動(dòng)退款的。
/// 內(nèi)購的購買更新監(jiān)聽
void _listenToPurchaseUpdated(List
for (PurchaseDetails purchase in purchaseDetailsList) {
if (purchase.status == PurchaseStatus.pending) {
// 等待支付完成
_handlePending();
} else if (purchase.status == PurchaseStatus.error) {
// 購買失敗
_handleError(purchase.error);
} else if (purchase.status == PurchaseStatus.purchased || purchase.status == PurchaseStatus.restored) {
//完成購買, 到服務(wù)器驗(yàn)證
if (Device.isAndroid) {
var googleDetail = purchase as GooglePlayPurchaseDetails;
print(purchase);
loadAndroidGetPayInfo(googleDetail);
} else if (Device.isIOS) {
var appstoreDetail = purchase as AppStorePurchaseDetails;
print(purchase);
loadAppleGetPayInfo(appstoreDetail);
}
}
}
}
/// 購買失敗
void _handleError(IAPError? iapError) {
SmartDialog.showToast("購買失敗啦:${iapError?.code} message${iapError?.message}");
}
/// 等待支付
void _handlePending() {
SmartDialog.showToast("等待支付的邏輯");
}
/// Android支付成功的校驗(yàn)
void loadAndroidGetPayInfo(GooglePlayPurchaseDetails googleDetail) async {
final originalJson = googleDetail.billingClientPurchase.originalJson;
Log.d("originalJson:$originalJson");
if (await coinRepositroy.checkGooglePaySuccess(originalJson)) {
//校驗(yàn)成功之后執(zhí)行消耗
await _inAppPurchase.completePurchase(googleDetail);
}
}
/// Apple支付成功的校驗(yàn)
void loadAppleGetPayInfo(AppStorePurchaseDetails appstoreDetail) {
if (await coinRepositroy.checkApplyPaySuccess(appstoreDetail)) {
//校驗(yàn)成功之后執(zhí)行消耗
await _inAppPurchase.completePurchase(appstoreDetail);
}
}
到這一步,我們已經(jīng)和測(cè)試賬號(hào)管理了,所以我們直接運(yùn)行 Debug 包一樣的可以測(cè)試支付,并且我們授權(quán)測(cè)試支付,所以不需要綁定銀行卡直接用測(cè)試支付卡就能完成支付流程。
截圖:
當(dāng)我們支付成功之后就可以執(zhí)行消耗操作。
三、服務(wù)器校驗(yàn)相關(guān)流程
我并沒有把代碼做區(qū)分,上面的代碼就已經(jīng)包含了支付成功之后的后端校驗(yàn)邏輯。
為什么要加后端校驗(yàn)?客戶端支付成功了,服務(wù)端怎么知道,萬一用接口的方式通信,如果被抓包豈不是可以無限加金幣了。太不安全了,所以才有服務(wù)器校驗(yàn)這一步。
iOS的校驗(yàn)不用說,很簡(jiǎn)單,拿到支付完成的票據(jù)直接發(fā)起請(qǐng)求即可,而 Android 的服務(wù)端校驗(yàn)就相對(duì)麻煩,需要配置谷歌云,以及對(duì)應(yīng)的通行權(quán)限。
谷歌結(jié)算文檔:【傳送門】
谷歌支付校驗(yàn)AI:【傳送門】
如果我們直接在API中調(diào)用校驗(yàn)接口,那肯定是直接報(bào)錯(cuò):
{
"error": {
"code": 403,
"message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console.",
"errors": [
{
"message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console.",
"domain": "androidpublisher",
"reason": "projectNotLinked"
}
]
}
}
沒有授權(quán),接下來開始授權(quán):
3.1 Google Cloud關(guān)聯(lián)
首先需要配置 Google Cloud 并且配置相關(guān)的賬號(hào),對(duì)應(yīng)指定的應(yīng)用。
點(diǎn)擊項(xiàng)目的 API Access 中
如果這一步你沒有 Google Cloud 賬號(hào),可以創(chuàng)建或關(guān)聯(lián)已有的 Google Cloud 賬號(hào),這里我沒有就直接創(chuàng)建了Google Cloud 賬號(hào)。關(guān)聯(lián)之后我們就能看到上圖所示的畫面。
我們可以直接在谷歌市場(chǎng)控制臺(tái)中的 API Access 中直接進(jìn)入谷歌云后臺(tái),也能 直接輸入網(wǎng)址 code.google.com/apis/consol… 是一樣的效果。
網(wǎng)上很多教程教你去開通 Google Play Developer API 權(quán)限,其實(shí)現(xiàn)在是沒必要了,因?yàn)槲覀冴P(guān)聯(lián) Google Cloud 賬號(hào)之后,默認(rèn)就已經(jīng)開通了。
所以我們不需要再次去授權(quán)了。
如果覺得不保險(xiǎn),也能在里面搜索 Billing ,然后啟動(dòng)相關(guān)的支付服務(wù)權(quán)限,反正我是開了,但我覺得沒必要開這些,如果不行的你開啟這些服務(wù)也無所謂。
3.2 創(chuàng)建 web-OAuth 授權(quán)
網(wǎng)上很多教程比較老,可能要你手動(dòng)的創(chuàng)建web授權(quán),其實(shí)當(dāng)我們?cè)诠雀枋袌?chǎng)的后臺(tái)關(guān)聯(lián)谷歌云的時(shí)候,就已經(jīng)幫我們初始化了很多配置,已經(jīng)都有了。
我們?cè)俟雀柙坪笈_(tái),在APIs & auth 項(xiàng)中找到 Credentials,直接查看即可:
我們點(diǎn)擊 Web 授權(quán)進(jìn)去配置相關(guān)配置。
主要是配置左側(cè)的上下兩個(gè) URI 地址,上面的配置后臺(tái)域名:
下面的是固定寫法,callback的地址一定是可用域名 + /oauth2callback。
創(chuàng)建完成之后,記得記錄你的三個(gè)重要字段,client_id 和 client_secret 以及 redirect_uri ,后面會(huì)用到。
通過訪問一下的網(wǎng)頁獲取到一個(gè)oauth2callback:
https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&
redirect_uri=https://api.whatsapp.sg/oauth2callback&client_id=816630003638-5p27m684jfpfa6sh6l9chbpreq2hg9ov.apps.googleusercontent.com
返回一個(gè)code:
https://api.whatsapp.sg/oauth2callback?code=4/CpVOd8CljO_gxTRE1M5jtwEFwf8gRD44vrmKNDi4GSS.kr-GHuseD-oZEnp6UADFXm0E0MD3FlAI
拿到后面的 code 字段。
code=4/CpVOd8CljO_gxTRE1M5jtwEFwf8gRD44vrmKNDi4GSS.kr-GHuseD-oZEnp6UADFXm0E0MD3FlAI
我們手動(dòng)的在 postman 之類的工具上,通過固定的參數(shù),拿到 refresh_token(重點(diǎn),后期全靠它)
{
'grant_type':'authorization_code',
'code':'4/CpVOd8CljO_gxTRE1M5jtwEFwf8gRD44vrmKNDi4GSS.kr-GHuseD-oZEnp6UADFXm0E0MD3FlAI',//上一步獲取的,
'client_id':'816630003638-5p27m684jfpfa6sh6l9chbpreq2hg9ov.apps.googleusercontent.com',
'client_secret':'36WnPnojshgj56uhghj-xCo',
'redirect_uri':'https://api.whatsapp.sg/oauth2callback',
}
向以下的網(wǎng)址發(fā)起 Post 請(qǐng)求。
https://accounts.google.com/o/oauth2/token
一定要保證網(wǎng)絡(luò)暢通,只有一次機(jī)會(huì),返回的json對(duì)象如下
{
"access_token" : "",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/zaaHNytlC3SEBX7F2cfrHcqJEa3KoAHYeXES6nmho"
}
refresh_token 就拿到了,注意一定要保存好,只有這一次機(jī)會(huì),如果再次調(diào)用此接口 refresh_token 就是空了,不會(huì)返回了。
3.3 OAuth校驗(yàn)支付是否成功
拿到這個(gè)refresh_token就可以調(diào)用真正的校驗(yàn)接口了,例如我們后端調(diào)用的是否支付成功:
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{purchaseToken}?access_token={$access_token}"
這里的packageName,productId,purchaseToken 大家都很熟悉了,就是Android 支付成功之后返回給我們的,直接傳遞給后端即可,而access_token其實(shí)就是我們上面拿到的 refresh_token。
我們需要拿到第一次返回的 refresh_token 保存起來,后續(xù)以刷新的方式來獲取新的 refresh_token ,用于訪問真正的API。
后臺(tái)調(diào)用驗(yàn)證接口完成之后得到的對(duì)象如下:
{
"kind": string,
"purchaseTimeMillis": string,
"purchaseState": integer,
"consumptionState": integer,
"developerPayload": string,
"orderId": string,
"purchaseType": integer,
"acknowledgementState": integer,
"purchaseToken": string,
"productId": string,
"quantity": integer,
"obfuscatedExternalAccountId": string,
"obfuscatedExternalProfileId": string,
"regionCode": string
}
只需要驗(yàn)證狀態(tài)即可:
consumptionState == 0
purchaseState == 0
說明這個(gè)商品已經(jīng)購買了,并且也沒有被消耗,那么此時(shí)就可以給移動(dòng)端返回true,讓移動(dòng)端執(zhí)行消耗操作。
后端PHP的校驗(yàn)谷歌內(nèi)購是否成功示例代碼:
public function checkGooglePay(){
$google_public_key = "你的公鑰(google后臺(tái)在你的應(yīng)用下獲取)";
$inapp_purchase_data = $_REQUEST['signtureTemp'];
$inapp_data_signature = $_REQUEST['signtureDataTemp'];
$key = "-----BEGIN PUBLIC KEY-----\n".chunk_split($google_public_key, 64,"\n").'-----END PUBLIC KEY-----';
$key = openssl_pkey_get_public($key);
$signature = base64_decode($inapp_data_signature);
$ok = openssl_verify($inapp_purchase_data,$signature,$key,OPENSSL_ALGO_SHA1);
if (1 == $ok) {
// 支付驗(yàn)證成功!
//進(jìn)行二次驗(yàn)證,訂單查詢
// 1.獲取access_token(3600秒有效期)
$access_token_url = "https://accounts.google.com/o/oauth2/token";
$data_tmp2 = array(
'grant_type'=>'refresh_token',
'refresh_token'=>'',//長(zhǎng)效token
'client_id'=>'', //客戶端id
'client_secret'=>'',//客戶端密鑰
);
$http = new http($access_token_url,'POST',5);
$http->setContent($data_tmp2);
$result = $http->exec();
$result = json_decode($contents,true);
$access_token = $result['access_token'];
//2.通過獲得access_token 就可以請(qǐng)求谷歌的API接口,獲得訂單狀態(tài)
$packageName=""http://包名
$productId="" //產(chǎn)品Id
$purchaseToken=""
$url = "https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{purchaseToken}?access_token={$access_token}";
$http = new http($url,'GET',5);
$http->setContent($data);
$contents = $http->exec();
$contents = json_decode($contents,true);
if($contents['consumptionState'] == 0 && $contents['purchaseState'] == 0){
//驗(yàn)證成功 購買成功并且沒有消耗 google支付中客戶端如果沒有進(jìn)行消耗是不能再次購買該商品
//處理游戲邏輯 發(fā)鉆石,通知客戶端進(jìn)行消耗
}else{
//訂單驗(yàn)證失敗
}
}else{
//簽名驗(yàn)證失敗
}
}
第一步是可選的,校驗(yàn)APK的簽名,當(dāng)前應(yīng)用是不是谷歌市場(chǎng)下載的,如果不是從谷歌市場(chǎng)下載的那么支付不生效。如果你想要的校驗(yàn)APK來源就加上,不想校驗(yàn)也可以。
第二步就是開始校驗(yàn)谷歌內(nèi)購支付訂單的狀態(tài),拿到本地長(zhǎng)期保存的refresh_token 以及之前獲取到的client_id 和 client_secret 就可以到哪授權(quán)的 access_token 。
第三部就是拿到 access_token 以及 客戶端傳遞的包名,產(chǎn)品id,支付憑證,調(diào)用校驗(yàn)接口,拿到訂單的當(dāng)前狀態(tài)。
然后就是根據(jù)訂單的狀態(tài)判斷返回給客戶端是否有效,讓客戶端執(zhí)行消耗操作。
如果您覺得有必要,也可以消耗之后再次調(diào)用接口校驗(yàn),是否已購買,是否已消耗。
3.3 創(chuàng)建Service Account的授權(quán)
其實(shí)之前的之前的 Web-OAuth 的方式來進(jìn)行驗(yàn)證不是不行,但是步驟相對(duì)比較復(fù)雜,而更推薦的方式則是創(chuàng)建服務(wù)的方式來進(jìn)行校驗(yàn)。
我們把視角拉回谷歌市場(chǎng)控制臺(tái),找到 Api Access 選項(xiàng) (老熟人了)
其實(shí)我們?cè)谙旅娴脑L問權(quán)限就可以看到 Service Account 的選項(xiàng)。如果你已有 Service Account 就可以看到全部的關(guān)聯(lián)的 Service Account 。如果你沒有此服務(wù),那么就可以點(diǎn)擊創(chuàng)建服務(wù)去谷歌云創(chuàng)建。當(dāng)我們到谷歌云里面點(diǎn)擊創(chuàng)建 Service Account:
我們點(diǎn)擊創(chuàng)建 Service Account 會(huì)走到創(chuàng)建服務(wù)的流程:
第一步隨便寫,關(guān)鍵是第二步:
選擇角色為 Service Account Admin
第三步不填,直接提交:
你就能看到你創(chuàng)建的服務(wù)啦,接下來就是創(chuàng)建Key,Json的方式創(chuàng)建,然后下載到Json給到后臺(tái)人員。
再下一步就回到谷歌商店控制臺(tái)的 Api Access 看 Service Account 是否已經(jīng)關(guān)聯(lián)上了:
如果有這樣的信息,說明關(guān)聯(lián)上了,才是正確的流程,如果你創(chuàng)建了 Service Account,但是這里并沒有展示,那么就肯定會(huì)錯(cuò):
{
??"code"?:?401,
??"errors"?:?[?{
????"domain"?:?"androidpublisher",
????"message"?:?"The?current?user?has?insufficient?permissions?to?perform?the?requested?operation.",
????"reason"?:?"permissionDenied"
??}?],
??"message"?:?"The?current?user?has?insufficient?permissions?to?perform?the?requested?operation."
}
之后正常顯示了服務(wù),說明你的服務(wù)才能訪問到谷歌市場(chǎng)這一邊,接下來就是點(diǎn)擊授予訪問權(quán)限。
重點(diǎn)是要把財(cái)務(wù)信息的兩項(xiàng)勾選上,這樣才能訪問到應(yīng)用內(nèi)支付校驗(yàn)的相關(guān)權(quán)限,如圖所示:
點(diǎn)擊保存修改之后就完成了,由于我們關(guān)聯(lián)賬號(hào)的時(shí)候已經(jīng)勾選了 Google Play Android Developer API 權(quán)限,我們現(xiàn)在直接就能用了。
后端的用法各平臺(tái)的使用方式不同,但是都是很簡(jiǎn)單的,直接集成谷歌的API,然后總共就兩步,第一步設(shè)置Config屬性把這個(gè) Service Account 生成的Json文件傳入,第二步直接調(diào)用 GoogleAPI 內(nèi)置的校驗(yàn)方法即可,都是API內(nèi)置了的更方便。
當(dāng)我們客戶端把packageName ,prodectId,purchaseToken 三個(gè)字段傳給后端,他們直接調(diào)用 API 就能直接校驗(yàn),相比 Web-OAuth 的方式要更簡(jiǎn)單一些。
校驗(yàn)結(jié)果如下:
OK,兩種方法 Web-OAuth 的授權(quán)方式,以及 Service Account 的授權(quán)方式,兩種都可以達(dá)到效果。就看大家的喜歡哪一種啦!
那么到處整體的谷歌內(nèi)購全部流程就結(jié)束了,大家覺得還算詳細(xì)嗎?
后記
其他的第三方插件我覺得 Flutter 都蠻簡(jiǎn)單的,比如極光推送,感覺比 Android 版本的還要簡(jiǎn)單,一些配置與代碼都封裝好了,開箱即用很方便。
對(duì)于內(nèi)購的插件 in_app_purchase 其實(shí)內(nèi)部在 Android 平臺(tái)也是用的 Google Billing ,只是封裝之后使用起來也很簡(jiǎn)單。感覺比原生都好用
主要是內(nèi)購的配置,谷歌的配置,應(yīng)用配置,商品的配置,谷歌云配置,各種授權(quán)配置。只要其中一步卡住了就不能行,感覺真的是很復(fù)雜,網(wǎng)上的一些參考資源很多都是過時(shí)的,所以才有了我一步步的踩坑的分享,如果有需要大家可以收藏一波,收藏等于學(xué)會(huì),萬一哪天踩坑了可以參考參考嘛。
關(guān)于內(nèi)購,不知道大家有沒有遇到內(nèi)購的一些坑呢,又是如何解決的呢?歡迎大家一起交流一下哦。
那么本期內(nèi)容就到這里,如講的不到位或錯(cuò)漏的地方,希望同學(xué)們可以評(píng)論區(qū)指出。
如果感覺本文對(duì)你有一點(diǎn)點(diǎn)點(diǎn)的啟發(fā),還望你能點(diǎn)贊支持一下,你的支持是我最大的動(dòng)力啦。
Ok,這一期就此完結(jié)。
Newki
Android/Flutter開發(fā) @武漢
163
文章
419k
閱讀
1.2k
粉絲 目錄 收起
Flutter集成谷歌內(nèi)購與使用的全過程
前言
一、谷歌市場(chǎng)配置商品
二、集成支付插件兼容Android與iOS支付
三、服務(wù)器校驗(yàn)相關(guān)流程
3.1 Google Cloud關(guān)聯(lián)
3.2 創(chuàng)建 web-OAuth 授權(quán)
3.3 OAuth校驗(yàn)支付是否成功
3.3 創(chuàng)建Service Account的授權(quán)
后記
相關(guān)推薦 Flutter筆記:Flutter的WidgetsBinding.instance的window屬性 1.4k閱讀 ?·? 5點(diǎn)贊使用Flutter約束傳遞優(yōu)化你的UI設(shè)計(jì) 1.1k閱讀 ?·? 12點(diǎn)贊Flutter 繪制實(shí)踐 | 路徑篇 · 數(shù)字顯示管 2.6k閱讀 ?·? 62點(diǎn)贊Flutter 構(gòu)建設(shè)計(jì)系統(tǒng) 1.3k閱讀 ?·? 11點(diǎn)贊添加Flutter到iOS工程最新教程 6.5k閱讀 ?·? 19點(diǎn)贊 友情鏈接:
smartjs
In App Purchasing - Unity 手冊(cè)
手冊(cè)
腳本 API
unity.cn
Version:
2021.1
2023.2
2023.1
2022.3
2022.2
2022.1
2021.3
2021.2
2021.1
2020.3
2020.2
2020.1
2019.4
2019.3
2019.2
2019.1
2018.4
2018.3
2018.2
2018.1
2017.4
2017.3
2017.2
2017.1
5.6
包含此頁的版本:
不含此頁的版本:
受支持
舊版
手冊(cè)
腳本 API
語言:
中文
English
中文
日本語
???
手冊(cè)
Version:
2021.1
2023.2
2023.1
2022.3
2022.2
2022.1
2021.3
2021.2
2021.1
2020.3
2020.2
2020.1
2019.4
2019.3
2019.2
2019.1
2018.4
2018.3
2018.2
2018.1
2017.4
2017.3
2017.2
2017.1
5.6
包含此頁的版本:
不含此頁的版本:
受支持
舊版
Unity User Manual 2021.1
包
Released packages
In App Purchasing
FBX Exporter
Input System
In App Purchasing
com.unity.purchasing
描述
重要升級(jí)說明:如果從 Unity IAP(com.unity.purchasing + Asset Store 插件)版本 2.x 更新為版本 3.x,請(qǐng)完成以下操作以解決編譯錯(cuò)誤: 1. 移動(dòng) IAPProductCatalog.json 和 BillingMode.json,從:Assets/Plugins/UnityPurchasing/Resources/ 到:Assets/Resources/. 2. 移動(dòng) AppleTangle.cs 和 GooglePlayTangle.cs 從:Assets/Plugins/UnityPurchasing/generated 到:Assets/Scripts/UnityPurchasing/generated. 3. 所有其余 Asset Store 插件文件夾和文件從項(xiàng)目的 Assets/Plugins/UnityPurchasing 中刪除。包描述:借助 Unity IAP,在多個(gè)應(yīng)用商店中為游戲設(shè)置應(yīng)用內(nèi)購從未如此簡(jiǎn)單。該包提供: a–a 一種免費(fèi)訪問所有商店的通用 API,以便您充分了解和優(yōu)化自己的游戲內(nèi)經(jīng)濟(jì) a–a 與 Unity Analytics 自動(dòng)耦合,可根據(jù)多個(gè)平臺(tái)的收入和購買數(shù)據(jù)趨勢(shì)進(jìn)行監(jiān)控和決策 a–a 支持 iOS、Mac、tvOS、Google Play、Windows 和 Amazon 應(yīng)用商店(*). a–a 支持與 Unity Distribution Portal 一起使用,以與其他應(yīng)用商店同步目錄和交易 a–a Apple App Store 和 Google Play 的客戶端收據(jù)驗(yàn)證安裝此軟件包后,打開 Services 窗口以啟用應(yīng)用內(nèi)購,以使用這些功能。
版本信息
Released for Unity
Package version 3.2.3 is released for Unity Editor version 2021.1.
與 Unity 兼容
These package versions are available in Unity version 2021.1:
文檔位置:
狀態(tài)
可用版本:
released
4.0.0
released
3.2.2, 3.2.3
關(guān)鍵字
purchasing , iap , unity
FBX Exporter
Input System
Copyright ? 2023 Unity Technologies 優(yōu)美締軟件(上海)有限公司 版權(quán)所有 "Unity"、Unity 徽標(biāo)及其他 Unity 商標(biāo)是 Unity Technologies 或其附屬機(jī)構(gòu)在美國(guó)及其他地區(qū)的商標(biāo)或注冊(cè)商標(biāo)。其他名稱或品牌是其各自所有者的商標(biāo)。 公安部備案號(hào):31010902002961 法律條款 隱私政策 Cookies 滬ICP備13002771號(hào)-8
iOS 內(nèi)購插件 - DCloud 插件市場(chǎng)
Toggle navigation
登錄
注冊(cè)
全部
前端組件
通用組件
uvue 組件
nvue 組件
小程序組件
DataCom組件
JS SDK
通用 SDK
UTS SDK
微信小程序 SDK
Native.js
UTS插件
API插件
組件插件
uni-app前端模板
前端頁面模板
uvue 頁面模板
nvue 頁面模板
uni-app前端項(xiàng)目模板
App原生語言插件
App原生語言插件
web 項(xiàng)目
web 項(xiàng)目模板
uniCloud
云函數(shù)模板
云端一體頁面模板
云端一體項(xiàng)目模板
Admin插件
DB Schema及驗(yàn)證函數(shù)
HBuilderX
HBuilderX
語言包
服務(wù)商店
沒找到想要的插件?
提交需求
已發(fā)布需求
插件開發(fā)指南
發(fā)布插件
我的插件
App原生語言插件
App原生語言插件
iOS 內(nèi)購插件
iOS 內(nèi)購插件
StoreKit
內(nèi)購
IAP
原生代碼實(shí)現(xiàn)iOS內(nèi)購,只有兩個(gè)方法簡(jiǎn)單操作
作者:
243***@qq.com
咨詢作者
下載人數(shù): 8
????
下載次數(shù): 10
????
收藏人數(shù):
1
(0)
插件ID:XTL-IAPKit
插件包體積:21.7KB
更新日期:2024-01-03
版本:2.0
購買(0 元)for 云打包
下載 for 離線打包
贊賞(0)
本站所有收費(fèi)插件均支持免費(fèi)試用,切勿私下交易或購買不可正常試用的插件,而造成不必要的糾紛。
概述
評(píng)論
更新記錄
2.0(2024-01-03)
XTLIAPKit使用教程
1.引入XTLIAPKit插件
var iap = uni.requireNativePlugin("XTLIAPKit")
2.發(fā)起支付請(qǐng)求
var iap = uni.requireNativePlugin("XTLIAPKit")
//發(fā)起支付
iap.pay({
'pids': ['內(nèi)購商品id'],
'isAutoFinishTransaction': false//是否自動(dòng)結(jié)算憑據(jù)
},(ret) => {
})
3.完成支付請(qǐng)求,僅在isAutoFinishTransaction=false時(shí)需要
//完成支付并結(jié)算憑證
iap.finishTransaction({})
平臺(tái)兼容性
Android
iOS
×
適用版本區(qū)間:9 - 17
原生插件通用使用流程:
購買插件,選擇該插件綁定的項(xiàng)目。
在HBuilderX里找到項(xiàng)目,在manifest的app原生插件配置中勾選模塊,如需要填寫參數(shù)則參考插件作者的文檔添加。
根據(jù)插件作者的提供的文檔開發(fā)代碼,在代碼中引用插件,調(diào)用插件功能。
打包自定義基座,選擇插件,得到自定義基座,然后運(yùn)行時(shí)選擇自定義基座,進(jìn)行l(wèi)og輸出測(cè)試。
開發(fā)完畢后正式云打包
付費(fèi)原生插件目前不支持離線打包。
Android 離線打包原生插件另見文檔 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 離線打包原生插件另見文檔 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事項(xiàng):使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下購買并綁定了多個(gè)包名,提交云打包界面提示包名綁定不一致時(shí),需要在HBuilderX項(xiàng)目中manifest.json->“App原生插件配置”->”云端插件“列表中刪除該插件重新選擇
XTLIAPKit使用教程
1.引入XTLIAPKit插件
var iap = uni.requireNativePlugin("XTLIAPKit")
2.發(fā)起支付請(qǐng)求
var iap = uni.requireNativePlugin("XTLIAPKit")
//發(fā)起支付
iap.pay({
'pids': ['內(nèi)購商品id'],
'isAutoFinishTransaction': false//是否自動(dòng)結(jié)算憑據(jù)
},(ret) => {
})
3.完成支付請(qǐng)求,僅在isAutoFinishTransaction=false時(shí)需要
//完成支付并結(jié)算憑證
iap.finishTransaction({})
隱私、權(quán)限聲明
1. 本插件需要申請(qǐng)的系統(tǒng)權(quán)限列表:
暫無
2. 本插件采集的數(shù)據(jù)、發(fā)送的服務(wù)器地址、以及數(shù)據(jù)用途說明:
暫無
3. 本插件是否包含廣告,如包含需詳細(xì)說明廣告表達(dá)方式、展示頻率:
暫無
許可協(xié)議
作者未提供license.md
評(píng)論列表
撰寫評(píng)論
暫無用戶評(píng)論。
加載更多...
沒有更多評(píng)論了。
插件問答
我要提問
使用中有什么不明白的地方,就向插件作者提問吧~
我要提問
加載更多...
沒有更多了。
推廣
他的插件
iOS 內(nèi)購插件
StoreKit
內(nèi)購
IAP
(0)
原生代碼實(shí)現(xiàn)iOS內(nèi)購,只有兩個(gè)方法簡(jiǎn)單操作
?下載?10
?贊賞?0
原生SDK插件作者排行
李子
發(fā)布插件:49
下載?7987?
?銷量?1154?
FullStack
發(fā)布插件:116
下載?14206?
?銷量?1343?
Fvv123
發(fā)布插件:8
下載?18292?
?銷量?17?
fsyang
發(fā)布插件:22
下載?12660?
?銷量?1878?
博文浩蕩
發(fā)布插件:40
下載?16906?
?銷量?1859?
碼農(nóng)朱哲
發(fā)布插件:46
下載?31409?
?銷量?1199?
軟云
發(fā)布插件:46
下載?9899?
?銷量?646?
極光
發(fā)布插件:6
下載?27875?
?銷量?23?
happyboy183
發(fā)布插件:4
下載?4447?
?銷量?785?
三杯五岳
發(fā)布插件:60
下載?18677?
?銷量?2605?
hke***@qq.com
發(fā)布插件:13
下載?5721?
?銷量?1235?
imn***@gmail.com
發(fā)布插件:3
下載?2963?
?銷量?2?
129***@qq.com
發(fā)布插件:1
下載?2367?
?銷量?2?
mPaaS
發(fā)布插件:1
下載?13256?
?銷量?8?
935***@qq.com
發(fā)布插件:1
下載?2770?
?銷量?6?
5元
10元
20元
50元
100元
200元
自定義
支付寶
微信支付
贊賞
×
前端兼容平臺(tái)
Vue
vue2
不確定
不支持
支持
最低版本號(hào):無
vue3
不確定
不支持
支持
App
app-vue
不確定
不支持
支持
app-nvue
不確定
不支持
支持
app-uvue
不確定
不支持
支持
H5-mobile
Safari
不確定
不支持
支持
Android Browser
不確定
不支持
支持
微信瀏覽器(Android)
不確定
不支持
支持
QQ瀏覽器(Android)
不確定
不支持
支持
H5-pc
Chrome
不確定
不支持
支持
IE
不確定
不支持
支持
Edge
不確定
不支持
支持
Firefox
不確定
不支持
支持
Safari
不確定
不支持
支持
小程序
微信
不確定
不支持
支持
阿里
不確定
不支持
支持
百度
不確定
不支持
支持
字節(jié)跳動(dòng)
不確定
不支持
支持
不確定
不支持
支持
釘釘
不確定
不支持
支持
快手
不確定
不支持
支持
飛書
不確定
不支持
支持
京東
不確定
不支持
支持
快應(yīng)用
華為
不確定
不支持
支持
聯(lián)盟
不確定
不支持
支持
部署進(jìn)度
×
Modal title
One fine body…
Close
Save changes
DCloud 即數(shù)字天堂(北京)網(wǎng)絡(luò)技術(shù)有限公司是W3C成員及HTML5中國(guó)產(chǎn)業(yè)聯(lián)盟發(fā)起單位
商務(wù)合作:[email protected]、廣告投放?|?
向官方投訴
京ICP備12046007號(hào)-4 | 京公網(wǎng)安備:11010802035340號(hào)
增值電信業(yè)務(wù)經(jīng)營(yíng)許可證編號(hào):合字B2-20220010 | 國(guó)家信息安全等級(jí)保護(hù)三級(jí),證書編號(hào):11010813802-20001
學(xué)如逆水行舟,不進(jìn)則退。
今天和大家來聊聊iOS內(nèi)購即In-App Purchase,內(nèi)購分為消耗型、非消耗型、自動(dòng)訂閱、非自動(dòng)訂閱型。
內(nèi)購流程
配置App內(nèi)購買項(xiàng)目(可以參考蘋果官方文檔)
在iTC后臺(tái)接收付費(fèi)協(xié)議
創(chuàng)建App內(nèi)購買項(xiàng)目
創(chuàng)建沙盒賬號(hào),用于測(cè)試
代碼實(shí)現(xiàn)
從蘋果請(qǐng)求商品詳情
- (void)requestIAPProducts:(NSSet
{
SKProductsRequest *productReq = [[SKProductsRequest alloc] initWithProductIdentifiers:productIds];
productReq.delegate = self;// SKProductsRequestDelegate
[productReq start];
}
實(shí)現(xiàn)SKProductsRequestDelegate代理,如果獲取到商品的話就執(zhí)行購買行為
#pragma mark SKProductsRequestDelegate
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
[response.products enumerateObjectsUsingBlock:^(SKProduct * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
}];
[response.invalidProductIdentifiers enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
}];
// 開始購買
if (response.products.count > 0) {
SKProduct *product = response.products.firstObject;
SKMutablePayment *payment = [[SKMutablePayment alloc] init];
payment.applicationUsername = @"uid";
payment.productIdentifier = product.productIdentifier;
payment.quantity = 1;
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
}
- (void)requestDidFinish:(SKRequest *)request
{
}
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
}
監(jiān)聽商品支付結(jié)果:SKPaymentTransactionObserver
#pragma mark SKPaymentTransactionObserver
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray
{
for (SKPaymentTransaction *transaction in transactions) {
switch (transaction.transactionState) {
// 1、購買成功
// 2、購買成功,但是你沒有finish掉,沒有消耗
case SKPaymentTransactionStatePurchased: {
//自動(dòng)訂閱訂單拋出,只有自動(dòng)訂閱訂單originalTransaction才會(huì)有值
if (transaction.originalTransaction) {
} else {
}
// 對(duì)于成功的訂單需要先到后臺(tái)校驗(yàn) 成功后才可以消單
// [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
}
case SKPaymentTransactionStateFailed: {
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
}
case SKPaymentTransactionStateRestored: {
// [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
}
case SKPaymentTransactionStatePurchasing: {
break;
}
case SKPaymentTransactionStateDeferred: {
break;
}
default: {
break;
}
}
}
}
后臺(tái)校驗(yàn)訂單
沙盒訂單校驗(yàn):https://sandbox.itunes.apple.com/verifyReceipt
正式訂單校驗(yàn):https://buy.itunes.apple.com/verifyReceipt
憑證校驗(yàn)結(jié)果格式說明
{
"receipt": {
"receipt_type": "ProductionSandbox",
"adam_id": 0,
"app_item_id": 0,
"bundle_id": "",
"application_version": "7.0",
"download_id": 0,
"version_external_identifier": 0,
"receipt_creation_date": "2022-05-20 02:37:42 Etc/GMT",
"receipt_creation_date_ms": "1653014262000",
"receipt_creation_date_pst": "2022-05-19 19:37:42 America/Los_Angeles",
"request_date": "2022-05-31 06:46:57 Etc/GMT",
"request_date_ms": "1653979617874",
"request_date_pst": "2022-05-30 23:46:57 America/Los_Angeles",
"original_purchase_date": "2013-08-01 07:00:00 Etc/GMT",
"original_purchase_date_ms": "1375340400000",
"original_purchase_date_pst": "2013-08-01 00:00:00 America/Los_Angeles",
"original_application_version": "1.0",
"in_app": [
{
"quantity": "1",
"product_id": "xxxx",
"transaction_id": "xx",
"original_transaction_id": "xxx",
"purchase_date": "2022-05-20 02:37:41 Etc/GMT",
"purchase_date_ms": "1653014261000",
"purchase_date_pst": "2022-05-19 19:37:41 America/Los_Angeles",
"original_purchase_date": "2022-05-20 02:37:41 Etc/GMT",
"original_purchase_date_ms": "1653014261000",
"original_purchase_date_pst": "2022-05-19 19:37:41 America/Los_Angeles",
"is_trial_period": "false",
"in_app_ownership_type": "PURCHASED" // 代表成功
}
]
},
"environment": "Sandbox",
"status": 0
}
Demo 已經(jīng)上傳至Github ,記得給個(gè)star
發(fā)布上線
代碼實(shí)現(xiàn)開發(fā)完成后,可以跟著版本一起發(fā)布,也可以單獨(dú)審核內(nèi)購,看具體需求
內(nèi)購常見錯(cuò)誤
獲取不到商品信息:檢查itc商品審核以及下線情況,檢查設(shè)備知否支持內(nèi)購
無法連接: 網(wǎng)絡(luò)問題,切記沙盒環(huán)境下不可開vpn或者網(wǎng)絡(luò)代理
21000 App Store無法讀取你提供的JSON數(shù)據(jù)
21002 收據(jù)數(shù)據(jù)不符合格式
21003 收據(jù)無法被驗(yàn)證
21004 你提供的共享密鑰和賬戶的共享密鑰不一致
21005 收據(jù)服務(wù)器當(dāng)前不可用
21006 收據(jù)是有效的,但訂閱服務(wù)已經(jīng)過期。當(dāng)收到這個(gè)信息時(shí),解碼后的收據(jù)信息也包含在返回內(nèi)容中
21007 收據(jù)信息是測(cè)試用(sandbox),但卻被發(fā)送到產(chǎn)品環(huán)境中驗(yàn)證
21008 收據(jù)信息是產(chǎn)品環(huán)境中使用,但卻被發(fā)送到測(cè)試環(huán)境中驗(yàn)證
如果覺得我寫的還不錯(cuò)的話,記得給個(gè)關(guān)注哦。有任何疑問?可以留言咨詢哦,看到會(huì)回復(fù)
參考資料:
App內(nèi)購買項(xiàng)目類型
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者 人面猴序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...沈念sama閱讀 145,261評(píng)論 1贊 308死咒序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...沈念sama閱讀 62,177評(píng)論 1贊 259救了他兩次的神仙讓他今天三更去死文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...開封第一講書人閱讀 96,329評(píng)論 0贊 214道士緝兇錄:失蹤的賣姜人 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...開封第一講書人閱讀 41,490評(píng)論 0贊 184?港島之戀(遺憾婚禮)正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...茶點(diǎn)故事閱讀 49,353評(píng)論 1贊 262惡毒庶女頂嫁案:這布局不是一般人想出來的文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...開封第一講書人閱讀 39,028評(píng)論 1贊 179城市分裂傳說那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...沈念sama閱讀 30,611評(píng)論 2贊 276雙鴛鴦連環(huán)套:你想象不到人心有多黑文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...開封第一講書人閱讀 29,383評(píng)論 0贊 171萬榮殺人案實(shí)錄序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...沈念sama閱讀 32,749評(píng)論 0贊 215?護(hù)林員之死正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...茶點(diǎn)故事閱讀 29,460評(píng)論 2贊 219?白月光啟示錄正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...茶點(diǎn)故事閱讀 30,814評(píng)論 1贊 232活死人序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...沈念sama閱讀 27,255評(píng)論 2贊 215?日本核電站爆炸內(nèi)幕正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...茶點(diǎn)故事閱讀 31,752評(píng)論 3贊 214男人毒藥:我在死后第九天來索命文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...開封第一講書人閱讀 25,685評(píng)論 0贊 9一樁弒父案,背后竟有這般陰謀文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...開封第一講書人閱讀 26,114評(píng)論 0贊 170情欲美人皮我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...沈念sama閱讀 33,747評(píng)論 2贊 234代替公主和親正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...茶點(diǎn)故事閱讀 33,901評(píng)論 2贊 238推薦閱讀更多精彩內(nèi)容iOS 內(nèi)購最新講解一.總說內(nèi)購的內(nèi)容 協(xié)議、稅務(wù)和銀行業(yè)務(wù) 信息填寫 內(nèi)購商品的添加 添加沙盒測(cè)試賬號(hào) 內(nèi)購代碼的具體實(shí)現(xiàn) 內(nèi)購的注...九洲仙人閱讀 2,837評(píng)論 2贊 3iOS 內(nèi)購最新講解一.總說內(nèi)購的內(nèi)容 協(xié)議、稅務(wù)和銀行業(yè)務(wù) 信息填寫 內(nèi)購商品的添加 添加沙盒測(cè)試賬號(hào) 內(nèi)購代碼的具體實(shí)現(xiàn) 內(nèi)購的注...默默_David閱讀 3,351評(píng)論 0贊 6Flutter iOS 蘋果IAP(內(nèi)購)實(shí)現(xiàn)步驟及問題總結(jié)(全網(wǎng)最全)IAP內(nèi)購支付流程 Client向Server發(fā)送請(qǐng)求,獲得一份產(chǎn)品列表。 Server返回包含產(chǎn)品標(biāo)識(shí)符的列表。...StevenHu_Sir閱讀 25,354評(píng)論 10贊 48iOS 蘋果內(nèi)購(In-App Purchase)內(nèi)購簡(jiǎn)介 IAP 全稱:In-App Purchase,是指蘋果 App Store 的應(yīng)用內(nèi)購買,是蘋果為 Ap...歐大帥Allen閱讀 7,167評(píng)論 0贊 6iOS內(nèi)購—— In-App Purchase(消耗型)iOS應(yīng)用如果涉及到支付功能,分為兩類:第三方支付和蘋果內(nèi)購。那么什么情況下選擇使用第三方支付,又在什么情況下選擇...ZfRee閱讀 38,180評(píng)論 36贊 66評(píng)論0贊99贊10贊贊賞更
iphone越獄內(nèi)購破解插件可以解決什么類型的軟件? - 知乎首頁知乎知學(xué)堂發(fā)現(xiàn)等你來答?切換模式登錄/注冊(cè)iOSiPhone 應(yīng)用iphone越獄內(nèi)購破解插件可以解決什么類型的軟件?關(guān)注者3被瀏覽7,500關(guān)注問題?寫回答?邀請(qǐng)回答?好問題?添加評(píng)論?分享?1 個(gè)回答默認(rèn)排序知乎用戶破解插件有很多種,IAP FREE,IAP CRACKER是常見的內(nèi)購破解類插件。內(nèi)購破解對(duì)大多數(shù)軟件可以成功,這在網(wǎng)上有各種清單就不多贅述,而許多游戲大作諸如gameloft或者EA的是很難破解的。發(fā)布于 2014-01-23 20:18?贊同??1 條評(píng)論?分享?收藏?喜歡收起??
LocaliAPHeper 內(nèi)購神器 | 最簡(jiǎn)潔的中文源
Cydiakk源
關(guān)于我們
官方Q群
官方主頁
官方博客
展開
首頁
博客
登錄
Cydiakk中文源?
首頁
資源列表
技術(shù)文章
關(guān)于我們
資源列表/[工具 ]
您未登錄賬號(hào)
LocaliAPHeper 內(nèi)購神器
軟件版本:2.0
支持設(shè)備:
iPhone
iPad
文件大小:59.39 KB
支持版本:iOS 6.0 ~ iOS 15.6
?
提供作者:ant
下載數(shù)量:28609次??????????總下載量:28613次
收藏?cái)?shù)量:106次
?
Cydiakk中文源?
https://apt.cydiakk.com/
5050
資源
494343
粉絲
1654477
人氣
去看看
軟件內(nèi)容
掃描二維碼下載
請(qǐng)確保到
添加Cydiakk中文源?
刷新列表 以后再掃描二維碼下載
軟件描述:LocaliAPHeper 內(nèi)購神器破解小助手破解部分軟件的收費(fèi),彈窗付款點(diǎn)擊取消即可
軟件簡(jiǎn)介:
發(fā)布支持 iOS13
兼容支持 iOS6~12
簡(jiǎn)體中文漢化版
具體內(nèi)容?預(yù)覽截圖
更新說明:
屏幕截圖
搜索
最新上傳更多
Sushi音樂模幅
83下載 / 1.0版本
2024-03-07 00:23:44發(fā)布
No2Theft iOS 16設(shè)備防盜系統(tǒng)
50下載 / 1.1.1版本
2024-03-07 00:23:42發(fā)布
Latchkey鎖頭自定義
72下載 / 2.3.2版本
2024-03-07 00:23:20發(fā)布
BioProtect XS 面容/指紋加密【破解版】
34下載 / 4.6-229版本
2024-03-07 00:23:14發(fā)布
最新下載更多
Diatrus Installer為unc0ver安裝Sileo
2970下載 / 0.0001版本
2024-03-08 02:21:37發(fā)布
CCLess++控制中心模塊
3481下載 / 1.8.2版本
2024-03-08 02:21:29發(fā)布
阿凡達(dá)屏蔽助手
32524下載 / 1.0.0.4-4版本
2024-03-08 02:20:59發(fā)布
GoodWiFi無線WiFi增強(qiáng)
1765下載 / 1.2版本
2024-03-08 02:20:46發(fā)布
廣告終結(jié)者
3727下載 / 2.3.1版本
2024-03-08 02:20:43發(fā)布
源主推薦
MCPatch屏蔽OTA更新
允許安裝iOS12屏蔽OTA更新描述文件
新騰翔嘉麗圓縮小版
好看的騰翔嘉麗圓縮小版字體
Bubble 主題
精致的Bubble主題,圖標(biāo)涵蓋464個(gè)
Unc&雷神&Ele 最新防凍屏插件
完美解決11系統(tǒng)全系列越獄工具神經(jīng)性卡死、假死、凍結(jié)
STMoon 超好看的單色主題[VIP5專享]
超好看的單色輪廓主題
MaxiX 主題 [VIP5專享]
好看的多彩主題
BlackOrs 2 主題 [VIP5專享]
超精美的主題 兼容7.0-11.4系統(tǒng)
Amara XI 主題 [VIP5專享]
超精美的主題 兼容7.0-11.4系統(tǒng)
旗下網(wǎng)站
博客
|
Cydiakk中文源
|
版權(quán)與免責(zé)聲明
粵ICP備18011282號(hào)-4
Copyright 版權(quán)所有 ? 2017-2024 CydiaKK.Com ?. All rights reserved. Cydiakk中文源?版權(quán)或產(chǎn)權(quán)保護(hù)
返回頂部