电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android 集成 google 登錄并獲取性別等隱私信息的實(shí)現(xiàn)代碼

瀏覽:97日期:2022-09-23 17:02:45

前言

公司做海外產(chǎn)品的,集成的是 google 賬號(hào)登錄,賬號(hào)信息、郵箱等這些不涉及隱私的按 google 的正常登錄流程可以輕松實(shí)現(xiàn) 。但是一旦需要獲取涉及隱私的信息就比較麻煩,文檔也不是十分清晰,非常難找,很多坑。

google 賬號(hào)登錄

官方鏈接:https://developers.google.com/identity/sign-in/android/starthttps://developers.google.com/identity/sign-in/android/sign-ingoogle 賬號(hào)登錄接入的坑:

申請(qǐng)的 client_id必須是 api console 后臺(tái) :https://console.cloud.google.com/apis 與 google play 后臺(tái)對(duì)應(yīng)的應(yīng)用關(guān)聯(lián)起來(lái)。 client_id 下的簽名信息和報(bào)名信息必須和測(cè)試時(shí)的 apk 的簽名信息和報(bào)名信息一致。 在 google play 下啟動(dòng) google 的二次簽名,則 api console 后臺(tái)的簽名信息是二次簽名后的信息。打包測(cè)試時(shí)使用上傳 到 Google play 后臺(tái)的 apk 的簽名證書(shū)即可。

google 登錄的流程在這個(gè)文檔寫(xiě)的比較清楚了:https://developers.google.com/identity/sign-in/android/sign-in,這里大致說(shuō)一下,不貼代碼了

構(gòu)建需求請(qǐng)求的內(nèi)容:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken('your client_id') .build();// Build a GoogleSignInClient with the options specified by gso.mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

2.發(fā)起登錄請(qǐng)求,跳轉(zhuǎn) google 登錄頁(yè)面。

Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN);

獲取 Google 登錄返回

@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { // The Task returned from this call is always completed, no need to attach // a listener. Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); }}

獲取 用戶 id token,傳到你自己的 服務(wù)端 做驗(yàn)證

private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); // Signed in successfully, show authenticated UI. } catch (ApiException e) { // The ApiException status code indicates the detailed failure reason. // Please refer to the GoogleSignInStatusCodes class reference for more information. Log.w(TAG, 'signInResult:failed code=' + e.getStatusCode()); }}

切換賬號(hào)

/** * 重新獲取賬號(hào)列表 */ public void revokeAccess() { try { if (mGoogleSignInClient!=null && mActivity!=null){ mGoogleSignInClient.revokeAccess().addOnCompleteListener(mActivity, new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { Log.d(TAG, 'onComplete: '); } }); } } catch (Exception e){ e.printStackTrace(); } }

獲取公開(kāi)資料和需要特別授權(quán)的信息(性別、生日等)

1、在構(gòu)建請(qǐng)求是新增獲取 的公共資料信息 及 需要獲取的特殊信息

private static final String GENDER_SCOPE = 'https://www.googleapis.com/auth/user.gender.read';GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken('your client_id') .requestScopes(new Scope(GENDER_SCOPE)); .build();// Build a GoogleSignInClient with the options specified by gso.mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

需要請(qǐng)求的信息可在如下鏈接查找:https://developers.google.com/people/api/rest/v1/people/get

2、檢測(cè)是否有權(quán)限

GoogleSignInAccount lastSignedInAccount = GoogleSignIn.getLastSignedInAccount(mActivity); Scope scope = new Scope(GENDER_SCOPE); if (Utils.isNeedRequest() && !GoogleSignIn.hasPermissions(lastSignedInAccount,scope)){ SGLog.d(TAG+' need requst permission...'); GoogleSignIn.requestPermissions(mActivity,RC_GET_TOKEN,lastSignedInAccount,scope); }

注意:這一步不需要也可以,有這一步會(huì)出現(xiàn)一個(gè) “再確認(rèn)” 的授權(quán)頁(yè)面,沒(méi)有也不影響獲取的信息。3、跳轉(zhuǎn)登錄頁(yè)面 (同以上 google 賬號(hào)登錄)4、獲取登錄信息 (同以上 Google賬號(hào)登錄)5、開(kāi)啟線程獲取 特殊信息

getProfileAsyncTask = new GetProfileAsyncTask(mActivity, new GpProfileInfoCallback() { @Override public void onGetProfileInfo(Person person) { SGLog.d(TAG+' onGetProfileInfo... '); getProfileInfo(person); } }); getProfileAsyncTask.execute(signInAccount);

