手机归属地查询(云平台开发)

概要

       本章主要简示了使用聚合云API获取指定手机号的归属地信息,这次找了个可以免费查询很多次的平台。开发主要根据聚合的官方文档,由于获取的查询结果是Json格式,所以涉及到了Json解析,但现在的IOS开发内置了Json解析库,所以事情就简单多了。


结果展示



流程概要

1.在聚合云平台上注册账号并创建应用,下载对应的SDK

2.查看SDK文档,根据文档描述创建应用添加头文件、库、框架,官当文档描述如下:

将JuheApisSDK.a以及头文件“include”文件夹添加到自己的工程中来,添加依赖库CoreTelephony.framework, AdSupport.framework, CoreLocation.framework。
   注:
      1,开发环境使用xCode6.0以上版本进行开发,
      2,将AppDelegate.m改为AppDelegate.mm,或者选中项目,在右侧的设置窗口中选择:TARGETS->XXX(项目名)->Build Phases->Link Binary With Libraries,添加libc++.dylib。


添加聚合数据SDK以及依赖的包(Objective-C)



3.把OpenID和AppKey放到工程里面,布局界面

4.构建请求URL,使用NSURLConnection发出请求,使用对应的代理保存获取的结果,并使用NSJSONSerialization解析请求结果,注意Json解析后的结果是个字典树类型。



主要代码

h文件

//
//  ViewController.h
//  WhatPhone
//
//  Created by God Lin on 14/12/13.
//  Copyright (c) 2014年 arbboter. All rights reserved.
//

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
    NSString* _openID;
    NSString* _keyID;
    
    UITextField* _textPhone;
    UITextView* _textResult;
    
    NSString* _stringRecived;
}

@property (nonatomic, retain) NSString* _openID;
@property (nonatomic, retain) NSString* _keyID;
@property (nonatomic, retain) UITextField* _textPhone;
@property (nonatomic, retain) UITextView* _textResult;
@property (nonatomic, retain) NSString* _stringRecived;

@end


m文件

//
//  ViewController.m
//  WhatPhone
//
//  Created by God Lin on 14/12/13.
//  Copyright (c) 2014年 arbboter. All rights reserved.
//

#import "ViewController.h"
#import "JHAPISDK.h"
#import "JHOpenidSupplier.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize _openID;
@synthesize _keyID;
@synthesize _textPhone;
@synthesize _textResult;
@synthesize _stringRecived;

#pragma 实现协议NSURLConnectionDataDelegate
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSString* strData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    //NSLog(@"%@", strData);
    self._stringRecived = [self._stringRecived stringByAppendingString:strData];

    [strData release];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"All data : \r\n%@", self._stringRecived);
    [self parserResult];
}

// 解析查询结果(Json格式)
/*
 {
    "resultcode": "200",
    "reason": "Return Successd!",
    "result": 
             {
             "province": "山东",
             "city": "临沂",
             "areacode": "0539",
             "zip": "276000",
             "company": "中国联通",
             "card": "未知"
             },
    "error_code": 0
 }
 */
-(BOOL)parserResult
{
    BOOL bOK = NO;
    // 解析Json数据
    NSData* data = [self._stringRecived dataUsingEncoding:NSUTF8StringEncoding];
    NSError *error;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error];;
    if (json == nil)
    {
        NSLog(@"json parse failed \r\n");
        bOK = NO;
    }
    else
    {
        NSDictionary *result = [json objectForKey:@"result"];
        
        NSMutableString* str = [[NSMutableString alloc] initWithString:self._textResult.text];
        
        [str appendFormat:@"========%@========\n", self._textPhone.text];
        // 成功
        if((NSNull*)result != [NSNull null] && [result count])
        {
            
            for (NSString* key in result)
            {
                [str appendFormat:@"%@:%@\n", key, [result objectForKey:key]];
                bOK = YES;
            }
            
        }
        // 失败
        else
        {
            [str appendFormat:@"error !!!\n"];
            for (NSString* key in json)
            {
                [str appendFormat:@"%@:%@\n", key, [json objectForKey:key]];
            }
        }
        [str appendFormat:@"========%@========\n\n", self._textPhone.text];
        
        self._textResult.text = str;
        [str release];
    }
    
    self._textPhone.text = @"";
    return bOK;
}

// 发出查询请求
-(IBAction)OnPhoneInfo:(id)sender
{
    [self._textPhone resignFirstResponder];
    self._stringRecived = @"";
    NSString* strUrl = [[NSString alloc] initWithFormat:@"http://apis.juhe.cn/mobile/get?phone=%@&key=%@", self._textPhone.text, self._keyID];
    NSURL* url = [[NSURL alloc] initWithString:strUrl];
    NSURLRequest* request = [[NSURLRequest alloc] initWithURL:url];
    NSURLConnection* connect = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    
    NSLog(@"Request url : \r\n %@", strUrl);
    [connect release];
    [request release];
    [url release];
    [strUrl release];
}

// 布局
-(void)resetLayout
{
    CGRect frame = self.view.frame;
    
    CGFloat _x = frame.origin.x;
    CGFloat _y = frame.origin.y;
    CGFloat _w = frame.size.width;
    CGFloat _h = frame.size.height;
    
    CGFloat yEdge = 10;
    CGFloat xEdge = 20;
    CGFloat x = _x + xEdge;
    CGFloat y = _y + 40;
    CGFloat w = _w - 2* xEdge;
    CGFloat h = 30;
    
    self._textPhone.frame = CGRectMake(x, y, w, h);
    self._textPhone.layer.cornerRadius = 10;
    self._textPhone.placeholder = @"phone number";
    self._textPhone.textAlignment = NSTextAlignmentCenter;
    self._textPhone.layer.borderWidth = 1;
    
    y = self._textPhone.frame.origin.y + self._textPhone.frame.size.height + yEdge;
    self._textResult.frame = CGRectMake(x, y, w, _y + _h - y - yEdge);
    self._textResult.editable = NO;
    self._textResult.layer.borderWidth = 1;
    self._textResult.layer.cornerRadius = 1;
    self._textResult.layer.borderColor = [[UIColor blackColor] CGColor];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self._keyID = @"你的AppKey";
    self._openID = @"你的OpenID";
    [[JHOpenidSupplier shareSupplier] registerJuheAPIByOpenId:self._openID];
    
    // new UI
    self._textPhone = [[UITextField alloc] init];
    [self.view addSubview:self._textPhone];
    [self._textPhone addTarget:self action:@selector(OnPhoneInfo:) forControlEvents:UIControlEventEditingDidEndOnExit];
    
    self._textResult = [[UITextView alloc] init];
    [self.view addSubview:self._textResult];
    
    // 切屏
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(doRotateAction:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:nil];
    
    [self resetLayout];
}

-(void) doRotateAction:(NSNotification *) notification
{
  [self resetLayout];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(void)dealloc
{
    [_textPhone release];
    [_textResult release];
    [_keyID release];
    [_openID release];
    [_stringRecived release];
    
    [super dealloc];
}
@end


工程代码

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。