iOS 微信支付疑難雜癥。

哈嘍,大家好,感謝您來閱讀我的文章,作為iOS開發(fā)者,集成各類支付是家常便飯之事,今天我來給大家推薦幾個(gè)不常見的微信支付問題。

最近,在項(xiàng)目的反饋版塊中,收到了這么一位APP用戶的反饋,他在使用我們家的APP時(shí),使用微信支付,支付完成后,賬戶信息得不到更新,需要重啟APP才能更新。從后面了解中所得知,用戶手中裝的微信APP版本號是 7.0.3的(經(jīng)過了九九八十一難,我拿到了用戶使用的手機(jī),并將其手機(jī)用于項(xiàng)目調(diào)試)。

在控制臺中,我發(fā)現(xiàn)了這么一條信息,在調(diào)取WXAPI時(shí)就會打印出來。

canOpenURL: failed for URL: "weixinULAPI://" - error:?The operation couldn’t be completed. (OSStatus error -10814.)

當(dāng)時(shí)有點(diǎn)懵逼。這個(gè)是多么熟悉,有多么可恨的報(bào)錯(cuò)。這個(gè)在剛介入微信支付時(shí)就能出現(xiàn)。只需在項(xiàng)目中把各種配置配起來,就可以消除的了,我反反復(fù)復(fù)對之前的配置進(jìn)行檢測,發(fā)現(xiàn)并沒有問題。

很是奇怪咯。~~~~

這個(gè)時(shí)候,我使用微信支付,不管成功與否,確實(shí)不會觸發(fā)回調(diào)。(在個(gè)人手機(jī)操作時(shí),流程都是正常的)

查閱了各種資料。發(fā)現(xiàn)也沒查出個(gè)所以然來。

最后我只能下手,向WXAPI文檔下手了。

/*! @brief 處理舊版微信通過URL啟動App時(shí)傳遞的數(shù)據(jù)

?*

?* 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中調(diào)用。

?* @param url微信啟動第三方應(yīng)用時(shí)傳遞過來的URL

?* @param delegate? WXApiDelegate對象,用來接收微信觸發(fā)的消息。

?* @return 成功返回YES,失敗返回NO。

?*/

+ (BOOL)handleOpenURL:(NSURL *)url delegate:(nullable id<WXApiDelegate>)delegate;

/*! @brief 處理微信通過Universal Link啟動App時(shí)傳遞的數(shù)據(jù)

?*

?* 需要在 application:continueUserActivity:restorationHandler:中調(diào)用。

?* @param userActivity微信啟動第三方應(yīng)用時(shí)系統(tǒng)API傳遞過來的userActivity

?* @param delegate? WXApiDelegate對象,用來接收微信觸發(fā)的消息。

?* @return 成功返回YES,失敗返回NO。

?*/

+ (BOOL)handleOpenUniversalLink:(NSUserActivity *)userActivity delegate:(nullable id<WXApiDelegate>)delegate;

看到以上兩個(gè)API,腦海中突然靈光一閃,關(guān)于SDK接口問題。其實(shí)這里最大的問題不是接口,而是自身微信版本問題。

在上面第一條信息中,我們可以得知。

舊版微信通過URL Schemes傳遞數(shù)據(jù)的

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{

? ? return [WXApi handleOpenURL:url delegate:self];

}

新版微信是通過UniversalLink來傳遞數(shù)據(jù)的。

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {

? ? return [WXApi handleOpenUniversalLink:userActivity delegate:self];

}

把這兩個(gè)接口適配好。就可以收到微信回調(diào)的。

即使能收到微信回調(diào)。但是控制臺中還是會繼續(xù)打印出?canOpenURL: failed for URL: "weixinULAPI://" - error:?The operation couldn’t be completed. (OSStatus error -10814.) 從功能上暫時(shí)沒有發(fā)現(xiàn)什么異常。

個(gè)人分析,可能是高版本的SDK調(diào)用低版本的微信時(shí),由于內(nèi)部兼容所導(dǎo)致的。并不影響使用。

如何有道友知道是什么原因所導(dǎo)致的??梢栽谙路皆u論區(qū)中留言。

隨便提一下:在iOS13 開始會出現(xiàn)這么一個(gè)文件SceneDelegate(Xcode11開始,創(chuàng)建項(xiàng)目時(shí),會把之前的APPdelegate給細(xì)分化)。

在有這種項(xiàng)目文件的項(xiàng)目中,UniversalLink 和?URL Schemes 回調(diào)都會在這個(gè)文件API方法中回調(diào)。

iOS 13?UniversalLink 回調(diào)方法。

- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity API_AVAILABLE(ios(13.0)){

}

iOS 13 ?URL Schemes

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts API_AVAILABLE(ios(13.0)){

}


隨手記錄,不喜勿噴。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容