分享到微信的訊息跳轉到第三方APP
阿新 • • 發佈:2019-02-18
最近有個需求,要使分享到微信的內容點選直接跳轉到我們自己的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]];
}
}
這樣就完成了分享到微信-微信內點選跳轉進客戶端-根據資料進行具體處理。