1. 程式人生 > >分享到微信的訊息跳轉到第三方APP

分享到微信的訊息跳轉到第三方APP

最近有個需求,要使分享到微信的內容點選直接跳轉到我們自己的APP,實現邀請的目的。
如果分享出去一個HTML5頁面,然後其他人在微信中點選,由於微信遮蔽了第三方APP的跳轉,所以如果在HTML5中使用urlscheme://這種格式進行跳轉是行不通(這種方式在safari中是能夠跳轉到第三方APP的),這種情況下可以在頁面中提示使用者在瀏覽器中重新開啟。
其實也可以通過另一種方式,分享出去的時候用WXAppExtendObject這種擴充套件物件,這樣分享到微信中訊息左上角或者右上角會帶有一個小箭頭標誌,這種型別的資料點選是可以直接跳轉到第三方APP並帶有資料返回。
下面就說說具體怎麼做。
    SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
        req.scene = scene;
        req.bText = NO;
        WXMediaMessage *message
= [WXMediaMessage message]; message.title = xxx; message.description = xxx; message.thumbData = xxx;
先初始化傳送訊息的結構體SendMessageToWXReq,再新建其多媒體訊息WXMediaMessage
WXAppExtendObject *object = [WXAppExtendObject object];
            object.url = self.extendUrl;
            object
.extInfo = @"<xml>extend info</xml>"; //fileData必須得賦值使得能從微信直接跳轉到我們app Byte* pBuffer = (Byte *)malloc(1024); memset(pBuffer, 0, 1024); NSData* data = [NSData dataWithBytes:pBuffer length:1024]; free(pBuffer); object.fileData = data; message.mediaObject = object
;
關鍵是生成WXAppExtendObject物件,我把需要的資訊放在object.url中,這樣在點選跳轉進我們客戶端的時候就從中取出資料處理。我試了一下,如果不傳fileData,分享出去的訊息是不會帶有小箭頭標誌,也就不會點選跳轉第三方APP的。所以這裡傳了1KB的資料。
點選跳轉客戶端的時候,需要在- (void)onReq:(BaseReq *)req代理方法中處理回撥資料。
這裡一開始遇到一個問題,跳轉進客戶端的時候,在XCode控制檯打斷點檢視資料,不管是NSArray還是NSString,都只展示了其物件資訊,即看到isa指標和物件地址,但看不到具體值,這一度讓我以為這個回撥方法帶不回來回撥引數。其實需要將物件右鍵Print或者直接使用po命令可以檢視到具體值多少。
具體處理如下:
- (void)onReq:(BaseReq *)req
{
    if([req isKindOfClass:[ShowMessageFromWXReq class]]){
        ShowMessageFromWXReq *retMsg = (ShowMessageFromWXReq *)req;
        WXMediaMessage *message = retMsg.message;
        WXAppExtendObject *object = message.mediaObject;
        NSString *url = object.url;
        [self handleInviteUrl:[NSURL URLWithString:url]];
    }
}
這樣就完成了分享到微信-微信內點選跳轉進客戶端-根據資料進行具體處理。