2014-01-26 26 views
8

例子:策略快速IOS聯繫人 「朋友查找」

  • Snapchat - 添加好友(從手機通訊錄)
  • Twitter的 - 找朋友(來自手機通訊錄)

我沒有從IOS設備聯繫人中提取姓名,電話號碼,電子郵件地址時出現問題。我一直在嘗試不同的方法和策略:

  • 上傳接觸到網絡服務器
  • 使用的電話號碼和(不必存儲副本)
  • 返回一個列表的電子郵件地址進行比較與服務器數據庫列表的聯繫人誰也是用戶,誰不是

我的嘗試大約需要30-45秒的500個聯繫人。對於snapchat或twitter來說,同一組聯繫人大概需要2-5秒。

他們的祕密是什麼?好的obj-c編碼?好的數據庫設計?我明白,他們會有高效的主機堆棧,但我並不期待那種時差。

是更好地:

  1. 嘗試所有聯繫人的批量上傳,並與命中和遺漏返回一個JSON字符串。
  2. 每個HTTP請求?
  3. 打開某種類似websocket的持久連接來檢查每個聯繫人?
  4. 其他一些明顯的策略或方法我還沒有考慮過呢?
+0

你好,你會演示解決方案的聯繫人列表?我的解決方案需要很長時間。 –

回答

2

我認爲關鍵是通過利用單一聯繫人信息進行搜索而不是使用姓名,號碼和電子郵件地址來縮小請求的範圍。如果您的服務需要其中任何一個部分進行註冊,例如電話號碼,請使用電話號碼。當你從你的服務器返回信息時,不要發送任何你不需要的東西,比如你找不到匹配的電話號碼。其次,如果你有技術訣竅,你的選項#3不是一個壞主意。我推薦一個名爲SocketRocket的圖書館。它是由製作Square的人開發的,並且使得在您的前端實現websockets非常容易。

我不能說話給你的後端,但我使用node.js和這個包:https://github.com/einaros/ws非常容易安裝(npm install ws),也易於使用。

+1

我排除了Web Socket路由。當設備位於代理後面時,似乎存在很大的問題。沒有進一步的信息,我猜想IOS 7不會與第三方應用程序共享/包含代理信息。 我真的想盡量減少我發送的數據。代碼不再冗長,但對於1500個聯繫人,我的響應時間縮短到2秒。這是比較電話號碼和電子郵件地址。一旦數據庫填充了幾百萬條記錄,這些時間可能會減慢。 我需要看看索引和附加的讀取服務器,但這將是一個很好的問題。 – chabber

+4

如果有人需要它,我可以在Objective-C和服務器端使用MySQL和Rails 4發佈我的方法客戶端更詳細的描述。 – chabber

+0

Hey Chabber,我知道你在一段時間之前發佈了它,但如果你仍然記住你採取的方法,如果你能發佈,我將非常感激。我和你曾經有過類似的情況,不知道如何繼續。 – smaili