IOS集成第三方支付、分享、登錄功能小結

IOS集成第三方支付、分享、登錄功能小結


作者 蠟筆小新


2016.7.1。由于蘋果強制要求適配ipv6,本文demo中采用的sdk可能有點老,如果采用的話,審核可能被拒。建議升級各SDK的新版本再集成,方法大同小異,有什么問題歡迎交流

集成ShareSDK社會化分享的時候集成了微信支付或者支付寶支付功能

(分別集成了微信支付和支付寶,用Ping++集成支付的煩請繞行…)

2016.01.07 更新(修改Xcode7.2 IOS9.2 微信客戶端操作之后返回程序 ?微信的onResp回調方法不被執行的bug)

http://yun.baidu.com/share/link?shareid=187711184&uk=3055516665

不廢話,先甩鏈接

第一,你需要有微信開發平臺的開發者賬號,(網址https://open.weixin.qq.com/,或者自行百度“微信open”,支付寶支付同理,下同),并將你要集成的應用在你的開發者賬號中注冊,并獲取支付權限(一般這步不需要程序員考慮,都是客戶自己獲取的,你只需要知道,沒有支付權限的應用,不可以集成支付)。

第二,注冊完你的應用,通過審核之后,你會獲得開放平臺給你發放屬于這個應用的AppID和AppSecret

第三,在開發平臺的資源中心(或者叫文檔中心,SDK中心什么的),下載IOS的SDK(文檔也可以下載下來方便查閱)。我這次的Demo是之前集成過ShareSDK的分享和第三方登錄,所以直接用的ShareSDK中的微信SDK。

(ps,這里之前網友有過用ShareSDK中的微信SDK不支持支付功能,我這里是可以支付的,應該是Mob集成好了,如果你下載的不能用的話,可以去微信官方下載官方的SDK,10M左右的樣子,把ShareSDK中的微信SDK替換掉,替換的時候要注意,不能只替換文件,要看好工程中Target選項卡里的文件路徑是否刪除了舊文件路徑,否則的話可能舊文件路徑會覆蓋新文件路徑,導致替換沒有效果或者崩潰。)

第四,將下載好的SDK拷貝到工程文件夾中,然后再工程中AddFilesTo“你的工程”,

(這里注意,Add的時候要勾選CopyItemsIfNeeed,否則可能會出現找不到路徑這種煩人的錯誤)

第五,配置你的工程。

1.添加系統依賴庫,(這里我用了ShareSDK,所以也連Share必須的系統庫也一并添加了),方法—點擊工程名—Target—BuildPhases—Link Binary With Libraries—點擊+號搜索你需要的系統庫,并添加

SystemConfiguration.framework

QuartzCore.framework

CoreTelephony.framework

libicucore.dylib(ps,這里因為可能你的Xcode是Xcode7,所以這里的.dylib可能會在你的系統庫里顯示.tbd)正常添加就好

libz.1.2.5.dylib

Security.framework

JavaScriptCore.framework

libstdc++.dylib

CoreText.framework

libsqlite3.dylib

ImageIO.framework (shareSDK新浪必須依賴庫)

AdSupport.framework(shareSDK新浪必須依賴庫)

2.配置工程的URL Types中的URL Schemes,

這個URL Schemes是用來調起第三方客戶端支付或分享或授權之后回到你的程序的標識

方法:點擊工程名—Target—Info—URL Types—點擊+號,在URL Schemes欄中填入你在第二步中獲取到的APPID(圖見上一步,自己找一下info選項卡)

3.如果是Xcode7需要在Info.Plist文件中加入字段LSApplicationQueriesSchemes,為Array類型,然后在里面添加兩個小選項,分別為weixin和wechat(Xcode7http請求適配Xcode7的問題請自行百度)

第六、開始寫代碼了!

1.將Demo中的WXPay文件夾拷貝到工程文件夾中,然后Add到工程目錄

2.在AppDelegate.h中#import相關頭文件,在AppDelegate.m文件中的application:(UIApplication

*)applicationdidFinishLaunchingWithOptions:(NSDictionary

*)launchOptions

