آندروید



روشای قبلی که سر جاشه که تو App.class زبان رو عوض میکردیم فقط باید یه بیس برای همه اکتیویتیا بسازیم این متد م اوراید کنیم که دیگه 5 به بالام rtl‌کار کنه

@Override
protected void attachBaseContext(Context newBase) {
Context context = Language.wrap(newBase);
super.attachBaseContext(context);
}


public static ContextWrapper wrap(Context context) {


Locale newLocale = new Locale(Social.getInstance(context).getLanguage());

Resources res = context.getResources();
Configuration configuration = res.getConfiguration();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
configuration.setLocale(newLocale);

LocaleList localeList = new LocaleList(newLocale);
LocaleList.setDefault(localeList);
configuration.setLocales(localeList);

context = context.createConfigurationContext(configuration);

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(newLocale);
context = context.createConfigurationContext(configuration);

} else {
configuration.locale = newLocale;
res.updateConfiguration(configuration, res.getDisplayMetrics());
}

return new ContextWrapper(context);
}

1 - create an app on firebase console and download json


2 - goto google developer console


2.1 IMPORTANT : you must compelete and save Oauth Content Screen page and add your  domain  on it. 
      - add your domain on :Authorized domains" segment
     - fill your website address (same domain) on "Application Homepage link" and "Application Privacy Policy link" segment.
     - click on "save" butoon



3 - on "OAuth 2.0 client IDs" copy Client Id of "Web client (Auto-created for Google Sign-in)" and past to yoy androd signin via google app when call following codes (Android side) :

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(CLIENT_ID_HERE)
.requestEmail()
.requestServerAuthCode(CLIENT_ID_HERE)
.requestScopes(new Scope(Scopes.PROFILE) , new Scope(Scopes.EMAIL))
.build();

4 - copy the the same CLIENT_ID on server side authentication request , too :
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
// Specify the CLIENT_ID of the app that accesses the backend:
.setAudience(Collections.singletonList(CLIENT_ID_HERE)
// Or, if multiple clients access the backend:
//.setAudience(Arrays.asList(CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3))
.build();
5 - importand : on some countries oauth service of google is blicked. so for test on back-end side (on .verify() method) turn on your
 

problem :
on android side i try to get idToken by following GoogleSingInOptions :

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(ANDROID_CLIENT_ID)
.build();


but on backed side, when i call the this code, the payload.getEmail() return null:
GoogleIdToken.Payload payload = idToken.getPayload();
String email = payload.getEmail();


SOLUTION :
the solution hide in Android side.I must request email or profile scope on google sig in options.So, on GoogleSignInOptions mus be change by following codes :
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(ANDROID_CLIENT_ID)
.requestEmail()
.requestServerAuthCode(ANDROID_CLIENT_ID)
.requestScopes(new Scope(Scopes.PROFILE))
.build();


کاتلین خر ترین زبان برنامه نویس است که گوگل به من فهماند میتوان در عین باهوش بودم دست به احمقانه ترین تصیمیم زد و کاتلین رو ساپورت کرد. شرکتها هم بز بز قندی و احمقانه فکر کردن کاتلین خداس مخصوصا وقتی MVVM هم تقریبا با معرفی کاتلین تو اندروی ساپورت شد خلی از احمق های برنامه نویس فکر میکنن خیلی از خصوصیت های mvvm فثچرای کانلینه !!! 

چرا حالا من انقد شاکیم و هر چی بیشتر کاتلین یاد میگیرم بیشتر از حالم از کاتلین بهم میخوره

چون فیچراش بیشتر خار کدو میگاد تا مفید باشه
چون سادگی و انعطاف پذیری جاوا و سی رو نداره
چون خار ریدیبیلیتی کدو میگاد
چون یه روز از زندگیم رفت بابات این خط کد:
if (container1.value!!.sizeId == null || container1.value!!.typeId == null) {
Log.e("SIZ" , "******************** sized & type is null ***************************")
}
// if remove this code on kotline, you will be error from server. 
// because the sizeId and typeId didn't convert to jason and sent to server (On APK Release mode)
مشکل چی بود : یه ای پی آی زدیم. تو حالت دیباگ همه چیش عالی کار میکرد مام خوشحال و خندان ریلیز گرفتیم فرستادیم بچه ها یه تست کنن تو لالوهای خوشحالیمون بودیم که بچه ها گفتن کسخل برنامت باگ داره. هرچی من تست میکردم میگفتم باگ نداره طرف میگفت باگ داره. خلاصه فهمیدیم تو حالت ریلیز که ای پی کا رو کامپایل میکنیم یه سری فیلدا تبدیل به جیسون نمیشه. فیلد سایز آیدی و تایپ آیدی تو حالت ریلیز که مینیفای هم فعال بود اصلا به جیسون کانورت نمیشد (در حالتی که تو دیباگ کانورت انجام میشد).  رفتم کد بالا رارو لای  برنامم زدم که خیلی غیر منطقی و بی دلیل دیدم کد داره کار میکنه. 
پس نتیجه اخلاقی : کلاسای ی دیتا مدل کاتلین که خیلی کسخلای عاشق کاتلین روش مانور میدادن وقتی میخواد کامپایل بشه و ریلیز بشه، چک میکنه که تو کد آیا از اون فیلدا جایی استفاده کردی یانه . عقلشم به این نمیرسه که شاید کتابخونه جی-سون با رفلکشن بخواد با فیلدا کار کنه. نتیجه این میشه که برای اینکه فاضی رم مصرف نشه کدایی که قبال برای اون فیلد زید رو حذف میکنه خاره. و باعص میشه یه روز از جوونیم بگا برکه که این سگ پدر مثلا میخواسته کد آپتیماز زده باشه برای کاتلین ی


 تو کاتلین . زنده باد حاوا


I hate Kotlin
I Love JAVA

KOTLIn is stupest programming language . fuck to google for support fucking kotlin

آخرین ارسال ها

آخرین جستجو ها


کلمات ايده برتر پارسيان 49484797 Sandra's game نیوزسل دانلود سرا دانلود مرورگر brave | کسب درامد از مرورگر brave وبلاگ درمان purelove-75 Samsunga80
دزدگ