uni-app 打包APP端无法设置referer导致防盗链资源文件无法访问,有人遇到并知道怎么解决吗
uni-app 打包APP端无法设置referer导致防盗链资源文件无法访问,有人遇到并知道怎么解决吗
uniapp 打包app端无法设置referer问题
uniapp 打包app端,无法设置referer,导致加了防盗链的资源文件都无法访问,有人遇到怎么解决吗?
4 回复
请问有解决方案吗
请问有解决方案了吗
可以解决,有偿,红色起步,未解决不收费
在uni-app打包APP端时,如果遇到无法设置referer导致防盗链资源文件无法访问的问题,通常是因为在原生环境中,HTTP请求的referer信息不是由前端代码直接控制的,而是由底层原生环境(如iOS的WebView或Android的WebView)来管理的。以下是一个通过修改原生代码来设置referer的解决方案。
解决方案:修改原生代码设置Referer
1. iOS端解决方案
在iOS项目中,可以通过修改AppDelegate.m
或者WKWebView
的相关配置来设置Referer。以下是一个使用WKWebView
设置自定义Referer的示例:
- (WKWebViewConfiguration *)webViewConfiguration {
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
// 创建一个自定义的WKNavigationDelegate
webView.navigationDelegate = self;
// 设置自定义的referer信息
NSString *customReferer = @"https://your-referer-url.com";
NSDictionary *customHeaders = @{@"Referer": customReferer};
configuration.userContentController = [[WKUserContentController alloc] init];
WKWebViewConfiguration *newConfig = [[WKWebViewConfiguration alloc] init];
[newConfig.userContentController add(^WKNavigationActionPolicy (WKWebView *webView, WKNavigationAction *navigationAction, WKFrameInfo *frameInfo, WKWebpagePreferences *webpagePreferencesDecisionHandler) {
for (WKWebViewConfiguration *config in [webView configuration].userContentController.userScripts) {
for (NSString *key in config.additionalHTTPHeaders.allKeys) {
if ([key isEqualToString:@"Referer"]) {
navigationAction.request.allHTTPHeaderFields[@"Referer"] = customHeaders[@"Referer"];
}
}
}
decisionHandler(WKNavigationActionPolicyAllow);
return WKNavigationActionPolicyAllow;
}) forNavigationAction:WKNavigationActionPolicyDecidePolicy];
return newConfig;
}
2. Android端解决方案
在Android项目中,可以通过拦截并修改HTTP请求来设置Referer。以下是一个使用OkHttp
拦截器设置自定义Referer的示例:
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Request.Builder requestBuilder = originalRequest.newBuilder()
.header("Referer", "https://your-referer-url.com");
Request newRequest = requestBuilder.build();
return chain.proceed(newRequest);
}
})
.build();
// 使用修改后的OkHttpClient进行网络请求
注意
- 上述代码需要根据具体的项目结构和需求进行调整。
- 在修改原生代码时,请确保备份原始文件,以防出现不可预见的问题。
- 对于uni-app项目,你可能需要导出原生工程并进行上述修改,然后再重新打包。
通过这种方法,你可以在uni-app打包的APP端中设置自定义的referer信息,从而解决防盗链资源文件无法访问的问题。