zoukankan      html  css  js  c++  java
  • umeng 渠道统计ios

    1、 使用前提:需要在工程中添加依赖框架:AdSupport.framework 和 Security.framework

    2、AppDelegate.m文件中的-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中调用以下代码, 传入Appkey。

    OpenUDID.h可从https://github.com/ylechelle/OpenUDID下载。

     

    #import <AdSupport/ASIdentifierManager.h>
    #include <sys/sysctl.h>
    #include <sys/socket.h>
    #include <net/if.h>
    #include <net/if_dl.h>
    #import "OpenUDID.h"
     
     
    +(void)requestTrackWithAppkey:(NSString *)appkey
    {
        if (!appkey || ![appkey length])
        {
            return;
        }
       
        ASIdentifierManager *asIM = [[ASIdentifierManager alloc] init];
        NSString *idfa = [asIM.advertisingIdentifier UUIDString];
        NSString *idfv = [[UIDevice currentDevice].identifierForVendor UUIDString];
        NSString *openudid = [OpenUDID value];
        NSString *mac = [self macString];
       // NSString *utdid = [UTDevice utdid];
       
        size_t size;
        // Set 'oldp' parameter to NULL to get the size of the data
        // returned so we can allocate appropriate amount of space
        sysctlbyname("hw.machine", NULL, &size, NULL, 0);
        // Allocate the space to store name
        char *name = malloc(size);
        // Get the platform name
        sysctlbyname("hw.machine", name, &size, NULL, 0);
        // Place name into a string
        NSString *machine = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
        // Done with this
        free(name);
        machine=(NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                                     (CFStringRef)machine,
                                                                                     NULL,
                                                                                     (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                                                     kCFStringEncodingUTF8));
        mac=(NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                                       (CFStringRef)mac,
                                                                                       NULL,
                                                                                       (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                                                       kCFStringEncodingUTF8));
        NSString *requestURL = [[NSString alloc] initWithFormat:@"https://ar.umeng.com/stat.htm?ak=%@&device_name=%@&idfa=%@&openudid=%@&idfv=%@&mac=%@",appkey,machine,idfa,openudid,idfv,mac];
       
        NSError *error = nil;
        NSHTTPURLResponse *response = nil;
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:requestURL]];
        NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        if (responseData)
        {
            //
           // NSLog(@"ok");
        }
       
    }
     
     
    + (NSString * )macString{
        int mib[6];
        size_t len;
        char *buf;
        unsigned char *ptr;
        struct if_msghdr *ifm;
        struct sockaddr_dl *sdl;
       
        mib[0] = CTL_NET;
        mib[1] = AF_ROUTE;
        mib[2] = 0;
        mib[3] = AF_LINK;
        mib[4] = NET_RT_IFLIST;
       
        if ((mib[5] = if_nametoindex("en0")) == 0) {
            printf("Error: if_nametoindex error
    ");
            return NULL;
        }
       
        if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
            printf("Error: sysctl, take 1
    ");
            return NULL;
        }
       
        if ((buf = malloc(len)) == NULL) {
            printf("Could not allocate memory. error!
    ");
            return NULL;
        }
       
        if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
            printf("Error: sysctl, take 2");
            free(buf);
            return NULL;
        }
       
        ifm = (struct if_msghdr *)buf;
        sdl = (struct sockaddr_dl *)(ifm + 1);
        ptr = (unsigned char *)LLADDR(sdl);
        NSString *macString = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X",
                               *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];
        free(buf);
       
        return macString;
    }
  • 相关阅读:
    2020软件工程作业05
    一、uart&tty驱动
    柔性数组使用备忘
    指针和数组备忘
    计算信息帧的校验和(备忘)
    Linux系统vim几个常见配置
    C语言实现过滤ASCII在0~127范围内的字符,并去除重复的字符
    extern "C"的用法
    strtol详解
    将一个十进制整数转换为二进制并输出
  • 原文地址:https://www.cnblogs.com/likwo/p/5794077.html
Copyright © 2011-2022 走看看