How can whatsapp know country code upon first run

2020-02-21 08:47发布

问题:

When I first install whatsapp on iphone, when I open it, the first screen already knows my sim cards location and shows the country code. How does whatsapp know this ? As apple rejects all the apps that use sim card info programmatically.

回答1:

in your .h file you need to:

#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

And this function will get the country code:

-(NSString*)getCountryDialingCode {


NSDictionary *dialingCodes = [[NSDictionary alloc]initWithObjectsAndKeys:
                    @"972", @"IL",
                    @"93", @"AF",
                    @"355", @"AL",
                    @"213", @"DZ",
                    @"1", @"AS",
                    @"376", @"AD",
                    @"244", @"AO",
                    @"1", @"AI",
                    @"1", @"AG",
                    @"54", @"AR",
                    @"374", @"AM",
                    @"297", @"AW",
                    @"61", @"AU",
                    @"43", @"AT",
                    @"994", @"AZ",
                    @"1", @"BS",
                    @"973", @"BH",
                    @"880", @"BD",
                    @"1", @"BB",
                    @"375", @"BY",
                    @"32", @"BE",
                    @"501", @"BZ",
                    @"229", @"BJ",
                    @"1", @"BM", @"975", @"BT",
                    @"387", @"BA", @"267", @"BW", @"55", @"BR", @"246", @"IO",
                    @"359", @"BG", @"226", @"BF", @"257", @"BI", @"855", @"KH",
                    @"237", @"CM", @"1", @"CA", @"238", @"CV", @"345", @"KY",
                    @"236", @"CF", @"235", @"TD", @"56", @"CL", @"86", @"CN",
                    @"61", @"CX", @"57", @"CO", @"269", @"KM", @"242", @"CG",
                    @"682", @"CK", @"506", @"CR", @"385", @"HR", @"53", @"CU",
                    @"537", @"CY", @"420", @"CZ", @"45", @"DK", @"253", @"DJ",
                    @"1", @"DM", @"1", @"DO", @"593", @"EC", @"20", @"EG",
                    @"503", @"SV", @"240", @"GQ", @"291", @"ER", @"372", @"EE",
                    @"251", @"ET", @"298", @"FO", @"679", @"FJ", @"358", @"FI",
                    @"33", @"FR", @"594", @"GF", @"689", @"PF", @"241", @"GA",
                    @"220", @"GM", @"995", @"GE", @"49", @"DE", @"233", @"GH",
                    @"350", @"GI", @"30", @"GR", @"299", @"GL", @"1", @"GD",
                    @"590", @"GP", @"1", @"GU", @"502", @"GT", @"224", @"GN",
                    @"245", @"GW", @"595", @"GY", @"509", @"HT", @"504", @"HN",
                    @"36", @"HU", @"354", @"IS", @"91", @"IN", @"62", @"ID",
                    @"964", @"IQ", @"353", @"IE", @"972", @"IL", @"39", @"IT",
                    @"1", @"JM", @"81", @"JP", @"962", @"JO", @"77", @"KZ",
                    @"254", @"KE", @"686", @"KI", @"965", @"KW", @"996", @"KG",
                    @"371", @"LV", @"961", @"LB", @"266", @"LS", @"231", @"LR",
                    @"423", @"LI", @"370", @"LT", @"352", @"LU", @"261", @"MG",
                    @"265", @"MW", @"60", @"MY", @"960", @"MV", @"223", @"ML",
                    @"356", @"MT", @"692", @"MH", @"596", @"MQ", @"222", @"MR",
                    @"230", @"MU", @"262", @"YT", @"52", @"MX", @"377", @"MC",
                    @"976", @"MN", @"382", @"ME", @"1", @"MS", @"212", @"MA",
                    @"95", @"MM", @"264", @"NA", @"674", @"NR", @"977", @"NP",
                    @"31", @"NL", @"599", @"AN", @"687", @"NC", @"64", @"NZ",
                    @"505", @"NI", @"227", @"NE", @"234", @"NG", @"683", @"NU",
                    @"672", @"NF", @"1", @"MP", @"47", @"NO", @"968", @"OM",
                    @"92", @"PK", @"680", @"PW", @"507", @"PA", @"675", @"PG",
                    @"595", @"PY", @"51", @"PE", @"63", @"PH", @"48", @"PL",
                    @"351", @"PT", @"1", @"PR", @"974", @"QA", @"40", @"RO",
                    @"250", @"RW", @"685", @"WS", @"378", @"SM", @"966", @"SA",
                    @"221", @"SN", @"381", @"RS", @"248", @"SC", @"232", @"SL",
                    @"65", @"SG", @"421", @"SK", @"386", @"SI", @"677", @"SB",
                    @"27", @"ZA", @"500", @"GS", @"34", @"ES", @"94", @"LK",
                    @"249", @"SD", @"597", @"SR", @"268", @"SZ", @"46", @"SE",
                    @"41", @"CH", @"992", @"TJ", @"66", @"TH", @"228", @"TG",
                    @"690", @"TK", @"676", @"TO", @"1", @"TT", @"216", @"TN",
                    @"90", @"TR", @"993", @"TM", @"1", @"TC", @"688", @"TV",
                    @"256", @"UG", @"380", @"UA", @"971", @"AE", @"44", @"GB",
                    @"1", @"US", @"598", @"UY", @"998", @"UZ", @"678", @"VU",
                    @"681", @"WF", @"967", @"YE", @"260", @"ZM", @"263", @"ZW",
                    @"591", @"BO", @"673", @"BN", @"61", @"CC", @"243", @"CD",
                    @"225", @"CI", @"500", @"FK", @"44", @"GG", @"379", @"VA",
                    @"852", @"HK", @"98", @"IR", @"44", @"IM", @"44", @"JE",
                    @"850", @"KP", @"82", @"KR", @"856", @"LA", @"218", @"LY",
                    @"853", @"MO", @"389", @"MK", @"691", @"FM", @"373", @"MD",
                    @"258", @"MZ", @"970", @"PS", @"872", @"PN", @"262", @"RE",
                    @"7", @"RU", @"590", @"BL", @"290", @"SH", @"1", @"KN",
                    @"1", @"LC", @"590", @"MF", @"508", @"PM", @"1", @"VC",
                    @"239", @"ST", @"252", @"SO", @"47", @"SJ", @"963",
                    @"SY",@"886",
                    @"TW", @"255",
                    @"TZ", @"670",
                    @"TL",@"58",
                    @"VE",@"84",
                    @"VN",
                    @"284", @"VG",
                    @"340", @"VI",
                    @"678",@"VU",
                    @"681",@"WF",
                    @"685",@"WS",
                    @"967",@"YE",
                    @"262",@"YT",
                    @"27",@"ZA",
                    @"260",@"ZM",
                    @"263",@"ZW",
                    nil];



CTTelephonyNetworkInfo *network_Info = [CTTelephonyNetworkInfo new];
CTCarrier *carrier = network_Info.subscriberCellularProvider;

NSString *icc = [dialingCodes objectForKey:[carrier.isoCountryCode uppercaseString]];

return icc;

}

