微信小程序跳轉(zhuǎn)iOS App時(shí),app-parameter信息的傳遞研究

問題描述

微信的小程序在跳轉(zhuǎn)App時(shí),是可用通過app-parameter來傳遞一些額外信息

<button open-type="launchApp" app-parameter="additionalInfoxxxxx" binderror="launchAppError">打開APP</button>

但我們在 AppDelegate 中的 - (BOOL)application:openURL:sourceApplication:annotation: 中打斷點(diǎn)后,可以看到,只有沒什么信息量的url和為nil的annotation:

15535935678385.jpg

url的scheme為App注冊的固定的微信scheme,annotation為nil,可見沒有任何其他消息

接下來,我們按照微信的文檔來實(shí)現(xiàn)獲取參數(shù):

BOOL result = [WXApi handleOpenURL:url delegate:[WechatSDKDelegate sharedInstance]];
// WechatSDKDelegate

- (void)onReq:(BaseReq*)req
{
    if ([req isKindOfClass:[LaunchFromWXReq class]]) {
        LaunchFromWXReq *launchReq = req;
        NSString *appParameter = launchReq.message.messageExt;
        // do sth bellow
    }
}

可以看到,在 onReq: 竟然能取到結(jié)構(gòu)很復(fù)雜的 req,而 req.message.messageExt 就是我們從小程序中傳過來的 app-parameter。那么問題來了,我們在上面可以看到,除了一個(gè)很簡短的url,沒有任何其他信息了,這個(gè) messageExt 的內(nèi)容是從哪里獲取的呢?

猜測

經(jīng)過和同事討論,猜測了幾種可能性:

  1. 可能是微信SDK發(fā)了個(gè)網(wǎng)絡(luò)請求來處理這個(gè)事情。但抓包后并沒有
  2. 微信向目標(biāo)App中的進(jìn)程做了什么事情。但iOS的保護(hù)機(jī)制應(yīng)該沒那么容易做到,起碼目前沒想到可以繞開權(quán)限的
  3. App間進(jìn)行socket通信,但考慮到需要起服務(wù)、?;畹纫蛩馗杏X也不是太可能

調(diào)查

沒辦法了,只能去調(diào)查下SDK的靜態(tài)庫了,用Hopper打開后,看了幾個(gè)類的方法后,終于找到了一個(gè)方法感覺很像,并且給人豁然開朗的感覺。

15535958910573.jpg

就是這個(gè) [WXOMTAOpenUDID _getDictFromPasteboard:] 方法!

有意思,猜測可以通過剪切板將需要的信息傳遞過來,在App中獲取后再做好處理就OK了。那么,接下來就是驗(yàn)證了。

我將 app-parameter 中線傳數(shù)據(jù)A兩次,然后傳一次數(shù)據(jù)B,最后再傳一次A,然后我在App中可以從剪切板中獲取到以下的數(shù)據(jù):

15535967774203.jpg

可以看出,第 1、2、4的剪切板數(shù)據(jù)是一樣的,第3次不一樣。這里就可以猜測出來的確是用的剪切板了??

下面將數(shù)據(jù)轉(zhuǎn)換一下:

15535965424547.jpg

被圈出來的地方就是我之前小程序中 app-parameter 中傳過來的值。

OK,破案。

?著作權(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ā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

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

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