1、首先在支付寶開(kāi)發(fā)者平臺(tái)上創(chuàng)建應(yīng)用,并按照開(kāi)發(fā)者平臺(tái)上的步驟把SDK接入,配置環(huán)境(這些步驟支付寶開(kāi)發(fā)者平臺(tái)寫(xiě)的很清楚,下面我主要寫(xiě)一些開(kāi)放平臺(tái)沒(méi)有,或者需要注意的地方)
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到佳木斯網(wǎng)站設(shè)計(jì)與佳木斯網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋佳木斯地區(qū)。
2、導(dǎo)入頭文件 #import AlipaySDK/AlipaySDK.h (如果報(bào)錯(cuò),則是缺少某些類庫(kù)或者靜態(tài)庫(kù)和頭文件路徑?jīng)]有設(shè)置好,請(qǐng)仔細(xì)查看并按照開(kāi)放平臺(tái)的步驟檢查,或者看一下這個(gè): )
3、iOS 8.0以下重寫(xiě)下面方法
4、iOS 9.0以上實(shí)現(xiàn)下面的方法(也就是說(shuō),如果app要兼容iOS 8.0以上,則步驟3和步驟4的方法都要實(shí)現(xiàn))
5、發(fā)起支付
注意:為了支付完成后能成功返回app,需要在info.plist文件中設(shè)置URL scheme,并且這個(gè)值是唯一的(最好填寫(xiě)bundel id 或者開(kāi)放平臺(tái)上的app ID),詳細(xì)步驟在支付寶開(kāi)放平臺(tái)的接入文檔有
1. 首先確認(rèn) openssl 和 Util目錄已經(jīng)添加到Build setting的 header search path中; 2. 奇葩的是即使添加了也會(huì)報(bào)這個(gè)錯(cuò),糾結(jié)了半天, 經(jīng)測(cè)試發(fā)現(xiàn),需要添加以下的庫(kù)和framework 問(wèn)題搞定, SB的編譯器啊,same folder 這一行前面的勾必須選上去,要不然 #include "頭文件" 編譯會(huì)出現(xiàn)找不到頭文件,得將頭文件的完整路徑給加上去才不會(huì)出錯(cuò)。 將header and implementation file shall be in same folder ,在你的Xcode里的header search paths 里添加支付寶SDK(openssl的路徑);格式如下 $(PROJECT_DIR)/文件夾名
基本沒(méi)有選擇, 一共就4種
IAP蘋(píng)果應(yīng)用內(nèi)支付組件, 這種是比較穩(wěn)妥的做法, 但要分30%利潤(rùn)給蘋(píng)果, 太黑
支付寶
財(cái)付通
銀聯(lián)---銀聯(lián)的組件最好不要用了, 完全沒(méi)有優(yōu)點(diǎn), 對(duì)外公布的唯一對(duì)接只是2個(gè)QQ群而且常年不負(fù)責(zé)解答任何問(wèn)題, 文檔不齊全, 辦事效率極低, 不愧為國(guó)企
目錄: Cocos creator ios開(kāi)發(fā)-接入微信SDK系列文章
這是官方文檔: app微信支付開(kāi)發(fā)文檔
第一步、
先接入微信SDK,請(qǐng)參考 Cocos creator ios開(kāi)發(fā)—接入微信SDK
第二步、
在Xcode的Info的設(shè)置項(xiàng)中,URL Types 的URL Schemes填寫(xiě)APPID
在AppController.h中添加接口:
app啟動(dòng)時(shí),注冊(cè)APPID,在AppController.mm中的didFinishLaunchingWithOptions方法中調(diào)用
第三步、
向oc發(fā)送支付信息
第四步、
oc收到支付信息,發(fā)起支付
iOS SDK開(kāi)發(fā)就是為某一個(gè)應(yīng)用場(chǎng)景、或領(lǐng)域、或需求,提供一個(gè)已實(shí)現(xiàn)的、封裝好的、可供直接使用的模塊。
其主要由兩部分組成:用來(lái)為類型或常量聲明的頭文件列表、具體實(shí)現(xiàn)的二進(jìn)制文件。
所以SDK開(kāi)發(fā)中的主要問(wèn)題點(diǎn)集中在:
1. 頭文件是否能被使用的工程索引到
2. 二進(jìn)制文件是否能被使用的工程搜索到
本篇文章不寫(xiě)制作SDK的具體步驟,僅僅討論制作SDK時(shí)的一些情形。
SDK開(kāi)發(fā)中關(guān)于頭文件設(shè)置:
凡是提供給外界使用的類、結(jié)構(gòu)體、枚舉、常量等,定義它們的頭文件必須要在工程的Build Phases-Headers-public下面。并且這些頭文件都需要包含在與SDK工程同名的頭文件中(這條不是必須,只是這么做會(huì)顯得更加規(guī)范。別人使用SDK的時(shí)候,只需要引入SDK同名的頭文件即可)
設(shè)置庫(kù)文件生成動(dòng)態(tài)的還是靜態(tài)的:
Project Name-Target Name-Build Settings-搜索框搜“Mach”-修改“Mach-O Type”為動(dòng)態(tài)或靜態(tài),則相應(yīng)可生成動(dòng)態(tài)或靜態(tài)的庫(kù)文件。
先解釋說(shuō)明以下圖片中出現(xiàn)的工程名字:
SDKDemo :制作的向外提供的SDK庫(kù)文件(與SDK工程名同名)
SDKApp :引用SDK庫(kù)文件(本文指的是SDKDemo)的App工程
SDKStatic :新建工程時(shí),選擇iOS-Framework Library-Cocoa Touch Static Library. 用來(lái)生成.a文件的工程
SDKFramework : ?是個(gè)Framework庫(kù)文件(可能是動(dòng)態(tài)的,也可能是靜態(tài)的),用于模擬被SDK依賴的.framework文件
下面分幾種情況來(lái)討論SDK開(kāi)發(fā)的注意事項(xiàng):
1. 生成動(dòng)態(tài)SDK庫(kù)文件。
創(chuàng)建工程的時(shí)候,根據(jù)默認(rèn)配置編譯是生成動(dòng)態(tài)庫(kù)的。
App工程中引入動(dòng)態(tài)庫(kù)的時(shí)候,需要在
App工程:Project Name-Target Name-General-Embedded Binaries下添加引入的動(dòng)態(tài)庫(kù)。否則運(yùn)行時(shí)會(huì)報(bào)如下類型錯(cuò)誤:
嵌入動(dòng)態(tài)庫(kù)編譯后,生成的App文件中會(huì)多一個(gè)Frameworks目錄(可右鍵.App文件查看包內(nèi)容),里面全是Embedded Binaries下添加的動(dòng)態(tài)庫(kù)
2. 打包為靜態(tài)庫(kù)
SDK工程:Project Name-Target Name-Build Settings-搜索框搜“Mach”-修改“Mach-O Type”為靜態(tài)庫(kù)
App工程引入靜態(tài)庫(kù)很簡(jiǎn)單,直接引入就行,不需要額外配置:
tips:
合并真機(jī)與模擬器版本時(shí)的命令格式為:
lipo -create?模擬器版本的路徑?真機(jī)版本的路徑 -output 合并后的版本存放路徑
1. 合并時(shí)lipo -create接收的模擬器版本和真機(jī)版本兩個(gè)參數(shù)的前后順序沒(méi)有關(guān)系,合并后的版本通過(guò)命令查看架構(gòu)信息顯示結(jié)果是完全一致的。模擬器架構(gòu)信息顯示在前,真機(jī)架構(gòu)信息在后。
2. 合并后的版本無(wú)論替換真機(jī)版本的Framework中的目標(biāo)文件還是模擬器版本的Framework中的目標(biāo)文件,App工程中引入被替換的Framework后在真機(jī)和模擬器上都能跑起來(lái)
首先創(chuàng)建SDKStatic工程,生成一個(gè).a文件。
該工程只是簡(jiǎn)單繼承了UIButton,并重寫(xiě)了initWithFrame方法。為每一個(gè)MyButton對(duì)象默認(rèn)生成標(biāo)題和背景色:
生成的.a文件如下,可以看到里面包含了MyButton.o文件:
在SDK工程中引入.a文件。下面分兩種情況來(lái)看生成的SDK庫(kù)文件:
1. SDK庫(kù)文件做成動(dòng)態(tài)庫(kù)(設(shè)置方法看開(kāi)頭部分)
.a文件內(nèi)容被整合進(jìn)了SDK動(dòng)態(tài)庫(kù)文件中,引入App工程中時(shí),只需要引入SDK動(dòng)態(tài)庫(kù)就可以了
2. SDK庫(kù)文件做成靜態(tài)庫(kù)(設(shè)置方法看開(kāi)頭部分)
包中的信息:
.a文件內(nèi)容同樣被整合進(jìn)了SDK靜態(tài)庫(kù)文件中,這個(gè)更好理解。引入App工程中時(shí),只需要引入SDK靜態(tài)庫(kù)就可以了
總結(jié)下:
制作SDK庫(kù)時(shí),如果有依賴的.a文件,則最終生成的SDK庫(kù)文件會(huì)合并.a文件的內(nèi)容,而不論SDK庫(kù)文件是動(dòng)態(tài)還是靜態(tài)的。
下面的SDKFramework是個(gè)Framework庫(kù)文件(可能是動(dòng)態(tài)的,也可能是靜態(tài)的)
SDKFramework工程添加的內(nèi)容和SDKStatic工程是一樣的。也是自定義MyButton,默認(rèn)生成標(biāo)題和背景色(拷貝文件到工程):
SDKDemo工程自定義了MyView,默認(rèn)生成的MyView對(duì)象添加了一個(gè)MyButton按鈕和背景色:
1. 如果.framework文件是動(dòng)態(tài)庫(kù)
a. SDK打包為靜態(tài)庫(kù),如下:
靜態(tài)SDK包和動(dòng)態(tài)SDKFramework.framework文件是彼此獨(dú)立的。引入靜態(tài)SDK包時(shí),必須也導(dǎo)入SDKFramework.framework,否則編譯不過(guò),因?yàn)殪o態(tài)包有引入動(dòng)態(tài)庫(kù)中的符號(hào)。
b. SDK打包為動(dòng)態(tài)庫(kù),如下:
兩者還是彼此獨(dú)立的。動(dòng)態(tài)SDK包中會(huì)記錄依賴的動(dòng)態(tài).framework rpath,App運(yùn)行時(shí),dyld會(huì)根據(jù)這個(gè)信息去加載對(duì)應(yīng)的.framework依賴文件。如果找不到App將會(huì)在啟動(dòng)時(shí)奔潰...
2. 如果.framework文件是靜態(tài)庫(kù)
a. 首先SDK打包為動(dòng)態(tài)庫(kù)看看:
經(jīng)實(shí)踐,依賴的靜態(tài)庫(kù)會(huì)被整合進(jìn)動(dòng)態(tài)SDK包自身中。App中引入時(shí),只需要導(dǎo)入SDK包就可以。我們?cè)赟DKApp中導(dǎo)入SDKDemo,運(yùn)行可以看到如下效果:
b. 再看看SDK打包為靜態(tài)庫(kù):
根據(jù)上面截圖中信息,App中導(dǎo)入SDK包時(shí),也必須導(dǎo)入依賴的.framework了。否則編譯時(shí)將會(huì)出現(xiàn)如下圖所示找不到符號(hào)的錯(cuò)誤:
追加導(dǎo)入依賴的.framework,再次編譯運(yùn)行。OK?。。?/p>
總結(jié):
1. 依賴的.framework為動(dòng)態(tài)庫(kù)
制作的SDK庫(kù)文件不論動(dòng)態(tài)還是靜態(tài)的。和依賴的.framework文件本身是彼此獨(dú)立的,不會(huì)發(fā)生符號(hào)整合的現(xiàn)象
2.?依賴的.framework為靜態(tài)庫(kù)
如果制作的SDK庫(kù)文件是動(dòng)態(tài)的,則依賴的.framework靜態(tài)庫(kù)內(nèi)容會(huì)被整合進(jìn)SDK庫(kù)文件中
如果制作的SDK庫(kù)文件是靜態(tài)的,則彼此是獨(dú)立的
這里又得分幾種情況討論:
1. Podfile中不使用use_frameworks! ?pods庫(kù)生成的是.a文件
a. 如果SDK制作成靜態(tài)庫(kù):
? SDK靜態(tài)庫(kù)不會(huì)整合Pods里三方庫(kù)中的符號(hào),最終導(dǎo)入App工程時(shí),需要SDK靜態(tài)庫(kù)、Pods中的三方庫(kù)文件一起導(dǎo)入
b. 如果SDK制作成動(dòng)態(tài)庫(kù):
? Pods庫(kù)中的符號(hào)會(huì)被合并整合進(jìn)入SDK庫(kù)中,導(dǎo)入工程時(shí),只需要導(dǎo)入SDK包就OK了
2. Podfile中使用use_frameworks! ?pods庫(kù)生成的是.framework文件。其中Pods_工程名.framework文件是個(gè)靜態(tài)庫(kù),管理的第三方庫(kù)生成的是framework動(dòng)態(tài)庫(kù)
a.如果SDK制作成動(dòng)態(tài)庫(kù):
SDK中會(huì)包含引入三方庫(kù)的rpath,App中引入SDK包時(shí),也必須引入三方庫(kù),否則dyld加載不了指定庫(kù)導(dǎo)致App啟動(dòng)時(shí)奔潰
b. 如果SDK制作成靜態(tài)庫(kù):
靜態(tài)SDK中會(huì)忽略Pods中的庫(kù)中定義的符號(hào)(也即彼此是獨(dú)立的)。如果靜態(tài)SDK中引用了動(dòng)態(tài)pods庫(kù)中定義的符號(hào),只要在App工程中也導(dǎo)入pods中動(dòng)態(tài)庫(kù),并在embeded binaries中添加。一樣是可以編譯運(yùn)行的。
其實(shí)怎么編譯,SDK工程中是個(gè)什么情形都不重要。重要的是要明白庫(kù)文件的本質(zhì),及它是如何發(fā)揮作用的?在什么階段發(fā)揮作用?然后學(xué)會(huì)查看編譯運(yùn)行時(shí)的報(bào)錯(cuò)信息,并配合使用otool、nm、lipo、ar、file等這些命令去查看庫(kù)文件的一些信息,最終追蹤定位到問(wèn)題。
原諒我最后都沒(méi)怎么貼圖了,因?yàn)榱鞒潭己颓懊娌畈欢唷N乙矊?xiě)的手累了。如果你還有什么疑惑可以在下面評(píng)論,我會(huì)盡量及時(shí)回復(fù)。
沒(méi)問(wèn)題,只要你需要支付。
但是一般第三方支付都只能購(gòu)買(mǎi)真實(shí)物品,虛擬的需要在提交中具體說(shuō)明。