異步任務(wù)

// Global instance of the HTTP transport private static final HttpTransport HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport(); // Global instance of the JSON factory private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); private static class GetProfileAsyncTask extends AsyncTask<GoogleSignInAccount, Void, Person> { // Retrieved from the sigin result of an authorized GoogleSignIn private WeakReference<Activity> mActivityRef; private GpProfileInfoCallback mProfileInfoCallback; public GetProfileAsyncTask(Activity activity,GpProfileInfoCallback callback) { mActivityRef = new WeakReference<>(activity); mProfileInfoCallback = callback; } @Override protected Person doInBackground(GoogleSignInAccount... params) { if (mActivityRef.get() == null){ SGLog.d(TAG+' GetProfileAsyncTask doInBackground activity is null.'); return null; } GoogleSignInAccount signInAccount = params[0]; Context context = mActivityRef.get().getApplicationContext(); GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2( context, Collections.singleton(GENDER_SCOPE)); credential.setSelectedAccount(signInAccount.getAccount()); SGLog.d(TAG+' get profile info start.'); PeopleService service = new PeopleService.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) .setApplicationName(ApkUtils.getAppName(context)) // your app name .build(); SGLog.d(TAG+' get profile info start.'); // Get info. on user Person person =null; try { person = service .people() .get('people/me') .setPersonFields('genders') .execute(); SGLog.d(TAG+' getPerson end.'); // return the result if (mProfileInfoCallback!=null){ mProfileInfoCallback.onGetProfileInfo(person); } } catch (Exception e) { SGLog.e(TAG+e.getMessage()); if (mProfileInfoCallback!=null){ mProfileInfoCallback.onGetProfileInfo(null); } e.printStackTrace(); } return person; } @Override protected void onPostExecute(Person aVoid) { super.onPostExecute(aVoid); } }

獲取性別信息

private void getProfileInfo(Person person){ SGLog.d(TAG+' executeProfileInfo...'); if (person == null){ notifyResult(mLastUser,Utils.SUCCESS); }else { try { List<Gender> genders = person.getGenders(); Gender gender = genders.get(0); String value = gender.getValue(); SGLog.d(TAG+' genders:'+genders.size()+ ' gender:'+value); mLastUser.setGender(value); notifyResult(mLastUser,Utils.SUCCESS); }catch (Exception e){ SGLog.e(TAG+' getProfileInfo error.'); notifyResult(null,SGErrorCode.LOGIN_FAILED); e.printStackTrace(); } } }

參考文獻(xiàn):

https://developers.google.com/identity/sign-in/android/sign-inhttps://developers.google.cn/android/guides/http-authhttps://developers.google.com/people/api/rest/?apix=truehttps://github.com/googlesamples/google-services/tree/master/android/signinhttps://developers.google.com/people/api/rest/v1/people/get

總結(jié)

到此這篇關(guān)于Android 集成 google 登錄并獲取 性別等隱私信息的文章就介紹到這了,更多相關(guān)Android 集成 google 登錄并獲取 性別等隱私信息內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | 丝杆升降机-不锈钢丝杆升降机-非标定制丝杆升降机厂家-山东鑫光减速机有限公司 | 艺术生文化课培训|艺术生文化课辅导冲刺-济南启迪学校 | 数控走心机-走心机价格-双主轴走心机-宝宇百科 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 早报网| 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 车件|铜件|车削件|车床加工|五金冲压件-PIN针,精密车件定制专业厂商【东莞品晔】 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 棉服定制/厂家/公司_棉袄订做/价格/费用-北京圣达信棉服 | 江苏皓越真空设备有限公司| 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | TPE塑胶原料-PPA|杜邦pom工程塑料、PPSU|PCTG材料、PC/PBT价格-悦诚塑胶 | 安徽成考网-安徽成人高考网| 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 论文查重_免费论文查重_知网学术不端论文查重检测系统入口_论文查重软件 | 鑫铭东办公家具一站式定制采购-深圳办公家具厂家直销 | 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 照相馆预约系统,微信公众号摄影门店系统,影楼管理软件-盟百网络 | 加盟店-品牌招商加盟-创业项目商机平台 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 软启动器-上海能曼电气有限公司| 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 东莞精密模具加工,精密连接器模具零件,自動機零件,冶工具加工-益久精密 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 芜湖厨房设备_芜湖商用厨具_芜湖厨具设备-芜湖鑫环厨具有限公司 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 美国查特CHART MVE液氮罐_查特杜瓦瓶_制造全球品质液氮罐 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] |