iOS开发 技术集锦OC开发iOS Developer

iOS中不一样的推送---PushKit

2017-04-18  本文已影响1263人  mirrorzyb

PushKit是一种新的消息通知方式,旨在帮助voip应用(iOS 8)和watch OSComplication(iOS 9)减少电池的使用,提供更好的用户体验,app可以通过PushKit进行唤醒,进行一些操作,而不被用户感知。

PushKit和APNS的区别

PushKit的使用

申请证书

和申请其他证书一样,但是voip证书并不区分生产和测试,只有一个


证书申请

下载证书 voip_services.cer

app配置

打开Push Notifications开关 和 Background Modes里的Voice over IP开关

Push Notifications background Modes

代码设置

在AppDelegate中,导入#import <PushKit/PushKit.h>
⚠️ 这是一个iOS 8 以上的库

在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中进行初始化设置。

PKPushRegistry * voipRegistry = [[PKPushRegistry alloc]initWithQueue:dispatch_get_main_queue()];
    
    voipRegistry.delegate = self;
    voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];

接收Token的方法,这个Token是区别于APNS的Token的,两个不是一回事。并且这个Token无论App卸载重装,都是唯一的

- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type{
    
    
    NSString *str = [NSString stringWithFormat:@"%@",credentials.token];
    
    NSString * tokenStr = [[[str stringByReplacingOccurrencesOfString:@"<" withString:@""]
                            stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"TOKEN =     %@",tokenStr);
}

接收消息的方法,打印一下

- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type {

    NSDictionary *dic = [payload.dictionaryPayload objectForKey:@"aps"];
    NSLog(@"******************* push Kit %@***********************",dic);
}

测试

测试一下,这里用PHP进行推送,要注意的是,一些第三方平台是不支持PushKit的。

Java需要p12的证书,php需要pem,这里需要将证书和专用密钥导出(.p12),转换成.pem 然后再将两个.pem合并起来

钥匙串
openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12
openssl pkcs12 -nocerts -out key.pem -in key.p12
cat cert.pem key.pem > ck.pem

PHP代码

<?php
$deviceToken = '*******************';
//ck.pem密码
$pass = '123456';   
//消息内容
$message = 'A test message!';
//数字
$badge = 4;
$sound = 'default';
$body = array();
$body['aps'] = array('alert' => $message);
//把数组数据转换为json数据
$payload = json_encode($body);
echo strlen($payload),"\r\n";
 $ctx = stream_context_create([
            'ssl' => [
                'verify_peer'      => false,
                'verify_peer_name' => false
                // 'cafile'           => '/path/to/bundle/entrust_2048_ca.cer',
            ]
        ]);
// $pem = dirname(__FILE__) .'/'.'ck.pem';
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');  
stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
$fp = stream_socket_client('tls://gateway.sandbox.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp) {
    print "Failed to connect $err $errstr\n";
    return;
}
else {
   print "Connection OK\n<br/>";
}
// send message
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;
print "Sending message :" . $payload . "\n";  
fwrite($fp, $msg);
fclose($fp);
/*
35 Connection OK 
Sending message :{"aps":{"alert":"A test message!"}} �
*/

cd 到当前目录 执行php -f php文件名.php

出现这个则表示成功了


终端

再来看看Xcode


Xcode

如果你的应用想要使用PushKit,那么最好在提交AppStore时拍摄一个视频来证明你的App是有用到Voip的(拍摄一下你们App通话时进入后台状态栏的显示一般就可以了),否则被拒的可能性很大
我尝试提交了一下,被拒原因如下:

2017年4月20日 上午1:37
发件人 Apple

  1. 1 Performance: App Completeness
    Guideline 2.1 - Information Needed

We have started the review of your app, but we are not able to continue because we need access to a video that demonstrates your app in use on an iOS device. Specifically, please show voip functionality of your app.

Next Steps

To help us proceed with the review of your app, please provide us with a link to a demo video in the App Review Information section of iTunes Connect and reply to this message in Resolution Center.

To provide a link to a demo video:

  • Log in to iTunes Connect

Once this information is available, we can continue with the review of your app.

大家有想法一起交流,共同学习。

上一篇下一篇

猜你喜欢

热点阅读