哈嘍,大家好,感謝您來閱讀我的文章,作為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)){
}
隨手記錄,不喜勿噴。