最近有个需求,要使分享到微信的内容点击直接跳转到我们自己的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>";
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]];
}
}
这样就完成了分享到微信-微信内点击跳转进客户端-根据数据进行具体处理。