摘要:故事的經(jīng)過是這樣的有一天,產(chǎn)品同學(xué)突發(fā)奇想,他想獲取到下單用戶的地理位置分布,以便來統(tǒng)計(jì)用戶群的分布,進(jìn)而為后期的按地區(qū)精確推廣活動(dòng)來做準(zhǔn)備。
大家好,我是冰茶,容我開場(chǎng)先講個(gè)故事。
故事的經(jīng)過是這樣的:
有一天,產(chǎn)品同學(xué)突發(fā)奇想,他想獲取到下單用戶的地理位置分布,以便來統(tǒng)計(jì)用戶群的分布,進(jìn)而為后期的按地區(qū)精確推廣活動(dòng)來做準(zhǔn)備。
me:這個(gè)簡(jiǎn)單啊,下單的時(shí)候,給個(gè)地理定位的請(qǐng)求,來獲取用戶所在位置就行啊,這樣的話還準(zhǔn)確......
產(chǎn)品兄:這個(gè)方案需要考慮下,如果要是請(qǐng)求用戶的定位信息,首先呢,可能會(huì)引起用戶的反感,畢竟咱們這個(gè)產(chǎn)品,從頭到尾都沒有用到過定位,突然啪的一下來個(gè)彈窗,用戶肯定一是蒙逼,說你從頭到尾都沒有定位功能,要個(gè)定位權(quán)限有毛用,二是隱私意識(shí)強(qiáng)點(diǎn),就直接拒絕掉了,這樣直接就拿不到信息,無法達(dá)到預(yù)設(shè)的效果了。其次呢,咱們能少打擾用戶,就少打擾用戶,有句話說,悄悄地進(jìn)村,打槍的不要。就是說呢,讓用戶流暢的使用下來整個(gè)流程,讓用戶用的爽,一直是咱們的原則......
產(chǎn)品兄:我聽說有個(gè)IP定位,這東西蠻爽的,也不打擾用戶,再說IP這個(gè)東西,只要用戶訪問我們的服務(wù),絕對(duì)有這個(gè)東西能拿到,我們就拿他這個(gè)東西來反查下,這樣咱們要的省市信息就這樣到手了,而且這樣的成功幾率高,不用擔(dān)心用戶拒絕定位導(dǎo)致數(shù)據(jù)統(tǒng)計(jì)不全......
后端同學(xué):IP這個(gè)東西的確可以,但是呢,我們的服務(wù)都在負(fù)載均衡/反向代理服務(wù)后面,后端直接拿到的IP也是前端服務(wù)器的IP,而不是用戶直連我們前端服務(wù)器的IP,所以這個(gè)東西難辦啊~
后端同學(xué):想當(dāng)初我們的項(xiàng)目還不是前后端分離的時(shí)候,的確是可以直接拿到IP的......
另外的前端同學(xué):嗯,我這邊也了解一些,我之前看到有前端獲取IP的方法:
//創(chuàng)建RTCPeerConnection接口 let conn = new RTCPeerConnection({ iceServers: [] }) let noop = function(){} conn.onicecandidate = function(ice){ if (ice.candidate){ //使用正則獲取ip let ip_regex = /([0-9]{1,3}(.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/ let ip_addr = ip_regex.exec(ice.candidate.candidate)[1]; console.log(ip_addr) conn.onicecandidate = noop } } //隨便創(chuàng)建一個(gè)叫狗的通道(channel) conn.createDataChannel("dog") //創(chuàng)建一個(gè)SDP協(xié)議請(qǐng)求 conn.createOffer(conn.setLocalDescription.bind(conn),noop) 作者:Illgo 鏈接:https://www.zhihu.com/question/20675353/answer/335325619 來源:知乎 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
之后用 WebRTC獲取IP 等關(guān)鍵詞找了幾篇類似的文章。這個(gè)比較全面。
獲取訪問者內(nèi)網(wǎng)IP
根據(jù)類似的文章,親自試驗(yàn)了下,有兩個(gè)問題:
我們有微信站的業(yè)務(wù),在微信環(huán)境下獲取不到IP。這個(gè)方法在Chrome和Firefox下面很好用。
獲取的是用戶的內(nèi)網(wǎng)IP,用拿到的IP去反查,得到的結(jié)論是局域網(wǎng)地址。
這還查個(gè)毛線的查,于是......這個(gè)方案被放棄了......
me:在Google找了一些方案,大多數(shù)方案都是通過前端調(diào)取一個(gè)接口,接口返回地理定位等信息。和后端同學(xué)說的一致,只要用戶發(fā)請(qǐng)求,服務(wù)器能直接拿到用戶網(wǎng)絡(luò)出口的IP信息,然后咱們就調(diào)接口查一下就可以了。關(guān)于后端接口拿不到IP的問題,微信支付這邊有類似的解決方案。
備注:獲取用戶IP指引
me:咱們服務(wù)器相當(dāng)于在代理后面,只要找運(yùn)維去配置下,應(yīng)該就可以了。
后端同學(xué):這個(gè)可以考慮,稍后我這邊和運(yùn)維聯(lián)系下,讓他們那邊配置下,把用戶請(qǐng)求代理服務(wù)器獲取到的IP傳遞給我這邊,這樣就可以了。
于是問題解決,大功告成~
開玩笑,要真是這樣的話,這篇文章就不會(huì)出現(xiàn)了
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96423.html
摘要:如果應(yīng)用程序不再需要接受有關(guān)用戶的持續(xù)位置更新,則只需調(diào)用函數(shù),如下所示表示一個(gè)唯一的監(jiān)視請(qǐng)求以便將來取消監(jiān)視。 GeolocationAPI學(xué)習(xí),我寫的挺枯燥的,直接跳到最后看示例。 5.1 位置信息 HTML5 Geolocation API的使用方法相當(dāng)簡(jiǎn)單。請(qǐng)求一個(gè)位置信息,如果用戶同意,瀏覽器就會(huì)返回位置信息,該位置信息是通過支持HTML5地理定位功能的底層設(shè)備(手機(jī)、筆記本...
摘要:二目的是一個(gè)經(jīng)策略性部署的整體系統(tǒng),從技術(shù)上全面解決由于網(wǎng)絡(luò)帶寬小用戶訪問量大網(wǎng)點(diǎn)分布不均而產(chǎn)生的用戶訪問網(wǎng)站響應(yīng)速度慢的根本原因。 一、CDN全稱:??Content Delivery Network或Content Ddistribute Network,即內(nèi)容分發(fā)網(wǎng)絡(luò)。 ??二、目的:??CDN是一個(gè)經(jīng)策略性部署的整體系統(tǒng),從技術(shù)上全面解決由于網(wǎng)絡(luò)帶寬小、用戶訪問量大、網(wǎng)點(diǎn)分布不...
閱讀 1524·2021-11-24 11:16
閱讀 2753·2021-07-28 12:32
閱讀 2336·2019-08-30 11:22
閱讀 1471·2019-08-30 11:01
閱讀 629·2019-08-29 16:24
閱讀 3585·2019-08-29 12:52
閱讀 1654·2019-08-29 12:15
閱讀 1364·2019-08-29 11:18