*This only works for iPhones with a sim inside



回答2:

Is this what you're looking for?

NSString *countryCode = [locale objectForKey:NSLocaleCountryCode]; 


回答3:

My two cents :-) using Swift 3

Note: this method will work even if user is not having a sim in iPhone.

Create a new Property List file IntlDialingCodes.plist and paste following lines:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>ac</key>
        <string>247</string>
        <key>ad</key>
        <string>376</string>
        <key>ae</key>
        <string>971</string>
        <key>af</key>
        <string>93</string>
        <key>ag</key>
        <string>1</string>
        <key>ai</key>
        <string>1</string>
        <key>al</key>
        <string>355</string>
        <key>am</key>
        <string>374</string>
        <key>an</key>
        <string>599</string>
        <key>ao</key>
        <string>244</string>
        <key>aq</key>
        <string>672</string>
        <key>ar</key>
        <string>54</string>
        <key>as</key>
        <string>1</string>
        <key>at</key>
        <string>43</string>
        <key>au</key>
        <string>61</string>
        <key>aw</key>
        <string>297</string>
        <key>az</key>
        <string>994</string>
        <key>ba</key>
        <string>387</string>
        <key>bb</key>
        <string>1</string>
        <key>bd</key>
        <string>880</string>
        <key>be</key>
        <string>32</string>
        <key>bf</key>
        <string>226</string>
        <key>bg</key>
        <string>359</string>
        <key>bh</key>
        <string>973</string>
        <key>bi</key>
        <string>257</string>
        <key>bj</key>
        <string>229</string>
        <key>bm</key>
        <string>1</string>
        <key>bn</key>
        <string>673</string>
        <key>bo</key>
        <string>591</string>
        <key>br</key>
        <string>55</string>
        <key>bs</key>
        <string>1</string>
        <key>bt</key>
        <string>975</string>
        <key>bw</key>
        <string>267</string>
        <key>by</key>
        <string>375</string>
        <key>bz</key>
        <string>501</string>
        <key>ca</key>
        <string>1</string>
        <key>cd</key>
        <string>243</string>
        <key>cf</key>
        <string>236</string>
        <key>cg</key>
        <string>242</string>
        <key>ch</key>
        <string>41</string>
        <key>ci</key>
        <string>225</string>
        <key>ck</key>
        <string>682</string>
        <key>cl</key>
        <string>56</string>
        <key>cm</key>
        <string>237</string>
        <key>cn</key>
        <string>86</string>
        <key>co</key>
        <string>57</string>
        <key>cr</key>
        <string>506</string>
        <key>cu</key>
        <string>53</string>
        <key>cv</key>
        <string>238</string>
        <key>cy</key>
        <string>357</string>
        <key>cz</key>
        <string>420</string>
        <key>de</key>
        <string>49</string>
        <key>dj</key>
        <string>253</string>
        <key>dk</key>
        <string>45</string>
        <key>dm</key>
        <string>1</string>
        <key>do</key>
        <string>1</string>
        <key>dz</key>
        <string>213</string>
        <key>ec</key>
        <string>593</string>
        <key>ee</key>
        <string>372</string>
        <key>eg</key>
        <string>20</string>
        <key>er</key>
        <string>291</string>
        <key>es</key>
        <string>34</string>
        <key>et</key>
        <string>251</string>
        <key>fi</key>
        <string>358</string>
        <key>fj</key>
        <string>679</string>
        <key>fk</key>
        <string>500</string>
        <key>fm</key>
        <string>691</string>
        <key>fo</key>
        <string>298</string>
        <key>fr</key>
        <string>33</string>
        <key>ga</key>
        <string>241</string>
        <key>gb</key>
        <string>44</string>
        <key>gd</key>
        <string>1</string>
        <key>ge</key>
        <string>995</string>
        <key>gf</key>
        <string>594</string>
        <key>gh</key>
        <string>233</string>
        <key>gi</key>
        <string>350</string>
        <key>gl</key>
        <string>299</string>
        <key>gm</key>
        <string>220</string>
        <key>gn</key>
        <string>224</string>
        <key>gp</key>
        <string>590</string>
        <key>gq</key>
        <string>240</string>
        <key>gr</key>
        <string>30</string>
        <key>gt</key>
        <string>502</string>
        <key>gu</key>
        <string>1</string>
        <key>gw</key>
        <string>245</string>
        <key>gy</key>
        <string>592</string>
        <key>hk</key>
        <string>852</string>
        <key>hn</key>
        <string>504</string>
        <key>hr</key>
        <string>385</string>
        <key>ht</key>
        <string>509</string>
        <key>hu</key>
        <string>36</string>
        <key>id</key>
        <string>62</string>
        <key>ie</key>
        <string>353</string>
        <key>il</key>
        <string>972</string>
        <key>in</key>
        <string>91</string>
        <key>io</key>
        <string>246</string>
        <key>iq</key>
        <string>964</string>
        <key>ir</key>
        <string>98</string>
        <key>is</key>
        <string>354</string>
        <key>it</key>
        <string>39</string>
        <key>ja</key>
        <string>81</string>
        <key>jm</key>
        <string>1</string>
        <key>jo</key>
        <string>962</string>
        <key>jp</key>
        <string>81</string>
        <key>ke</key>
        <string>254</string>
        <key>kg</key>
        <string>996</string>
        <key>kh</key>
        <string>855</string>
        <key>ki</key>
        <string>686</string>
        <key>km</key>
        <string>269</string>
        <key>kn</key>
        <string>1</string>
        <key>kp</key>
        <string>850</string>
        <key>kr</key>
        <string>82</string>
        <key>kw</key>
        <string>965</string>
        <key>ky</key>
        <string>1</string>
        <key>kz</key>
        <string>7</string>
        <key>la</key>
        <string>856</string>
        <key>lb</key>
        <string>961</string>
        <key>lc</key>
        <string>1</string>
        <key>li</key>
        <string>423</string>
        <key>lk</key>
        <string>94</string>
        <key>lr</key>
        <string>231</string>
        <key>ls</key>
        <string>266</string>
        <key>lt</key>
        <string>370</string>
        <key>lu</key>
        <string>352</string>
        <key>lv</key>
        <string>371</string>
        <key>ly</key>
        <string>218</string>
        <key>ma</key>
        <string>212</string>
        <key>mc</key>
        <string>377</string>
        <key>md</key>
        <string>373</string>
        <key>me</key>
        <string>382</string>
        <key>mg</key>
        <string>261</string>
        <key>mh</key>
        <string>692</string>
        <key>mk</key>
        <string>389</string>
        <key>ml</key>
        <string>223</string>
        <key>mm</key>
        <string>95</string>
        <key>mn</key>
        <string>976</string>
        <key>mo</key>
        <string>853</string>
        <key>mp</key>
        <string>1</string>
        <key>mq</key>
        <string>596</string>
        <key>mr</key>
        <string>222</string>
        <key>ms</key>
        <string>1</string>
        <key>mt</key>
        <string>356</string>
        <key>mu</key>
        <string>230</string>
        <key>mv</key>
        <string>960</string>
        <key>mw</key>
        <string>265</string>
        <key>mx</key>
        <string>52</string>
        <key>my</key>
        <string>60</string>
        <key>mz</key>
        <string>258</string>
        <key>na</key>
        <string>264</string>
        <key>nc</key>
        <string>687</string>
        <key>ne</key>
        <string>227</string>
        <key>ng</key>
        <string>234</string>
        <key>ni</key>
        <string>505</string>
        <key>nl</key>
        <string>31</string>
        <key>no</key>
        <string>47</string>
        <key>np</key>
        <string>977</string>
        <key>nr</key>
        <string>674</string>
        <key>nu</key>
        <string>683</string>
        <key>nz</key>
        <string>64</string>
        <key>om</key>
        <string>968</string>
        <key>pa</key>
        <string>507</string>
        <key>pe</key>
        <string>51</string>
        <key>pf</key>
        <string>689</string>
        <key>pg</key>
        <string>675</string>
        <key>ph</key>
        <string>63</string>
        <key>pk</key>
        <string>92</string>
        <key>pl</key>
        <string>48</string>
        <key>pm</key>
        <string>508</string>
        <key>pr</key>
        <string>1</string>
        <key>ps</key>
        <string>970</string>
        <key>pt</key>
        <string>351</string>
        <key>pw</key>
        <string>680</string>
        <key>py</key>
        <string>595</string>
        <key>qa</key>
        <string>974</string>
        <key>re</key>
        <string>262</string>
        <key>ro</key>
        <string>40</string>
        <key>rs</key>
        <string>381</string>
        <key>ru</key>
        <string>7</string>
        <key>rw</key>
        <string>250</string>
        <key>sa</key>
        <string>966</string>
        <key>sb</key>
        <string>677</string>
        <key>sc</key>
        <string>248</string>
        <key>sd</key>
        <string>249</string>
        <key>se</key>
        <string>46</string>
        <key>sg</key>
        <string>65</string>
        <key>sh</key>
        <string>290</string>
        <key>si</key>
        <string>386</string>
        <key>sk</key>
        <string>421</string>
        <key>sl</key>
        <string>232</string>
        <key>sm</key>
        <string>378</string>
        <key>sn</key>
        <string>221</string>
        <key>so</key>
        <string>252</string>
        <key>sr</key>
        <string>597</string>
        <key>st</key>
        <string>239</string>
        <key>sv</key>
        <string>503</string>
        <key>sx</key>
        <string>1</string>
        <key>sy</key>
        <string>963</string>
        <key>sz</key>
        <string>268</string>
        <key>tc</key>
        <string>1</string>
        <key>td</key>
        <string>235</string>
        <key>tg</key>
        <string>228</string>
        <key>th</key>
        <string>66</string>
        <key>tj</key>
        <string>992</string>
        <key>tk</key>
        <string>690</string>
        <key>tm</key>
        <string>993</string>
        <key>tn</key>
        <string>216</string>
        <key>to</key>
        <string>676</string>
        <key>tr</key>
        <string>90</string>
        <key>tt</key>
        <string>1</string>
        <key>tv</key>
        <string>688</string>
        <key>tw</key>
        <string>886</string>
        <key>tz</key>
        <string>255</string>
        <key>ua</key>
        <string>380</string>
        <key>ug</key>
        <string>256</string>
        <key>uk</key>
        <string>44</string>
        <key>us</key>
        <string>1</string>
        <key>uy</key>
        <string>598</string>
        <key>uz</key>
        <string>998</string>
        <key>va</key>
        <string>379</string>
        <key>vc</key>
        <string>1</string>
        <key>ve</key>
        <string>58</string>
        <key>vg</key>
        <string>1</string>
        <key>vi</key>
        <string>1</string>
        <key>vn</key>
        <string>84</string>
        <key>vu</key>
        <string>678</string>
        <key>wf</key>
        <string>681</string>
        <key>ws</key>
        <string>685</string>
        <key>xt</key>
        <string>800</string>
        <key>ye</key>
        <string>967</string>
        <key>za</key>
        <string>27</string>
        <key>zm</key>
        <string>260</string>
        <key>zw</key>
        <string>263</string>
    </dict>
</plist>    

Paste following class or just getDialingCode method in your Helper class, remember to import CoreTelephony:

import Foundation
import CoreTelephony

class Helper {

    static func getDialingCode() {
        let countryCode = CTTelephonyNetworkInfo().subscriberCellularProvider?.isoCountryCode ?? Locale.current.regionCode!
        let path = Bundle.main.path(forResource: "IntlDialingCodes", ofType: "plist")!
        let dict = NSDictionary(contentsOfFile: path)!

        if let dialingCode = dict[countryCode.lowercased()] as? String {
            print("Dialing code for \"\(countryCode.uppercased())\" is \"+\(dialingCode)\"")
        } else {
            print("Dialing code for \"\(countryCode.uppercased())\" not found in plist file")
        }
    }

}

Usage:

Helper.getDialingCode()