IOS推送通知+服务端实现

需求ios developer文件(自行获取解决)
aps_development.cer                 推送证书
aps_development.p12                 钥匙串导出的p12文件
ios_development.cer                 开发者证书
CSRequest.certSigningRequest        从请求机构请求的request文件---(本文不需要)
PushTest.mobileprovision            推送描述文件---(本文不需要)
AuthKey.p8                          推送p8文件---firebase推送需要(本文自定义推送)

一、前端实现在

下载查看QMNetNotification.h QMNetNotification.m

AppController.m中修改
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    [[QMNetNotification sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
    ...
}

//远端推送需要获取设备的Device Token
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [[QMNetNotification sharedInstance] didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    ...
    [[QMNetNotification sharedInstance] applicationDidBecomeActive];
    ...
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    [[QMNetNotification sharedInstance] didReceiveRemoteNotification:userInfo];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    completionHandler(UIBackgroundFetchResultNewData);
    [[QMNetNotification sharedInstance] didReceiveRemoteNotification:userInfo];
}

二、后端实现

1、cert.pem文件生成
openssl x509 -in aps_development.cer -inform DER -outform PEM -out cert.pem 

2、key.pem文件生成
openssl pkcs12 -in aps_development.p12 -out key.pem -nodes

3、验证
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert cert.pem -key key.pem

4、nodejs实现
需要安装apn: node install apn

const apn = require("apn");

var deviceToken = "d95f950dcc65735f1bb54adxxxxbf0775983xxxx49604ed308af0b6c3c66xxxx";(硬件ID前端可以获取)
或者
var deviceToken = ["d95f950dcc65735f1bb54adxxxxbf0775983xxxx49604ed308af0b6c3c66xxxx"];
var options = {
    cert: "cert.pem",
    key: "key.pem",
    production: false
};

var apnProvider = new apn.Provider(options);

var note = new apn.Notification();
// note.expiry = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now.
note.badge = 1;
note.sound = "";
note.alert = "测试通知消息";
note.payload = {'messageFrom': '你擦我擦'};
note.topic = "com.xxxx.xxxx";

apnProvider.send(note, deviceToken).then( function (result) {
    console.log("sent: --------", result.sent);
    console.log("failed: ---22-",result.failed.length);
    console.log("failed: ---11-", result.failed);
});

apnProvider.shutdown();

三、其他知识点

1、本地推送UILocalNotification的applicationIconBadgeNumber属性只会影响角标的显示,不会影响通知栏的通知处理。

        1)当applicationIconBadgeNumber>0时,角标会随applicationIconBadgeNumber而变化。

        2)当applicationIconBadgeNumber=0时,角标维持推送前状态不变。

        3)当applicationIconBadgeNumber<0时,角标置0不显示。

  2、远程推送的badge字段,只会影响角标的显示,不会影响通知栏的通知处理。

       1)当badge>0时,角标会随badge而变化。

       2)当badge=0时,角标维持不变。

       3)当badge<0时,角标维持不变。

 3UIApplicationapplicationIconBadgeNumber属性既会影响角标的显示,又会影响通知栏通知的处理。

       1)当applicationIconBadgeNumber>0时,角标会随之变化,通知栏通知不变。

       2)当applicationIconBadgeNumber=0时,角标变为0不显示,通知栏通知清空。

       3)当applicationIconBadgeNumber<0时,角标变为0不显示,通知栏通知清空。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值