سلام و وقت بخیر خدمت استاد گرامی
بنده در بکند پروژه که با webapi زده شده ، تنظیمات مربوط به cors انجام شده
اما هنگام اجرای برنامه از Android Studio نمیتونه api هارو بگیره و چیزی نمایش داده نمیشه
مشکل Allow-Origin در سمت بکند که درسته ، در interceptor کلاینت هم کامل کردم
متن ارروری که دریافت میکنم
Capacitor http://localhost/vendor-es2015.js - Msg: ERROR [object Object]…
آیا در فایل Capacitor.config.json نیاز داریم به
"server": {
"hostname": "example.com",
"androidScheme": "https"
}
تا بتونه api هارو دریافت کنه ؟؟
ممنون میشم راهنمایی کنید
سلام دوست من
در interceptor به این صورت عمل کنین :
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return from(Plugins.Storage.get({key: 'zoomlan-cookie'})).pipe(map((token: { value: string }) => {
if (token !== null && token.value !== null) {
return req.clone({
url: DomainName + req.url,
headers: req.headers
.append('Access-Control-Allow-Origin', '*')
.append('Access-Control-Allow-Methods', ['POST', 'GET', 'OPTIONS', 'DELETE', 'PUT'])
.append('Access-Control-Allow-Headers',
['append', 'delete', 'entries', 'foreach', 'get', 'has', 'keys', 'set', 'values', 'Authorization'])
.append('accept-language', 'en-US,en;q=0.9,fa;q=0.8')
.append('Authorization', 'Bearer ' + token.value),
withCredentials: false
});
} else {
return req.clone({
url: DomainName + req.url,
headers: req.headers
.append('Access-Control-Allow-Origin', '*')
.append('Access-Control-Allow-Methods', ['POST', 'GET', 'OPTIONS', 'DELETE', 'PUT'])
.append('Access-Control-Allow-Headers',
['append', 'delete', 'entries', 'foreach', 'get', 'has', 'keys', 'set', 'values', 'Authorization'])
.append('accept-language', 'en-US,en;q=0.9,fa;q=0.8'),
withCredentials: false
});
}
}), switchMap((request: HttpRequest<any>) => {
return next.handle(request);
}));
}
سلام مجدد ، بسیار ممنون از وقتی که گذاشتید
با وجود کد های شما ، اگر بازم در فایل Capacitor.config.json تنظیمات ذکر شده رو اعمال نکنم ارور
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
دریافت میکنم به همراه ارور (همراه همیشگی بنده) :
E/Capacitor/Console: File: https://demo2.mkhalesi.ir/vendor-es2015.js - Line 41296 - Msg: ERROR [object Object]
بنده ورژن Capacitor رو به 3 تغییر دادم و از اون طرف از اندروید به "^3.0.0-rc.0", طبق این راهنما :
"@angular/common": "~10.0.0",
"@angular/core": "~10.0.0",
"@angular/forms": "~10.0.0",
"@angular/platform-browser": "~10.0.0",
"@angular/platform-browser-dynamic": "~10.0.0",
"@angular/router": "~10.0.0",
"@capacitor/android": "^3.0.0-rc.0",
"@capacitor/core": "^3.0.0-rc.0",
"@capacitor/geolocation": "^0.4.3",
"@capacitor/network": "^0.4.6",
"@capacitor/splash-screen": "^0.3.6",
"@capacitor/status-bar": "^0.4.6",
"@capacitor/storage": "^0.3.6",
"@ionic-native/core": "^5.0.0",
"@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/status-bar": "^5.0.0",
"@ionic/angular": "^5.0.0",
شانس آخر : آیا امکان داره مربوط به Api های اندروید یا ورژن Gradle و یا دسترسی به اینترنت باشه ؟
ممنون میشم راهنمایی کنید
این نکته رو باید در نظر داشته باشین که api شما باید حتما publish شده باشه و روی server تست کنین
زمانی که پروژه با emulator اجرا بشه گاها با این خطاها مواجه میشه
api رو پابلیش کنین و بعد از پروژه خروجی apk بگیرین و در نهایت روی تلفن همراه نصب کنین
با این روش میتونین پروژه رو کامل تست کنین
سلام ، وقت بخیر استاد
متاسفانه بعد از پابلیش و نصب اون باز هم با یه صفحه blank خالی مواجه میشم . که نمیتونه دیتا رو نمایش بده .
capacitor به درستی کار میکنه حتی چک کردن network کاربر ، Status bar و ...
E/Capacitor/Console: File: https://demo2.mkhalesi.ir/vendor.js - Line 59725 - Msg: ERROR [object Object]
E/.IonicFramewor: Invalid ID 0x00000000.
Invalid ID 0x00000000.
سپاس از پاسخ گویی شما استاد عزیز
سلام مجدد ،
استاد امکان داره به خاطر استفاده نادرست از یکی از plugin های capacitor در برنامه باشه این اررور ؟
چون چیز درستی نمایش داده نمیشه ، متن اررور اصلا واضح نیست که مربوط به چی هست
من permission های مربوط به پلاگین هارو درست قرار میدم ،
api های مربوط به cap v3 درسته در Android studio
ممنون میشم راهنمایی کنید
این خطا وقت خیلی زیادی از من گرفته متاسفانه
این مشکل ممکنه به هر دلیلی باشه دوست من
به این سادگی نمیشه گفت مشکل از کجا هستش
باید کامل بررسی بشه
فرایند خروجی گرفتن رو از اموزش ایونیک به صورت کامل و قدم به قدم مطالعه کنین احتمالا مشکل برطرف میشه
این بخش رو به AddAuthentication اضافه کنین :
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidateIssuer = false,
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("thisisasecreteforauth")),
ValidateLifetime = true,
ClockSkew = TimeSpan.FromMinutes(43200)
};
});
و همینطور باید CORS رو هم فعال کنین :
services.AddCors(
options =>
{
options.AddPolicy(
"BarnamenevisanInfoCORS",
builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
.SetPreflightMaxAge(TimeSpan.FromSeconds(43200))
);
});
در بخش Middleware ها هم باید این سرویس ها رو اضافه کنین:
app.UseCors("BarnamenevisanInfoCORS");
با سلام و عرض ادب
استاد کد های مربوط به cors چه در سمت سرور و چه در کلاینت به درستی طبق راهنمایی شما اضافه شدند .
در بکند مشکلی وجود نداره چون همین الان هم روی سرور پابلیش شده و داره میکنه (سایت اون که با angular هست)
در فایل Capacitor.config.json تنظیمات مربوط به server رو در چه صورتی اضافه کنم،
طبق این راهنمایی
----
اگه تنظیمات مربوط به server در capacitor.config انجام بشه ، دیگه این ارور نیست !
E/Capacitor/Console: File: http://localhost/home/main - Line 0 - Msg: Access to XMLHttpRequest at 'https://example.com/homepage/get-home-page-images-by-location/4' from origin 'http://localhost' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
ممنون از وقتی که می گذارید