# App获取开放标签<wx-open-launch-app>中的extinfo数据

# 说明

本文档主要介绍微信内H5页面通过用户点击微信开放标签<wx-open-launch-app>跳转App,App侧获取该开放标签中extinfo字段的方式。

# 接入微信OpenSDK

若需要获取唤起App时携带的数据,App首先需要接入微信OpenSDK。

!!!注意: 本文档中所指的AppID均是指接入OpenSDK时申请的App的AppID, 非开放标签中的AppID

微信OpenSDK的相关文档: iOS:

Android:

# App侧获取开放标签传递的extinfo数据

请确保已经按照上述步骤接入OpenSDK并验证成功接入

# iOS示例代码

重写AppDelegate.m或SceneDelegate的相关方法(参考上述步骤中的接入文档):

//AppDelegate.m
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{
    //开启SDK Log
    [WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) {
        NSLog(@"WeChatSDK: %@", log);
    }];
    
    // 在调用WXApi的handle方法前,须先调用registerApp注册。ret为注册结果,若注册失败,请根据sdk的log排查原因
    BOOL ret = [WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK];
    
    if ([WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]]) {
        /// handled by OpenSDK
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler
{
    //开启SDK Log
    [WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) {
        NSLog(@"WeChatSDK: %@", log);
    }];
    
    // 在调用WXApi的handle方法前,须先调用registerApp注册。ret为注册结果,若注册失败,请根据sdk的log排查原因
    BOOL ret = [WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK];
    if ([WXApi handleOpenUniversalLink:userActivity delegate:[WXApiManager sharedManager]) {
        /// handled by OpenSDK
    }
    return YES;
}

重写WXApiDelegate的onReq方法:


/*! @brief 收到一个来自微信的请求,第三方应用程序处理完后调用sendResp向微信发送结果
 *
 * 收到一个来自微信的请求,异步处理完成后必须调用sendResp发送处理结果给微信。
 * 可能收到的请求有GetMessageFromWXReq、ShowMessageFromWXReq等。
 * @param req 具体请求内容,是自动释放的
 */
- (void)onReq:(BaseReq*)req 
{
    //获取开放标签传递的extinfo数据逻辑
	if ([req isKindOfClass:[LaunchFromWXReq class]]) 
	{
		WXMediaMessage *msg = req.message;
		NSString *openID = req.openID;
		NSString *extinfo = req.msg.messageExt;
		// handle...
	}
}

# Android 示例代码

重新IWXAPIEventHandler的OnReq方法获取extInfo

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{
    private IWXAPI api;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //初始化和注册
        IWXAPI api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);
        Intent intent = getIntent();
        api.handleIntent(intent, this)
	}
	
    @Override
    protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		api.handleIntent(intent, this);
	}
	
	/**
	 * 从微信启动App
	 * @param req
	 */
	@Override
	public void onReq(BaseReq req) {
	   //获取开放标签传递的extinfo数据逻辑
		if(req.getType() == ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX && req instanceof ShowMessageFromWX.Req) {
			ShowMessageFromWX.Req showReq = (ShowMessageFromWX.Req) req;
			WXMediaMessage mediaMsg = showReq.message;
			String extInfo = mediaMsg.messageExt;
			//Handle...
		}
    }
    
    @Override
	public void onResp(BaseResp resp) {
	}
}