苹果7p怎么看当前的ios_ios p苹果获取唯一识别码 - CSDN
精华内容
参与话题
  • iOS 获取当前设备型号iPhone7/iPhone7P

    千次阅读 2016-09-21 17:29:35
    #include #include <sys/sysctl.h>//获得设备型号 + (NSString *)getCurrentDeviceModel { int mib[2]; size_t len; char *machine; mib[0] = CTL_HW; mib[1] = HW_MACHINE; sysctl(m
    #include <sys/types.h>
    #include <sys/sysctl.h>
    //获得设备型号
    + (NSString *)getCurrentDeviceModel
    {
        int mib[2];
        size_t len;
        char *machine;
    
        mib[0] = CTL_HW;
        mib[1] = HW_MACHINE;
        sysctl(mib, 2, NULL, &len, NULL, 0);
        machine = malloc(len);
        sysctl(mib, 2, machine, &len, NULL, 0);
    
        NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
        free(machine);
        // iPhone
        if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone2G";
        if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone3G";
        if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone3GS";
        if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone4";
        if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone4";
        if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone4";
        if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone4S";
        if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone5";
        if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone5";
        if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone5c";
        if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone5c";
        if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone5s";
        if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone5s";
        if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone6";
        if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone6Plus";
        if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone6s";
        if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone6sPlus";
        if ([platform isEqualToString:@"iPhone8,3"]) return @"iPhoneSE";
        if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhoneSE";
        if ([platform isEqualToString:@"iPhone9,1"]) return @"iPhone7";
        if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone7Plus";
    
        //iPod Touch
        if ([platform isEqualToString:@"iPod1,1"])   return @"iPodTouch";
        if ([platform isEqualToString:@"iPod2,1"])   return @"iPodTouch2G";
        if ([platform isEqualToString:@"iPod3,1"])   return @"iPodTouch3G";
        if ([platform isEqualToString:@"iPod4,1"])   return @"iPodTouch4G";
        if ([platform isEqualToString:@"iPod5,1"])   return @"iPodTouch5G";
        if ([platform isEqualToString:@"iPod7,1"])   return @"iPodTouch6G";
    
        //iPad
        if ([platform isEqualToString:@"iPad1,1"])   return @"iPad";
        if ([platform isEqualToString:@"iPad2,1"])   return @"iPad2";
        if ([platform isEqualToString:@"iPad2,2"])   return @"iPad2";
        if ([platform isEqualToString:@"iPad2,3"])   return @"iPad2";
        if ([platform isEqualToString:@"iPad2,4"])   return @"iPad2";
        if ([platform isEqualToString:@"iPad3,1"])   return @"iPad3";
        if ([platform isEqualToString:@"iPad3,2"])   return @"iPad3";
        if ([platform isEqualToString:@"iPad3,3"])   return @"iPad3";
        if ([platform isEqualToString:@"iPad3,4"])   return @"iPad4";
        if ([platform isEqualToString:@"iPad3,5"])   return @"iPad4";
        if ([platform isEqualToString:@"iPad3,6"])   return @"iPad4";
    
        //iPad Air
        if ([platform isEqualToString:@"iPad4,1"])   return @"iPadAir";
        if ([platform isEqualToString:@"iPad4,2"])   return @"iPadAir";
        if ([platform isEqualToString:@"iPad4,3"])   return @"iPadAir";
        if ([platform isEqualToString:@"iPad5,3"])   return @"iPadAir2";
        if ([platform isEqualToString:@"iPad5,4"])   return @"iPadAir2";
    
        //iPad mini
        if ([platform isEqualToString:@"iPad2,5"])   return @"iPadmini1G";
        if ([platform isEqualToString:@"iPad2,6"])   return @"iPadmini1G";
        if ([platform isEqualToString:@"iPad2,7"])   return @"iPadmini1G";
        if ([platform isEqualToString:@"iPad4,4"])   return @"iPadmini2";
        if ([platform isEqualToString:@"iPad4,5"])   return @"iPadmini2";
        if ([platform isEqualToString:@"iPad4,6"])   return @"iPadmini2";
        if ([platform isEqualToString:@"iPad4,7"])   return @"iPadmini3";
        if ([platform isEqualToString:@"iPad4,8"])   return @"iPadmini3";
        if ([platform isEqualToString:@"iPad4,9"])   return @"iPadmini3";
        if ([platform isEqualToString:@"iPad5,1"])   return @"iPadmini4";
        if ([platform isEqualToString:@"iPad5,2"])   return @"iPadmini4";
    
        if ([platform isEqualToString:@"i386"])      return @"iPhoneSimulator";
        if ([platform isEqualToString:@"x86_64"])    return @"iPhoneSimulator";
        return platform;
    }
    展开全文
  • 1、ios端进行支付,然后收到苹果的一串数据(也叫收据),然后ios端将其转码为BASE64编码的字符串。 2、ios端请求服务端接口,将数据传给服务端,服务端拿到数据后,通过一系列处理后,请求苹果服务器,验证此收据...

    大致流程:
    1、ios端进行支付,然后收到苹果的一串数据(也叫收据),然后ios端将其转码为BASE64编码的字符串。
    2、ios端请求服务端接口,将数据传给服务端,服务端拿到数据后,通过一系列处理后,请求苹果服务器,验证此收据是否为正。
    3、验证成功后,验证当前支付的交易是否成功,成功则处理相关业务。
     

    关于苹果内购的文章,本人也是参考了网上的一些资料,在这里主要的参考文章贴一下:
    https://www.jianshu.com/p/976fc6090cfa
    https://www.cnblogs.com/zxtceq/p/10237643.html
     

    但是以上的文章,主要写的是非订阅版的处理方式,导致我在处理连续包月订阅的时候,返回了21004错误,搞了半天,以为是我的数据问题,但是一直找不到解决办法。

    后来在公司总监的帮助和指引下,先让前端同事,在前端请求苹果验证一下。结果发现同样返回21004错误。
     

     

    原来,连续包月订阅,ios端需要拿到把在app-store上的定义共享秘钥传给我,然后拼接成json格式的字符串一起请求苹果服务器。

    下面说一下我这边的处理步骤:
    1、出了一个下单接口,让前端在调用ios支付之前,先下单(未完成支付),得到订单id。
    2、调用苹果内购支付接口,把苹果的收据receipt,订单id,苹果交易流水号传过来服务端。
    3、服务端拼接好数据后,请求苹果服务器验证是否支付成功,成功则更新订单的状态。

    下面贴一下我这边的关键代码:

    ​
    /**
     * 下单接口的业务处理层
    */
    public RetKit createOpenVipOrder(String amount, int payType, User user) {
    		User realUser = User.dao.findById(user.getId());
    		if (realUser.getPhone() == null || StringUtils.isEmpty(realUser.getPhone())) {
    			return RetKit.fail("请先绑定手机!");
    		}
    		if (payType != VipOrder.PAY_TYPE_IOS) {
    			return RetKit.fail("参数有误!");
    		}
    
    		BigDecimal money = null;
    		try {
    			money = new BigDecimal(amount);
    		} catch (Exception e) {
    			logger.error("金额参数有误");
    			return RetKit.fail("金额参数有误!");
    		}
    
    		BigDecimal realPayMoney = BigDecimal.ZERO;
    		VipSet vs = VipSet.dao.findFirst("select * from vip_set limit 1");
    		if (realUser.getAlreadyOpenedVip() == User.OPENED_VIP) {
    			if (money.compareTo(vs.getVipMoney()) != 0) {
    				return RetKit.fail("vip金额有误!");
    			}
    		} else {
    			if (money.compareTo(vs.getFirstVipMoney()) != 0) {
    				return RetKit.fail("首充金额有误!");
    			}
    		}
    
    		realPayMoney = money;
    		String orderNo = OrderNumberKit.dao.createVipOrderNumber();
    
    		VipOrder model = new VipOrder();
    		model.setVipOrderNumber(orderNo);
    		model.setUserId(realUser.getId());
    		model.setOpenType(VipOrder.OPEN_TYPE_RECHARGE);
    		model.setPayMoney(realPayMoney);
    		model.setStatus(VipOrder.STATUS_NO_PAY);
    		model.setPayType(payType);
    		model.setCreateTime(new Date());
    
    		boolean succ = model.save();
    		return succ ? RetKit.ok("下单成功").set("vipOrderId", model.getId()) :RetKit.fail("下单失败");
    	}
    
    
    
    
    ​

     

    /**
     *  苹果内购支付接口业务处理层
    */
    public RetKit openVipIosPay(String receipt, String sandbox, Integer vipOrderId, String transactionId) {
    		if (receipt == null || StrKit.isBlank(receipt)) {
    			return RetKit.fail("参数有误!");
    		}
    		if (!sandbox.equals("0") && !sandbox.equals("1")) {
    			return RetKit.fail("参数有误!");
    		}
    		VipOrder vipOrder = VipOrder.dao.findById(vipOrderId);
    		if (vipOrder == null) {
    			return RetKit.fail("订单参数有误!");
    		}
    
    		String verifyResult = IosVerify.buyAppVerify(receipt, sandbox);
    		if (verifyResult == null) {
    			LogKit.info("无订单信息:" + verifyResult);
    			return RetKit.fail("无订单信息!");
    		} else {
    			LogKit.info("苹果平台返回Json:" + verifyResult);
    			JSONObject job = JSONObject.parseObject(verifyResult);
    			String status = job.getString("status");
    			// 验证成功
    			if (status.equals("0")) {
    				String r_receipt = job.getString("receipt");
    				JSONObject returnJson = JSONObject.parseObject(r_receipt);
    				String in_app = returnJson.getString("in_app");
    				JSONArray arr = JSONArray.parseArray(in_app);
    
    				//此处需要遍历处理,因为ios端调用苹果内购支付时候,会有同时产生多张订单,只要其中一张订单匹配,即代表支付成功。
    				boolean flag = false;
    				for (int i = 0; i < arr.size(); i++) {
    					JSONObject obj = (JSONObject) arr.get(i);
    					// 交易中有当前交易,则认为交易成功
    					if (transactionId.equals((String) obj.get("transaction_id"))) {
    						flag = true;
    						break;
    					}
    				}
    
    				if (flag) {
    					// 处理业务逻辑
    					boolean succ = vipOrder.setStatus(VipOrder.STATUS_IS_PAY).setTradeNo(transactionId).update();
    					return succ ? RetKit.ok("充值成功!") : RetKit.fail("充值失败");
    				}
    
    				return RetKit.fail("当前交易不在交易列表中");
    			} else {
    				LogKit.error("苹果内购错误码:" + status);
    				return RetKit.fail("支付失败!");
    			}
    		}
    	}

     

    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    import java.util.Locale;
    
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSession;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    
    import com.jfinal.kit.LogKit;
    
    /**
     * 苹果IAP内购验证工具类
     */
    public class IosVerify {
    
    	private static class TrustAnyTrustManager implements X509TrustManager {
    
    		@Override
    		public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    			// TODO Auto-generated method stub
    
    		}
    
    		@Override
    		public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    			// TODO Auto-generated method stub
    
    		}
    
    		@Override
    		public X509Certificate[] getAcceptedIssuers() {
    			// TODO Auto-generated method stub
    			return new X509Certificate[] {};
    		}
    	}
    
    	private static class TrustAnyHostnameVerifier implements HostnameVerifier {
    
    		@Override
    		public boolean verify(String arg0, SSLSession arg1) {
    			// TODO Auto-generated method stub
    			return true;
    		}
    	}
    
    	// 沙箱url
    	private static final String url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
    	// 线上url
    	private static final String url_verify = "https://buy.itunes.apple.com/verifyReceipt";
    
    	// 苹果连续订阅共享秘钥,ios在app-store添加后提供
    	private static final String IOS_SHARED_SECRET_PASSWORD = "088c1088ef404f6c9978b932e61483f5";
    
    	public static String buyAppVerify(String receipt, String sandbox) {
    
    		System.out.println(receipt);
    		// 环境判断 线上/开发环境用不同的请求链接
    		String url = "";
    		if (sandbox.equals("1")) {
    			url = url_verify;
    		} else {
    			url = url_sandbox;
    		}
    		try {
    			SSLContext sc = SSLContext.getInstance("SSL");
    			sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
    			URL console = new URL(url);
    			HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
    			conn.setSSLSocketFactory(sc.getSocketFactory());
    			conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
    			conn.setRequestMethod("POST");
    			conn.setRequestProperty("content-type", "text/json");
    			conn.setRequestProperty("Proxy-Connection", "Keep-Alive");
    			conn.setDoInput(true);
    			conn.setDoOutput(true);
    			BufferedOutputStream hurlBufOus = new BufferedOutputStream(conn.getOutputStream());
    			
    			//普通支付
    //			String str = String.format(Locale.CHINA, "{\"receipt-data\":\"" + receipt + "\"}");
    
    			//连续包月订阅需要加上共享密钥
    			String str = String.format(Locale.CHINA,
    					"{\"receipt-data\":\"" + receipt + "\",\"password\":\"" + IOS_SHARED_SECRET_PASSWORD + "\"}");
    
    			hurlBufOus.write(str.getBytes());
    			hurlBufOus.flush();
    			hurlBufOus.close();
    
    			InputStream is = conn.getInputStream();
    			BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    			String line = null;
    			StringBuffer sb = new StringBuffer();
    			while ((line = reader.readLine()) != null) {
    				sb.append(line);
    			}
    			return sb.toString();
    		} catch (Exception ex) {
    			System.out.println(ex.getMessage());
    			LogKit.error("------苹果服务器异常------");
    			ex.printStackTrace();
    		}
    		return null;
    	}
    
    }


    ps:在请求苹果服务器过程中有时候会报21002状态,请检查几个方面:
    1、ios端传过来的数据有误。
    2、检查ios传过来的数据转json格式字符串是否有误。
    3、base64转码是否正确(本人后台调用网上方法转码时候,遇到过此问题,有可能是base64转码的方法有问题)。

    以上代码除了业务代码是本人自己写的外,苹果工具类的代码是参考网上文章复制下来的。
     

    展开全文
  • Objective-C 提供 NSProcessInfo 这个类来获取当前 APP 进程信息, 然而我们的静态库是 pure C++ 工程. 那么如何在 cpp 中调用 Objective-C 呢 ? 这个问题涉及 C++ 和 Objective-C 混编.我们把获取进程信息的函数int ...

    本文由EasyDarwin开源团队成员Penggy供稿;

    Objective-C 提供 NSProcessInfo 这个类来获取当前 APP 进程信息, 然而我们的静态库是 pure C++ 工程. 那么如何在 cpp 中调用 Objective-C 呢 ? 这个问题涉及 C++ 和 Objective-C 混编.

    1. 我们把获取进程信息的函数int ios_process_name(char* buf, int len);声明在 ios_process_info.h 文件中
    2. 在 ios_process_info.mm 文件中通过调用 NSProcessInfo 实现函数ios_process_name
    3. 在 .cpp 文件中 include "ios_process_info.h", 调用函数 ios_process_name

    ios_process_info.h


    //
    //  ios_process_info.h
    //  libEasyRTSPClient
    //
    //  Created by Penggy on 16/9/20.
    //  Copyright © 2016年 org.easydarwin. All rights reserved.
    //
    
    #ifndef ios_process_info_h
    #define ios_process_info_h
    
    int ios_process_name(char* buf, int len);
    
    #endif /* ios_process_info_h */

    ios_process_info.mm


    //
    //  ios_process_info.m
    //  libEasyRTSPClient
    //
    //  Created by Penggy on 16/9/20.
    //  Copyright © 2016年 org.easydarwin. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import <Foundation/NSProcessInfo.h>
    #import "ios_process_info.h"
    
    int ios_process_name(char* buf, int len){
        NSString *pname = [[NSProcessInfo processInfo] processName];
        if(!pname){
            return -1;
        }
        strncpy(buf,[pname UTF8String],len-1);
        buf[len-1] = 0;
        return 0;
    }

    xxx.cpp


    #ifdef __MACH__
    #include "ios_process_info.h"
     int ret = ios_process_name(szProcName, sizeof(szProcName));
    #else
     //TODO 其它平台获取当前进程名称
    #endif


    获取更多信息

    邮件:support@easydarwin.org

    WEB:www.EasyDarwin.org

    Copyright © EasyDarwin.org 2012-2016

    EasyDarwin



    转载于:https://www.cnblogs.com/babosa/p/9217888.html

    展开全文
  • #include #include //获得设备型号 + (NSString *)getCurrentDeviceModel { int mib[2]; size_t len; char *machine; mib[0] = CTL_HW; mib[1] = HW_MACHINE;... sysctl(mib, 2, NULL, &len, NULL
    #include <sys/types.h>
    #include <sys/sysctl.h>
    
    //获得设备型号
    + (NSString *)getCurrentDeviceModel
    {
        int mib[2];
        size_t len;
        char *machine;
    
        mib[0] = CTL_HW;
        mib[1] = HW_MACHINE;
        sysctl(mib, 2, NULL, &len, NULL, 0);
        machine = malloc(len);
        sysctl(mib, 2, machine, &len, NULL, 0);
    
        NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
        free(machine);
        // iPhone
        if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone2G";
        if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone3G";
        if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone3GS";
        if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone4";
        if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone4";
        if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone4";
        if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone4S";
        if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone5";
        if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone5";
        if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone5c";
        if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone5c";
        if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone5s";
        if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone5s";
        if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone6";
        if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone6Plus";
        if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone6s";
        if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone6sPlus";
        if ([platform isEqualToString:@"iPhone8,3"]) return @"iPhoneSE";
        if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhoneSE";
        if ([platform isEqualToString:@"iPhone9,1"]) return @"iPhone7";
        if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone7Plus";
    
        //iPod Touch
        if ([platform isEqualToString:@"iPod1,1"])   return @"iPodTouch";
        if ([platform isEqualToString:@"iPod2,1"])   return @"iPodTouch2G";
        if ([platform isEqualToString:@"iPod3,1"])   return @"iPodTouch3G";
        if ([platform isEqualToString:@"iPod4,1"])   return @"iPodTouch4G";
        if ([platform isEqualToString:@"iPod5,1"])   return @"iPodTouch5G";
        if ([platform isEqualToString:@"iPod7,1"])   return @"iPodTouch6G";
    
        //iPad
        if ([platform isEqualToString:@"iPad1,1"])   return @"iPad";
        if ([platform isEqualToString:@"iPad2,1"])   return @"iPad2";
        if ([platform isEqualToString:@"iPad2,2"])   return @"iPad2";
        if ([platform isEqualToString:@"iPad2,3"])   return @"iPad2";
        if ([platform isEqualToString:@"iPad2,4"])   return @"iPad2";
        if ([platform isEqualToString:@"iPad3,1"])   return @"iPad3";
        if ([platform isEqualToString:@"iPad3,2"])   return @"iPad3";
        if ([platform isEqualToString:@"iPad3,3"])   return @"iPad3";
        if ([platform isEqualToString:@"iPad3,4"])   return @"iPad4";
        if ([platform isEqualToString:@"iPad3,5"])   return @"iPad4";
        if ([platform isEqualToString:@"iPad3,6"])   return @"iPad4";
    
        //iPad Air
        if ([platform isEqualToString:@"iPad4,1"])   return @"iPadAir";
        if ([platform isEqualToString:@"iPad4,2"])   return @"iPadAir";
        if ([platform isEqualToString:@"iPad4,3"])   return @"iPadAir";
        if ([platform isEqualToString:@"iPad5,3"])   return @"iPadAir2";
        if ([platform isEqualToString:@"iPad5,4"])   return @"iPadAir2";
    
        //iPad mini
        if ([platform isEqualToString:@"iPad2,5"])   return @"iPadmini1G";
        if ([platform isEqualToString:@"iPad2,6"])   return @"iPadmini1G";
        if ([platform isEqualToString:@"iPad2,7"])   return @"iPadmini1G";
        if ([platform isEqualToString:@"iPad4,4"])   return @"iPadmini2";
        if ([platform isEqualToString:@"iPad4,5"])   return @"iPadmini2";
        if ([platform isEqualToString:@"iPad4,6"])   return @"iPadmini2";
        if ([platform isEqualToString:@"iPad4,7"])   return @"iPadmini3";
        if ([platform isEqualToString:@"iPad4,8"])   return @"iPadmini3";
        if ([platform isEqualToString:@"iPad4,9"])   return @"iPadmini3";
        if ([platform isEqualToString:@"iPad5,1"])   return @"iPadmini4";
        if ([platform isEqualToString:@"iPad5,2"])   return @"iPadmini4";
    
        if ([platform isEqualToString:@"i386"])      return @"iPhoneSimulator";
        if ([platform isEqualToString:@"x86_64"])    return @"iPhoneSimulator";
        return platform;
    }

    获取设备信息总结

    1、获取设备的信息

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. UIDevice *device = [[UIDevice alloc] int];  
    2. NSString *name = device.name;       //获取设备所有者的名称  
    3. NSString *model = device.name;      //获取设备的类别  
    4. NSString *type = device.localizedModel//获取本地化版本  
    5. NSString *systemName = device.systemName;   //获取当前运行的系统  
    6. NSString *systemVersion = device.systemVersion;//获取当前系统的版本  

    2、获取设备的唯一标示符
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. NSString *identifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];  

    3、为系统创建一个随机的标示符
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. (NSString*) createUUID  
    2. {  
    3.     NSString *id = [[NSUserDefaults standardUserDefaults] objectForKey:@"UUID"];    //获取标识为"UUID"的值  
    4.     if(id == nil)  
    5.     {  
    6.         if([[[UIDevice currentDevice] systemVersion] floatValue] > 6.0)  
    7.         {  
    8.             NSString *identifierNumber = [[NSUUID UUID] UUIDString];                //ios 6.0 之后可以使用的api  
    9.             [[NSUserDefaults standardUserDefaults] setObject:identifierNumber forKey:@"UUID"];  //保存为UUID  
    10.             [[NSUserDefaults standardUserDefaults] synchronize];  
    11.         }  
    12.         else{  
    13.             CFUUIDRef uuid = CFUUIDCreate(NULL);  
    14.             CFStringRef uuidString = CFUUIDCreateString(NULLuuid);                    //ios6.0之前使用的api  
    15.             NSString *identifierNumber = [NSString stringWithFormat:@"%@", uuidString];  
    16.             [[NSUserDefaults standardUserDefaults] setObject:identifierNumber forKey:@"UUID"];  
    17.             [[NSUserDefaults standardUserDefaults] synchronize];  
    18.             CFRelease(uuidString);  
    19.             CFRelease(uuid);  
    20.         }  
    21.         return [[NSUserDefaults standardUserDefaults] objectForKey@"UUID"];  
    22.     }  
    23.     return id;  
    24. }  

    4、获取当前屏幕分辨率的信息
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. CGRect rect = [[UIScreen mainScreen] bounds];  
    2. CGFloat scale = [[UIScreen mainScreen].scale];  
    3. CGFloat width = rect.size.width * scale;  
    4. CGFloat height = rect.size.height * scale;  

    5、获取运营商的信息
    需要先导入头文件
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. #import <CoreTelephony/CTCarrier.h>  
    2. #import <CoreTelephony/CTTelephonyNetworkInfo.h>  

    创建对象

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. CCTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];  

    获取运行商的名称
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. CTCarrier *carrier = [info subscriberCellularProvider];  
    2. NSString *mCarrier = [NSString stringWithFormat:@"%@",[carrier carrierName]];  

    获取当前网络的类型
    ios7之后可以按照以下方式获取。方便而且类型多
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. NSString *mConnectType = [[NSString alloc] initWithFormat:@"%@",info.currentRadioAccessTechnology];  

    类型有以下:
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. CTRadioAccessTechnologyGPRS         //介于2G和3G之间,也叫2.5G ,过度技术    
    2. CTRadioAccessTechnologyEdge         //EDGE为GPRS到第三代移动通信的过渡,EDGE俗称2.75G   
    3. CTRadioAccessTechnologyWCDMA           
    4. CTRadioAccessTechnologyHSDPA            //亦称为3.5G(3?G)  
    5. CTRadioAccessTechnologyHSUPA            //3G到4G的过度技术  
    6. CTRadioAccessTechnologyCDMA1x       //3G      
    7. CTRadioAccessTechnologyCDMAEVDORev0    //3G标准  
    8. CTRadioAccessTechnologyCDMAEVDORevA    
    9. CTRadioAccessTechnologyCDMAEVDORevB    
    10. CTRadioAccessTechnologyeHRPD        //电信使用的一种3G到4G的演进技术, 3.75G       
    11. CTRadioAccessTechnologyLTE          //接近4G   

    ios7之前的话apple给我们提供了Reachability来获取。
    首先要导入SystemConfiguration.framework,把下载下来的Reachability.h和Reachability.m加进项目中
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];  
    2. switch([reach currentReachabilityStatus])  
    3. {  
    4.     case NotReachable:  //没有连接上  
    5.         //do something  
    6.         break;  
    7.     case ReachableViaWiFi:  //通过wifi连接  
    8.         //do something  
    9.         break;  
    10.     case ReachableViaWWAN:  //通过GPRS连接  
    11.         //do something  
    12.         break;  
    13.     default:    <span style="white-space:pre">    </span>//未知情况  
    14.         //do something  
    15.         break;  
    16. }  
    http://blog.csdn.net/qijianli/article/details/19922653 这个博客还说了其它的方法,不过因为是调用私有API,所以没有采用。

    6、获取当前信号的强弱
    这个貌似没有给出官方的api,但是网上有人说可以用私有的api实现,但是通不过appStore的审核,方法如下:
    利用linux下动态库显式调用api的函数。先包含头文件 #import <dlfcn.h>
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. (int) getSignalLevel  
    2. {  
    3. voidvoid *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);//获取库句柄  
    4. int (*CTGetSignalStrength)(); //定义一个与将要获取的函数匹配的函数指针  
    5. CTGetSignalStrength = (int(*)())dlsym(libHandle,"CTGetSignalStrength"); //获取指定名称的函数  
    6.   
    7. if(CTGetSignalStrength == NULL)  
    8.     return -1;  
    9. else{  
    10.     int level = CTGetSignalStrength();  
    11.     dlclose(libHandle); //切记关闭库  
    12.     return level  
    13.     }  
    14. }  

    7、设备震动
    需要加入AudioToolbox framework,导入头文件 #import <AudioToolbox/AudioToolbox.h>
    在需要震动的地方添加代码:
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. AudioServicesPlaySystemSound ( kSystemSoundID_Vibrate) ;  
    但是貌似这个不支持传入震动时间和模式,自己去控制吧。


    8、获取电池的相关信息
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. @implementation BatterMonitor  
    2. //获取电池当前的状态,共有4种状态  
    3. -(NSString*) getBatteryState {    
    4.     UIDevice *device = [UIDevice currentDevice];    
    5.     if (device.batteryState == UIDeviceBatteryStateUnknown) {    
    6.         return @"UnKnow";    
    7.     }else if (device.batteryState == UIDeviceBatteryStateUnplugged){    
    8.         return @"Unplugged";    
    9.     }else if (device.batteryState == UIDeviceBatteryStateCharging){    
    10.         return @"Charging";    
    11.     }else if (device.batteryState == UIDeviceBatteryStateFull){    
    12.         return @"Full";    
    13.     }  
    14.     return nil;   
    15. }   
    16. //获取电量的等级,0.00~1.00  
    17. -(float) getBatteryLevel {    
    18.     return [UIDevice currentDevice].batteryLevel;  
    19. }   
    20.   
    21. -(void) getBatteryInfo  
    22. {  
    23.     NSString *state = getBatteryState();  
    24.     float level = getBatteryLevel()*100.0;  
    25.     //yourControlFunc(state, level);  //写自己要实现的获取电量信息后怎么处理  
    26. }  
    27.   
    28. //打开对电量和电池状态的监控,类似定时器的功能  
    29. -(void) didLoad  
    30. {  
    31.     [[UIDevice currentDevice] setBatteryMonitoringEnable:YES];  
    32.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getBatteryInfo:) name:UIDeviceBatteryStateDidChangeNotification object:nil];  
    33.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getBatteryInfo:) name:UIDeviceBatteryLevelDidChangeNotification object:nil];  
    34.     [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(getBatteryInfo:) userInfo:nil repeats:YES];  
    35. }  
    36. @end  

    9、app中打开一个网页
    这个比较简单,直接用提供的接口openURL即可。
    [cpp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. NSString *url = @"www.apple.com"  
    2. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];  

    10、app中打开另一个app

    打开另一个app还是可以通过openURL来实现。但是要分两种情况。第一种是启动内置的应用,一般的电话,浏览器,短信和

    邮件可以直接调用并添加参数,譬如

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]];  
    2. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://devprograms@apple.com"]];  
    3. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://10086"]];  

    第二种情况是要打开自己开发的app,这种情况则要为将要打开的app注册一个URL协议。这个可以在项目的文件info.plist中注册。主要操作为: 

    Step1. 右键,选择“Add Row”

    Step2. Key值选择“URL types”

    Step3. 打开“Item 0″,然后为该key增加一个URL identifier。可以是任何值,但建议用“反域名”(例如 “com.fcplayer.testHello”)。

    Step4. 在“Item 0”下再加一行。

    Step5. 选择“URL Schemes” 作为Key。

    Step6. 输入你的URL协议名 (例如“testHello://” 应写做“testHello”)。如果有必要,你可以在这里加入多个协议。

    其实在打开的时候只需要URL Schemes即可,URL identifier是可选项。如果需要传送参数,可以在URL Schemes://添加你的参数,格式和网页开发的传递参数差不多。(又或者URL Schemes://URL identifier@添加的参数)关键是要和接收参数方定义好处理的方式。然后在需要打开的地方添加代码:

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. NSString *url = @"URL Schemes的路径"  
    2. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];  

    如有错误,请不吝指正,谢谢

    展开全文
  • #include #include <sys/sysctl.h> 1 2 1 2//获得设备型号 + (NSString *)getCurrentDeviceModel { int mib[2]; size_t len; char *machine; mib[0] = CTL_HW; mib[1] = HW
  • Html5+如何获取ios手机当前位置

    千次阅读 2017-04-25 23:50:20
    mui.init();   mui.plusReady(  function plusReady(){  document.getElementById("but").addEventListener('tap', function(){  ... plus.geolocation.getCurrentPosition( function ( p ) {
  • 今天开发应用,获取地理位置,最先采用H5的Geolocation的方法来获取地理位置,经过测试发现安卓的机子可以,但是IOS的就是不行,一查资料才知道:10.0苹果版本需要协议为https的才可以获取到地理定位。 而后为了解决...
  • ApplePay在中国上线后,就有许多线上app前后脚加入了对其的接入支持,个人比较喜欢的ENJOY也抢在首批接入了ApplePay应用内支付。本文将分享作者的接入经验。 ApplePay是苹果公司推出的一种线上/线下的便捷支付方式...
  • // 获取当前系统时间戳 NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0]; NSTimeInterval a=[dat timeIntervalSince1970]; NSString *timeString = [NSString stringWithFormat:@"%0.0f", a];//转...
  • 上架基本需求资料 ...上架App Store审核分7步进行。 1、安装iOS上架辅助软件Appuploader 2、申请iOS发布证书(p12) 3、申请iOS发布描述文件(mobileprovision) 4、打包ipa 5、上传ipa到iTunes Conne...
  • #if __IPHONE_OS_VERSION_MAX_ALLOWED &... __IPHONE_6_0 // 当前支持的sdk版本是否低于6.0  //ios 6.0以下的处理 #else  //ios 6.0以上的处理 #endif 转载于:https://www.cnblogs.com/xuling/p/3454391.html...
  • 代码适配iPhone6和6+
  • 这篇文档将从应用生命周期的各个环节介绍苹果系统对应用的管理机制,主要详细介绍iOS和macOS,watchOS与tvOS由于用户数量少,以及流程与iOS相似度较高,只作了简单介绍。 iOS 一、开发 注册账号: 单纯开发是不用...
  • iOS开发技术分享群 147787076 如上带标注的效果图,是1080*1920 也就是6p 的尺寸。如何根据6p的标注,在各种iPhone 尺寸上完美适配尼? 适用:UI 各屏幕/分辨率适配方案(只针对竖屏iPhone页面,并且不太...
  • IOS设计规范一

    2016-08-29 18:36:32
    转载自:http://www.jianshu.com/p/c1321d3b84c7一张图带你快速掌握iOS设计规范iOS设计规范,指的是苹果开发者官网上面的 iOS 人机交互指南(iOS Human Interface Guideline)。制作这个规范的目的是为了让所有安装...
  • iPhone6 6p 7 7p屏幕适配,切图准则

    万次阅读 2016-11-01 14:51:58
    我们都知道一套完整的 App 通常会有很多张切图,不管是 iPhone 需要 1x、2x、3x 图档,Android 需要至少 3 种 hdpi、xhdpi、xxhdpi。在庞大的切图数量下如何让负责套图的 RD 快速找到所需图档,档名的命令方式就...
  • iOS上最好用的3款epub阅读器(转载)

    千次阅读 2019-10-27 20:08:29
    iOS上最好用的3款epub阅读器 在网络发展迅猛的当下,你是喜欢用手机电子书还是喜欢捧一本纸质书呢?或是用专门的电子书阅读器阅读呢?...那么我就给大家介绍3个支持苹果手机IOS系统的超好用的epub阅读器吧...
  • ios运用position:fixed会错位,css一行样式巧妙解决定位问题。
  • iOS传感器之气压计的使用

    千次阅读 2017-02-11 22:30:06
    气压计实际上叫测高仪,因为气压主要与海拔高度有关 传感器不属于隐私功能,不需要授权 气压计是iPhone6开始加入的硬件,不支持6以前的机型 使用气压计相当简单#import "ViewController.h" //传感器框架 ...
1 2 3 4 5 ... 20
收藏数 16,546
精华内容 6,618
关键字:

苹果7p怎么看当前的ios