方法中添加[WXApi registerApp:APP_ID

withDescription:@"demo

2.0"];(這里的APPID就是你第二步獲取的APPID,一般建議寫成宏。@“demo2.0”不需要修改),我的demo里在這個方法里還注冊了shareSDK,希望大家不要有疑惑。

3.在AppDelegate.m中加入這兩個方法:

//重要更新,一下兩個方法IOS9.0以后被廢棄了,所以如果你是Xcode7.2的話,可能會出現不能進入微信的onResp回調方法,原因是下邊兩個方法沒有被調用,所以這里更新一下,改用另外一個方法(并不建議刪除這兩個方法,新方法是9.0以后的方法,可能系統低版本的用戶不支持。所以我三種方法都留下了,如果有人發現不能都留下的話,請簡信告訴我一下,再次謝過了

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;

-

(BOOL)application:(UIApplication *)application openURL:(NSURL *)url

sourceApplication:(NSString *)sourceApplication

annotation:(id)annotation;

//改用方法為- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options;

具體方法里的代碼如何書寫請看Demo中的注釋。

4.配置完AppDelegate文件之后,向你的工程中拷貝入Demo中的UIViewController+WeChatAndAliPayMethod類目,并Add到工程中,

在你需要用到支付的頁面引用這個類目。(詳情請見Demo的ViewController頁面方法和代碼,仔細觀看注釋和理解代碼之后微信支付的集成就完成了)

PS.支付寶集成和微信支付集成大同小異,如果你集成了微信支付,你會發現支付寶集成更簡單。

第一步,將支付寶支付的SDK拷貝到工程文件夾中,然后Add到工程目錄,

(ps。這里注意一下,我demo里ThirdParty下的AliPay那些文件都是需要你在這一步拷貝的東西。)

尤其是openssl和Util還有那兩個.a文件。因為支付寶的開發文檔寫的實在是不怎么樣,亂七八糟的,都沒有直接給你要添加的SDK包,這些東西都是從官方的demo里抽出來的。具體你們可以下載官方demo看一看。

第二步、Add完SDK包之后,引入所需的系統庫。調用UIViewController+WeChatAndAliPayMethod這個類目中的支付寶支付方法即可。(注意看我Demo中的代碼和注釋)

PS。如果你在集成支付寶的時候可能會遇到not

found的錯誤,(你平時用別的SDK的時候也可能會遇到),這一般情況是Xcode找不到這些文件的路徑。在這里,你可以在Targets中的BuildSettings中的Header

Search Paths選項卡中添加openssl的路徑。

重點:Demo里有兩個存放關鍵幾個宏的文件,payRequsesrHandler.h和AliPayNeedDEF.h,這兩個文件里面的內容你們要自己填寫自己的數據。具體如何獲取這些數據我的注釋寫的很明白了。仔細看一下就好。

還有,你們在調用我的支付類目中的方法的同時,要寫一個監聽,來通知你是否支付成功。這個在我的代碼注釋里寫的很清楚,這里就不多贅述了。

接下來的部分是后來新增的。(三方登錄,和三方分享,包括適配ios9

:三方登錄和分享這些代碼Mob官網都有,就不多贅述了。這里主要是為了減少大家的代碼量,增強復用性進行的一些整合。如果哪里有問題或者處理不妥,希望碼友們積極提出。

首先,能做到三方登錄的話,和支付一樣,需要你在第三方平臺上注冊的應用擁有登錄權限

其次XCode7之后IOS9shareSDK對應也有相應的變化,第三方分享登錄的時候,需要比之前多一些步驟,比如添加Schemes白名單:

info.plist中需要添加如此多的字段(為了適應新的sso授權。以下只是新浪微博,QQ,微信三個平臺需要添加的字段)

添加LSApplicationQueriesSchemes數組型字段中的元素

為方便大家按需添加,這里進行分類:

新浪微博sinaweibo,

sinaweibohd,

sinaweibosso,

sinaweibohdsso,

weibosdk,(添加weibosdk需要)

weibosdk2.5(添加weibosdk需要)

微信

wechat,

weixin

QQ

mqqOpensdkSSoLogin,

mqqopensdkapiV2,

mqqopensdkapiV3,

wtloginmqq2,

mqq,

mqqapi

(以下是QQZone需添加的,但是一般情況一下,需要集成QQ分享登錄的,都需要QQZone的,所以一般建議大家直接把QQ和QQzone的都添加進去

mqzone

mqzoneopensdk,

mqzoneopensdkapi,

mqzoneopensdkapi19,

mqzoneopensdkapiV2,

還有,不要忘記對URLType里面的設置。(QQ添加的時候需要用十六進制轉化的,例:QQ41D9BC03

關于登錄的簡單整理:

我的demo工程中有個LoginMethodObject文件夾,里面有我自己新建的一個類LoginMethod

使用者只需要引用這個類,實例化一個對象。并實現代理

-(void)recieveTheUserInfo:(NSDictionary*)userInfo

errorMsg:(NSString *)errorMsg;

userInfo即是獲取到的用戶信息。里面我只獲取了昵稱,uid,頭像等等簡單的信息。如果需要其他信息的話需要特別對待。不過一般登錄只需要uid就夠了,所以這里不過多贅述。

注意:在實現這個代理的時候,為了方便,邏輯更清楚。需要大家做下判斷,即判斷errorMsg是否存在。

(像AFNetWorking一樣)若存在errorMsg的話,說明獲取失敗,errorMsg打印出來即是錯誤原因。若errorMsg不存在代表獲取成功,就可以直接用userInfo中的用戶信息了

demo中的示例

具體可以看demo中的LoginViewController的運用。

關于第三方分享:

第三方分享的話,Mob的官網上寫的很明白了,我就不多此一舉再寫什么了。Demo中有樣板的,如果不想去mob翻的話,直接復制的話就可以了。

(單說一下,demo中寫的是適用于所有平臺均發送同一分享內容的方法。如果需要針對不同平臺分享不同內容的話需要調用另外一個方法,如下)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,517評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,087評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,521評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,493評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,207評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,603評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,624評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,813評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,364評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,110評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,305評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,874評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,532評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,953評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,209評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,033評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,268評論 2 375

推薦閱讀更多精彩內容