精华内容
下载资源
问答
  • IOS JAVA AES128加密解密

    2016-04-07 11:54:59
    IOS JAVA AES128加密解密,使用于IOS,ANDROID,JAVA
  • android ios java后台通用DES base64加密
  • libgdx,桌面/ Android /HTML5/IOS Java游戏开发框架.zip(詹金斯)
  • APPIUM之 ios java没有name,没有ID的元素的定位
  • ios java socket

    2015-06-30 10:40:55
    目前问题是:ios端发送如何发送对象流数据到java java使用的是ObjectInputStream和ObjectOutputSTream接收。自己使用java客户端,是没有问题的, 但是跟ios通讯,就有问题了,ios里面没有这俩类, 请问:java...
  • Mac机,想用Appiun进行ios app的自动化测试,测试代码用java写,环境搭了三天了,还是不通,跪求大神指导。 我的搭建步骤: 1. 装了jdk1.8.0-60。 2. 装了eclipse。 3. 去appium.io网站下载了appium-1.4.8.dmg,并已...
  • is a cross-platform Java game development framework based on OpenGL (ES) that works on Windows, Linux, Mac OS X, Android, iOS and your WebGL enabled browser. It provides a well-tried and robust ...
  • ios java消息推送

    千次阅读 2014-08-15 09:54:16
    至此IOS消息推送(JAVA后台)证书全部制作完毕。 下面开始上代码: 五、IOS端代码: 1、首先在项目的AppDelegate.m中加入以下两个代理方法 - (void)application:(UIApplication *)application ...

    图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider。
    APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。
    上图可以分为三个阶段。
    第一阶段:Push服务器应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
    第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。
    第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。



    从上图我们可以看到。
    1、首先是应用程序注册消息推送。
    2、 IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
    3、应用程序将deviceToken发送给PUSH服务端程序。
    4、 服务端程序向APNS服务发送消息。
    5、APNS服务将消息发送给iPhone应用程序。
    无论是iPhone客户端跟APNS,还是Provider和APNS都需要通过证书进行连接的。下面介绍一下所用到证书的制作。
    一、CSR文件

    1、生成Certificate Signing Request(CSR)
      

    2、填写你的邮箱和常用名称,并选择保存到硬盘。


    点击继续:


    这样就在本地生成了一个PushTest.certSigningRequest文件。


    二、SSL certificate文件

    1、用你付过费的帐号登录到iOS Provisioning Portal,并创建Certificates(已创建可省略),如下图:








    点击Submit

    创建Certificate完毕。
    2、新建一个App ID

    点击New App ID

    输入Description,Bundle Identifier,点击Submit,新建App ID完毕。
    找到新建的App ID 点击右侧的Configure:


    Development Push SSL Certificate ,与Production Push SSL Certificate 区别在于一个是用于开发的推送证书,一个是用于发布产品的推送证书。两个证书获取到的终端deviceToken是不一样的,用两个证书生成的P12证书用于JAVA后台连接APNS的服务器地址也是不同的,Development Push SSL Certificate 对应连接的服务器地址是:gateway.sandbox.push.apple.com。Production Push SSL Certificate  对应连接的服务器地址是:gateway.push.apple.com。
    点击Development Push SSL Certificate一行后的Configure:

    点击Continue:



    选择前面生成好的PushTest.certSigningRequest文件,点击Generate,出现如下所示的页面:


    点击Continue:


    点击Download,下载生成的支持推送服务的证书(命名为:aps_development-6.cer)。

    点击Done,你会发现状态变成了Enabled:

    到现在为止,我们已经生成了两个文件:
    1、PushTest.certSigningRequest
    2、aps_development-6.cer(下载生成的支持推送服务的证书。)
    双击aps_development-6.cer注册到你的钥匙串中,这样你的钥匙串中就会有

    三、准备profile证书,因为推送消息只能在真机上测试,所以要建一个profile证书

    点击"new profile"为上面新建的APP ID建个profile ,成功之后下载pushtestdescDevprofile.mobileprovision

    双击将其加入到xcode 的Provisioning Profiles 中。
    四、生成JAVA后台用于连接APNS的证书:
    打开钥匙串


    选中Apple Development IOS Push Services:com.easecom.zhwgpushtestdesc,右键将其导出。

    导出用于JAVA后台连接APNS的P12证书。

    输入p12 证书的密码,本文中我用的是123456。记住这个密码,JAVA后台使用p12证书的时候要用到。

    输入访问钥匙串的密码:系统登陆密码。
    导出PushTest.p12证书完毕。
    到现在为止,我们已经生成了四个文件:
    1、PushTest.certSigningRequest
    2、aps_development-6.cer(下载生成的支持推送服务的证书。)
    3、pushtestdescDevprofile.mobileprovision
    4、PushTest.p12
    至此IOS消息推送(JAVA后台)证书全部制作完毕。
    下面开始上代码:
    五、IOS端代码:
    1、首先在项目的AppDelegate.m中加入以下两个代理方法
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
        NSString *token = [NSString stringWithFormat:@"%@", deviceToken];
        //获取终端设备标识,这个标识需要通过接口发送到服务器端,服务器端推送消息到APNS时需要知道终端的标识,APNS通过注册的终端标识找到终端设备。
        NSLog(@"My token is:%@", token);   
    }  
    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {   
        NSString *error_str = [NSString stringWithFormat: @"%@", error];   
        NSLog(@"Failed to get token, error:%@", error_str);   
    }
    2、在AppDelegate.m的(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中加入注册消息通知推送能力;加入当应用程序处于未启动状态时,判断是否由远程消息通知触发;加入清除消息推送通知标记。
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
      //判断是否由远程消息通知触发应用程序启动
        if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]!=nil) {
            //获取应用程序消息通知标记数(即小红圈中的数字)
            int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
            if (badge>0) {
               //如果应用程序消息通知标记数(即小红圈中的数字)大于0,清除标记。
                badge--;
              //清除标记。清除小红圈中数字,小红圈中数字为0,小红圈才会消除。
                [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
            }
        }
        //消息推送注册
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge];
    }
    3、在项目AppDelegate.m中加入消息接收处理代理方法。
    //处理收到的消息推送
    - (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)userInfo
    {
        //在此处理接收到的消息。
        NSLog(@"Receive remote notification : %@",userInfo);
    }
    六、JAVA后台代码:
    需要的jar包有:javapns-jdk16-163.jar 、bcprov-jdk16-145-1.jar servlet-api.jar commons-io-2.0.1.jar commons-lang-2.5.jar

    import javapns.back.PushNotificationManager;
    import javapns.back.SSLConnectionHelper;
    import javapns.data.Device;
    import javapns.data.PayLoad;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServlet;


    public static void main(String[] args) throws Exception
    {
            try
            {
                //从客户端获取的deviceToken,在此为了测试简单,写固定的一个测试设备标识。
               String deviceToken = "df779eda 73258894 5882ec78 3ac7b254 6ebc66fe fa295924 440d34ad 6505f8c4"
                System.out.println("Push Start deviceToken:" + deviceToken);
                //定义消息模式
                PayLoad payLoad = new PayLoad();
                payLoad.addAlert("this is test!");
                payLoad.addBadge(1);//消息推送标记数,小红圈中显示的数字。
                payLoad.addSound("default");
                //注册deviceToken
                PushNotificationManager pushManager = PushNotificationManager.getInstance();
                pushManager.addDevice("iPhone", deviceToken);
                //连接APNS
                String host = "gateway.sandbox.push.apple.com";
                //String host = "gateway.push.apple.com";
                int port = 2195;
                String certificatePath = "c:/PushTest.p12";//前面生成的用于JAVA后台连接APNS服务的*.p12文件位置
                String certificatePassword = "123456";//p12文件密码。
                pushManager.initializeConnection(host, port, certificatePath, certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
                //发送推送
                Device client = pushManager.getDevice("iPhone");
                System.out.println("推送消息: " + client.getToken()+"\n"+payLoad.toString() +" ");
                pushManager.sendNotification(client, payLoad);
                //停止连接APNS
                pushManager.stopConnection();
                //删除deviceToken
                pushManager.removeDevice("iPhone");
                System.out.println("Push End");
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }
    }
    }
    至此大功告成,测试通过。
    以上在Iphone4,IPAD2设备测试通过,Iphone3g,3gs需要打PushDoctor(推送医生)补丁才能测试通过。
    展开全文
  • 图片上传,android ios Java服务器整合

    千次阅读 2016-03-25 11:31:10
    (1)服务器是java语言写的,用的是jersey 1.18。现在地址是:https://jersey.java.net/download.html。主页是:https://jersey.java.net/ 这个官网里面有详细的文档说明和demo已经想过的信息,支持spring的。 ...
    好久没写帖子了,写个帖子溜达溜达
    先介绍一下,我这个整合的环境,已经开发环境。
    (1)服务器是java语言写的,用的是jersey 1.18。现在地址是:https://jersey.java.net/download.html。主页是:https://jersey.java.net/
    这个官网里面有详细的文档说明和demo已经想过的信息,支持spring的。
    下面是移动端的开发说明:
    (2)android端的也是使用的第三放的框架,使用的是android-async-http这个开源的库,下载地址是:https://github.com/loopj/android-async-http.
    这个开发者的官网是:http://loopj.com/,下面有好多开源的代码,值得学习。
    (3)IOS端的开发使用的是开发库是:AFNETworking这个优秀的开源库。下载学习地址是:https://github.com/AFNetworking/AFNetworking
    文档和资料在:http://cocoadocs.org/docsets/AFNetworking/2.0.0/,在其官网有很多好的资料哦,在ios我比较喜欢这个网络开源请求库,当然都有其他的开源库了,每个人都有各自的喜好而已,哈哈

    服务器的demo解释说明如下,手下是要搭建问服务,写个helloworld,jersey 我是在Tomcat下运行,
    需要的jar包如下,对于android开发者来说,有些相互依赖的包,对我们理解上有一点难,至于我只能一点点根据异常寻找我项目中需要的相互依赖包。
    所需要的包截图如下:
     
    下面我将上传我所需要的jar包:  lib.zip (3.87 MB, 下载次数: 15) 

    继续的是配置我的Web.xml文件如下
    其实也没怎么配置就是很简单的一个文件而已
    [XML] 查看源文件 复制代码
    ?
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee [url]http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd[/url]"
     id="WebApp_ID" version="2.5">
      <display-name>PicData</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
      </welcome-file-list>
       
      <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
          <param-name>com.sun.jersey.config.property.packages</param-name>
          <param-value>sample.hello.resources</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
       
      <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
      </servlet-mapping>
       
    </web-app>


    下面将要写的是一个单独上传图片的接口:
    [AppleScript] 查看源文件 复制代码
    @POST
    	@Path("uploadFile")
    	@Consumes(MediaType.MULTIPART_FORM_DATA)
    	@Produces(MediaType.APPLICATION_JSON)
    	public Fuck uploadFile(@FormDataParam("file") InputStream file,
    	@FormDataParam("fileName") String fileName) {
    		// String fileFullName = fileDisposition.getFileName();
    		if(file==null)
    		{
    			Fuck fuck = new Fuck();
    			fuck.setAb("传入的图片为null");
    			fuck.setB(-1);
    			return fuck;
    		}
    		
    		try {
    			File path = new File("D:/upload");
    			File filep = new File(path, fileName);
    			if (!filep.exists()) {
    				filep.createNewFile();
    			}
    			OutputStream outputStream = new FileOutputStream(filep);
    			// "D:\\upload", fileName
    			// + fileFullName.substring(fileFullName.indexOf("."),
    			// fileFullName.length())));
    			int length = 0;
    
    			byte[] buff = new byte[256];
    
    			while (-1 != (length = file.read(buff))) {
    				outputStream.write(buff, 0, length);
    			}
    			file.close();
    			outputStream.close();
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    		Fuck fuck = new Fuck();
    		return fuck;
    	}


    批量上图片有个问题是,不知道具体要上传几张图片的呢,所以写法和上述很多有很大差异
    代码如下:
    [Java] 查看源文件 复制代码
    ?
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    @POST
        @Path("addNewTopic")
        @Consumes(MediaType.MULTIPART_FORM_DATA)
        public Fuck addNewTopic(@FormDataParam("apiKey") String apiKey,
                @FormDataParam("text") String text,
                @FormDataParam("subject") String subject, FormDataMultiPart form) {
    //form 是所有的图片流,我们要从这里面取到每一张的图片,然后保存,
    // text subject apiKey 都是字段,这样我们就可以图片和一些数据一起上传,提交到数据中心去
            System.out.println("多图片上传");
            List<BodyPart> bp=    form.getBodyParts();
            for (BodyPart bodyPart : bp) {
                MediaType ty=bodyPart.getMediaType(); //因为用http上传东西,默认是String类型,这里是我们根据http协议定义类型取图片
                if(("octet-stream").equals(ty.getSubtype()))//要筛选规定的图片流,然后保存。
                {
                    System.out.println("bodyPart: "+bodyPart.getContentDisposition().getFileName());
                    InputStream is =bodyPart.getEntityAs(InputStream.class);
    //              File path = new File("D:/upload");
                    String fileLocation = System.currentTimeMillis()+bodyPart.getContentDisposition().getFileName();
                    writeToFile(is, fileLocation);//这个地方,一般用ftp上传到图片服务器,然后将路径写到我们的数据库中...
                }
                 
            } Fuck fuck = new Fuck();
    return fuck;}


    上面的核心代码就是这样的,也是服务器的代码,可以借鉴一下。


    下面是android的上传代码,(一定要服务器部署好了,才能上传,别瞎整)
    [Java] 查看源文件 复制代码
    ?
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public void Updata(View view) {
           AsyncHttpClient client = new AsyncHttpClient();
           RequestParams params=new RequestParams();
           params.put("fileName", mName);
           try {
               params.put("file", files.get(0));  //这里的file是java类中的File类型
           } catch (Exception e) {
               e.printStackTrace();
           }
           client.post(this, url, params, new TextHttpResponseHandler() {
                
               @Override
               public void onSuccess(int statusCode, Header[] headers, String responseString) {
                   Log.e("Tag", "请求:_ : onSuccess : "+responseString);
               }
                
               @Override
               public void onFailure(int statusCode, Header[] headers, String responseString,
                       Throwable throwable) {
                   Log.e("Tag", "请求:_ : onFailure : "+throwable.getMessage());
               }
           });
       }


    批量上传如下:
    [Java] 查看源文件 复制代码
    ?
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public void MulitePicUp(View view) {
            AsyncHttpClient client = new AsyncHttpClient();
            RequestParams params=new RequestParams();
            params.put("fileName", mName);
            params.put("apiKey", "apiKey");
            params.put("text", "text");
            params.put("subject", "subject");
            try {
    //            params.put("file", files.get(0));
                if(files.size()>0)
                {
                    for (int i = 0; i < files.size(); i++) {
                        params.put("file: "+i, files.get(i));//这里put File的时候,字段名字可以随意命名,但是put的字段名字不能一样,因为最后一个put的会覆盖掉前面的
    //这里的put有点类Set集合。
                    }
                
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            String url="http://192.168.0.146:8080/PicData/rest/hello/addNewTopic";
            client.post(this, url, params, new TextHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, String responseString) {
                    Log.e("Tag", "请求:_ : onSuccess : "+responseString);
                }
                 
                @Override
                public void onFailure(int statusCode, Header[] headers, String responseString,
                        Throwable throwable) {
                    Log.e("Tag", "请求:_ : onFailure : "+throwable.getMessage());
                }
            });
        }


    上面的file是因为我比较懒,写的一个集合List<File> files=new ArrayList<File>();

    下面是IOS代码的上传图片;
    单张上传:
    [Objective-C] 查看源文件 复制代码
    NSData *imageData = UIImagePNGRepresentation(image);
        NSString *URL = @"http://192.168.0.146:8080/PicData/rest/hello/uploadFile";
        NSMutableURLRequest *request =[[AFHTTPRequestSerializer serializer]
                                       multipartFormRequestWithMethod:@"POST"
                                       URLString:URL
                                       parameters:@{@"fileName":[NSString stringWithFormat:@"%@.png",[UserBean getUserId]]}
                                       constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
                                       {
                                           [formData appendPartWithFileData:imageData
                                                                       name:@"file"
                                                                   fileName:@"fileName"
                                                                   mimeType:@"image/png"];
                                       }];
        AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
        
        NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
            if (error) {
                NSLog(@"Error: %@", error);
            }
            else {
                NSLog(@"%@", responseObject);
                //    [UserBean setHeadUrl:savedImagePath];
                //    [self.tableView reloadData];
            }
        }];
        [uploadTask resume];


    批量上传如下:
    [Objective-C] 查看源文件 复制代码
    NSString *URL = @"http://192.168.0.146:8080/PicData/rest/hello/addNewTopic";
        NSMutableURLRequest *request =[[AFHTTPRequestSerializer serializer]
                                       multipartFormRequestWithMethod:@"POST"
                                       URLString:URL
                                       parameters:@{@"fileName":[NSString stringWithFormat:@"%@.png",[UserBean getUserId]]}
                                       constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
                                       {
                                           for (int i=0; i<pictureArr.count; i++) {  //这里的for循环,字段名字也是可以随意的,
                                               NSData *imageData = UIImagePNGRepresentation(pictureArr[i]);
                                               NSString *name=[NSString stringWithFormat:@"file%d",i];
                                               NSString *fileName=[NSString stringWithFormat:@"fileName%d.png",i];
                                               [formData appendPartWithFileData:imageData
                                                                           name:name
                                                                       fileName:fileName
                                                                       mimeType:@"application/octet-stream"];//主要的是这个mimeType类型设置,为什么呢,最后我再来表述一下,android会设置默认的也是这个类型,ios只能手写了
    
                                           }
                                          
                                       }];
        AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
        
        NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
            if (error) {
                NSLog(@"Error: %@", error);
            }
            else {
                NSLog(@"%@", responseObject);
            }
        }];
        [uploadTask resume];


    刚才说的是“application/octet-stream”,其本质就是一个Http content一个协议,属于Http协议,对照表如下:http://tool.oschina.net/commons




    展开全文
  • Android 和IOS平台的MD5加密

                 MD5加密广泛应用在各种项目中,而跨平台的项目需要保持加密结果一致性。 最近手头开发的IOS项目使用到了MD5加密,由于之前开发的是Android的版本,在迁移到IOS项目中时候,发现MD5加密结果不一样,调试良久才调通。  项目中还使用到了 3DES 加密解密,Android中和IOS中的加解密,由于使用了随机盐作为密钥,从网上找来的方法加密解密出来的值和Android端产生的值不一样难过,参数的设置真的很重要 。

     

       

    展开全文
  • IOS Java实现消息推送(APNS)

    千次阅读 2016-01-04 17:49:36
    至此IOS消息推送(JAVA后台)证书全部制作完毕。 下面开始上代码: 五、IOS端代码: 1、首先在项目的AppDelegate.m中加入以下两个代理方法 - (void)application:(UIApplication *)application ...

    转自: http://ytwhw.iteye.com/blog/1744148

     

    Push的原理:

    Push 的工作机制可以简单的概括为下图



     

    图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider。

    APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。

    上图可以分为三个阶段。

    第一阶段:Push服务器应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。 

    第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。 

    第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。

     



     

    从上图我们可以看到。

    1、首先是应用程序注册消息推送。

    2、 IOS跟APNS Server要deviceToken。应用程序接受deviceToken。

    3、应用程序将deviceToken发送给PUSH服务端程序。

    4、 服务端程序向APNS服务发送消息。

    5、APNS服务将消息发送给iPhone应用程序。

    无论是iPhone客户端跟APNS,还是Provider和APNS都需要通过证书进行连接的。下面介绍一下所用到证书的制作。

    一、CSR文件

     

    1、生成Certificate Signing Request(CSR)

      

     

    2、填写你的邮箱和常用名称,并选择保存到硬盘。

     

     

    点击继续:



     

    这样就在本地生成了一个PushTest.certSigningRequest文件。

     

     

    二、SSL certificate文件

     

    1、用你付过费的帐号登录到iOS Provisioning Portal,并创建Certificates(已创建可省略),如下图:



     

     

     

     点击Submit

     创建Certificate完毕。

    2、新建一个App ID

     点击New App ID

    输入Description,Bundle Identifier,点击Submit,新建App ID完毕。

    找到新建的App ID 点击右侧的Configure:



     Development Push SSL Certificate ,与Production Push SSL Certificate 区别在于一个是用于开发的推送证书,一个是用于发布产品的推送证书。两个证书获取到的终端deviceToken是不一样的,用两个证书生成的P12证书用于JAVA后台连接APNS的服务器地址也是不同的,Development Push SSL Certificate 对应连接的服务器地址是:gateway.sandbox.push.apple.com。Production Push SSL Certificate  对应连接的服务器地址是:gateway.push.apple.com。

    点击Development Push SSL Certificate一行后的Configure:

     点击Continue:




     

    选择前面生成好的PushTest.certSigningRequest文件,点击Generate,出现如下所示的页面:



    点击Continue:



     

     点击Download,下载生成的支持推送服务的证书(命名为:aps_development-6.cer)。

     

    点击Done,你会发现状态变成了Enabled:

     

    到现在为止,我们已经生成了两个文件:

    1、PushTest.certSigningRequest

    2、aps_development-6.cer(下载生成的支持推送服务的证书。)

    双击aps_development-6.cer注册到你的钥匙串中,这样你的钥匙串中就会有

     

    三、准备profile证书,因为推送消息只能在真机上测试,所以要建一个profile证书

     点击"new profile"为上面新建的APP ID建个profile ,成功之后下载pushtestdescDevprofile.mobileprovision

    双击将其加入到xcode 的Provisioning Profiles 中。

    四、生成JAVA后台用于连接APNS的证书:

    打开钥匙串

     
    选中Apple Development IOS Push Services:com.easecom.zhwgpushtestdesc,右键将其导出。

    导出用于JAVA后台连接APNS的P12证书。

     输入p12 证书的密码,本文中我用的是123456。记住这个密码,JAVA后台使用p12证书的时候要用到。

     输入访问钥匙串的密码:系统登陆密码。

    导出PushTest.p12证书完毕。

    到现在为止,我们已经生成了四个文件:

    1、PushTest.certSigningRequest

    2、aps_development-6.cer(下载生成的支持推送服务的证书。)

    3、pushtestdescDevprofile.mobileprovision
    4、PushTest.p12

    至此IOS消息推送(JAVA后台)证书全部制作完毕。

    下面开始上代码:

    五、IOS端代码:

    1、首先在项目的AppDelegate.m中加入以下两个代理方法

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
        NSString *token = [NSString stringWithFormat:@"%@", deviceToken]; 

        //获取终端设备标识,这个标识需要通过接口发送到服务器端,服务器端推送消息到APNS时需要知道终端的标识,APNS通过注册的终端标识找到终端设备。
        NSLog(@"My token is:%@", token);   
    }  

    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {   
        NSString *error_str = [NSString stringWithFormat: @"%@", error];   
        NSLog(@"Failed to get token, error:%@", error_str);   

    2、在AppDelegate.m的(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中加入注册消息通知推送能力;加入当应用程序处于未启动状态时,判断是否由远程消息通知触发;加入清除消息推送通知标记。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {

      //判断是否由远程消息通知触发应用程序启动

        if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]!=nil) {

            //获取应用程序消息通知标记数(即小红圈中的数字)

            int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
            if (badge>0) {

               //如果应用程序消息通知标记数(即小红圈中的数字)大于0,清除标记。

                badge--;

              //清除标记。清除小红圈中数字,小红圈中数字为0,小红圈才会消除。
                [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
            }
        }

        //消息推送注册
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge];

    }
    3、在项目AppDelegate.m中加入消息接收处理代理方法。

    //处理收到的消息推送
    - (void)application:(UIApplication *)application 
    didReceiveRemoteNotification:(NSDictionary *)userInfo
    {

        //在此处理接收到的消息。
        NSLog(@"Receive remote notification : %@",userInfo);
    }
    六、JAVA后台代码:

    public static void main(String[] args) throws Exception 
     {
            try
            {
                //从客户端获取的deviceToken,在此为了测试简单,写固定的一个测试设备标识。
               String deviceToken = "df779eda 73258894 5882ec78 3ac7b254 6ebc66fe fa295924 440d34ad 6505f8c4"

                System.out.println("Push Start deviceToken:" + deviceToken);
                //定义消息模式
                PayLoad payLoad = new PayLoad();
                payLoad.addAlert("this is test!");
                payLoad.addBadge(1);//消息推送标记数,小红圈中显示的数字。
                payLoad.addSound("default");
                //注册deviceToken
                PushNotificationManager pushManager = PushNotificationManager.getInstance();
                pushManager.addDevice("iPhone", deviceToken);
                //连接APNS
                String host = "gateway.sandbox.push.apple.com";
                //String host = "gateway.push.apple.com";
                int port = 2195;

                String certificatePath = "c:/PushTest.p12";//前面生成的用于JAVA后台连接APNS服务的*.p12文件位置
                String certificatePassword = "123456";//p12文件密码。
                pushManager.initializeConnection(host, port, certificatePath, certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
                //发送推送
                Device client = pushManager.getDevice("iPhone");
                System.out.println("推送消息: " + client.getToken()+"\n"+payLoad.toString() +" ");
                pushManager.sendNotification(client, payLoad);
                //停止连接APNS
                pushManager.stopConnection();
                //删除deviceToken
                pushManager.removeDevice("iPhone");
                System.out.println("Push End");
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }
     }
    }

    至此大功告成,测试通过。

    以上在Iphone4,IPAD2设备测试通过,Iphone3g,3gs需要打PushDoctor(推送医生)补丁才能测试通过。

    展开全文
  • 1、OC方面 Base64编码采取Google官方代码 GTMBase64 2、Android 方面采取 Android android.util.Base64源代码 3、后台Java
  • IOS Python JAVA

    2012-03-01 14:12:38
    Python -Objective C bridge http://pyobjc.sourceforge.net/downloads.html IOS JAVA http://iphoneroot.com/tutorial-install-java-on-the-iphone/ http://iphoneroot.com/tutorial-compile-and-run-jav
  • Minecraft:基于iOS Java版启动器。 导航 介绍 这是为了使Minecraft Java在越狱的iOS上运行。 最低要求:运行iOS 12或更高版本的设备。 建造 要求: Mac OS X(经过测试:10.15) XCode(经过测试:11.7.0) 已...
  • Minecraft:适用于iOSJava版启动器,基于PojavLauncher Android。 PojavLauncher_iOS Minecraft:基于PojavLauncher Android的iOS Java版启动器。 导航简介建筑物如何运作? 当前状态已知问题许可证贡献积分和第三...
  • IOS Java实现消息推送(APNS),包含bcprov-jdk15on-149.jar、javapns-jdk16-163.jar
  • 一项新的OpenJDK提议可以帮助消除Java开发人员在iOS上构建时遇到的一些障碍。 以前,在最好的情况下,在Apple设备上获取Java应用程序是后勤上的噩梦。 尽管已经为开发人员(例如Oracle ADF Mobile )提供了解决方法...
  • ios 推送 java 服务端程序 ,与苹果的Apns服务打交道,作为ios客户端程序的服务端(provider)。
  • ios&Java

    2013-05-07 18:44:18
    在这介绍一下与Java的区别和联系吧: (1) Objective-C 2.0版本之前是没有垃圾回收器的,但是2.0以后便支持了,但是Objective-C却支持retain/release方法 和 autorelease方法,必要时候,可以在程序中手动释放...
  • IOS推送Java实现

    2016-05-30 23:28:46
    IOS推送Java实现
  • IOSDialog.java

    2017-03-31 23:34:53
    仿IOSDialog
  • ios+java一条龙开发

    2014-12-02 18:59:37
    在app开发过程中,如果没有接口,那将是非常无助的一件...资源中包含了一个ios项目和一个java项目,还有非常详细的说明文档和效果截图,ios实现的主要功能有:登录,注册,列表展示数据,上拉时分页加载数据,文件上传
  • 一个Android IOS Java通用的AES128加密解密Demo、这个Demo可以满足用Java开发的后端接口、但是如果不巧你用的.net开发的后台程序、那么我们又应该怎么去编写后端的程序呢?今天给大家分享一个比较强大的Demo、可以...
  • xsf java ios andorid

    2016-11-10 11:34:34
    快速开发框架,java,andorid,ios,测试专用,欢迎测试。
  • ios推送java服务端

    2013-08-14 21:11:18
    ios消息推送java服务端实现 java push notification
  • DES加解密_iOS_Java.zip

    2020-03-07 13:42:30
    DES加解密工具,用于字符串加解密,经过测试iOSJava两端同步,里面有2个包安卓、iOS导入即可使用。
  • 我很高兴地宣布我的第一个开源项目java-plist-serializer可以帮助您将Java(尤其是基于Spring的应用程序)与iOS应用程序集成在一起。 背景 我正在将Java webapp作为后端并且客户端是iOS设备的项目。 最近,...
  • 完美解决aes在android和ios端的加解密public static final String VIPARA = "A-16-Byte-String"; public static final String bm = "UTF-8"; 三个端的编码和向量一定要相同
  • iOSjava语法对比

    千次阅读 2014-03-05 22:23:15
    很多想开发iOS,或者正在开发iOS的程序员以前都做过Java或者C++,当第一次看到Objective-C的代码时都会头疼,Objective-C的代码在语法上和Java, C++有着很大的区别,有的同学会感觉像是看天书一样。不过,语言都是...
  • 综合开发iosjava

    2014-06-13 17:24:36
    一、最简单的ios前台可以通过提交http请求来访问java借口,跟web开发一样的道理,前台后台通过post或者get传值,后台返回的数据可以是json或者xml Java后台一个webService么?暴露几个提供数据的接口,返回JSON或...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,508
精华内容 9,803
关键字:

iosjava

java 订阅