# react-native-mipush
该项目基于小米推送,使用前,请先在小米开发者后台注册app,并获取对应的appid与appkey。
开发环境:xcode8、react-native
##作者
QQ: 289459798
QQ群: 161263093
欢迎更多的喜欢开源的小伙伴加入
##安装
```
// rn > 0.4.x
npm install react-native-xmpush --save
// rn < 0.4.x
npm install react-native-xmpush@0.1.2 --save
react-native link
```
##android
项目的`AndroidManifest.xml`文件中增加下面代码:
```xml
// 一下代码放在 applacation 标签下
// 1111 替换成在小米申请的appid
// 2222 替换成在小米申请的appkey
// 千万注意要保留数字前面的冒号
```
##ios
==必须通过xcode8开发的项目==
ios需要先制作推送证书,具体教程请自行百度。
本项目是基于`RCTPushNotification`,请将RCTPushNotification拖动到`Libraries`目录下。
添加所需依赖库:
- UserNotifications.framework
- libresolv.dylib(tbd)
- libxml2.dylib(tbd)
- libz.dylib(tbd)
- SystemConfiguration.framework
- MobileCoreServices.framework
- CFNetwork.framework
- CoreTelephony.framework
在`target`的`Capabilities`选项卡打开`Push Notifications`
在`target`的`Build Phases`选项卡添加`Link Binary With Libraries`:
> libRCTPushNotification.a
> libRCTMIPushModule.a
在targets->Build Settings下面搜索 Header Search Paths,添加
> $(SRCROOT)/../node_modules/react-native-xmpush/ios/RCTMIPushModule
>
> $(SRCROOT)/../node_modules/react-native/Libraries/PushNotificationIOS
设置为 `recursive`
打开工程下`Info.plist`文件为源代码形式打开,添加以下信息:
```
MiSDKAppID
1000888
MiSDKAppKey
500088888888
MiSDKRun
Online
```
修改 AppDelegate.m 文件:
```oc
...
#import "RCTMIPushModule.h"
#import "RCTPushNotificationManager.h"
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
[RCTMIPushModule application:application didFinishLaunchingWithOptions:launchOptions];
...
}
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
[RCTMIPushModule application:application didRegisterUserNotificationSettings:notificationSettings];
...
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[RCTMIPushModule application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
...
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification
{
[RCTMIPushModule application:application didReceiveRemoteNotification:notification];
...
}
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
[RCTMIPushModule application:application didReceiveLocalNotification:notification];
...
}
// ios 10
// 应用在前台收到通知
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
[RCTMIPushModule userNotificationCenter:center willPresentNotification:notification withCompletionHandler:completionHandler];
...
}
// 点击通知进入应用
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
[RCTMIPushModule userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler];
....
completionHandler();
}
```
##RN中使用
Demo:
**android**
```js
...
import MIPush from 'react-native-mipush';
...
componentWillUnmount() {
MIPush.unsetAlias("oooooo");
MIPush.removeEventListener("xmpush_click");
MIPush.removeEventListener("xmpush_notify");
}
componentDidMount() {
MIPush.setAlias("oooooo");
MIPush.addEventListener("xmpush_click", (notification) => {
console.log("app运行过程中点击通知:", notification);
});
MIPush.addEventListener("xmpush_notify", (notification) => {
console.log("app接收到通知:", notification);
});
MIPush.getInitialNotification((notification) => {
console.log("app关闭时获取点击通知消息:", notification);
});
}
```
**ios**
```js
...
componentWillUnmount() {
MIPush.unsetAlias("bbbbbb");
MIPush.removeEventListener("notification");
}
componentDidMount() {
MIPush.setAlias("bbbbbb");
MIPush.setBadgeNumber(0); // 每次进入app将角标设置为0
MIPush.addEventListener("notification", (notification) => {
console.log("app接收到通知:", notification);
// 弹出确认框
});
MIPush.getInitialNotification((notification) => {
console.log("app关闭时获取点击通知消息:", notification);
// 弹出确认框
});
}
...
```
暂支持的所有方法:
```js
/**
* 设置别名
* @param text
*/
setAlias(text);
/**
* 注销别名
* @param text
*/
unsetAlias(text);
/**
* 设置主题,类似tag
* @param text
*/
subscribe(text);
/**
* 注销主题
* @param text
*/
unsubscribe(text);
/**
* 设置账号,一个账号需要多台设备接收通知
* @param text
*/
setAccount(text);
/**
* 注销账号
* @param text
*/
unsetAccount(text);
/**
*
* @param type
* ios :
* notification => 监听收到apns通知
* localNotification => 监听收到本地通知
* register => 注册deviceToken 通知
*
* android :
* xmpush_notify => 监听收到推送
* xmpush_click => 监听推送被点击
* xmpush_message => 监听收到透传消息
* @param handler
*/
addEventListener(type, handler);
removeEventListener(type);
/**
* 发送一个本地通知
* @param notification
*/
presentLocalNotification(notification);
/**
* 清除指定通知
* @param notifyId
* ios : userInfo
* android : id
*/
clearNotification(notifyId);
/**
* 清除所有通知
*/
clearNotifications();
/**
* 设置角标,仅支持ios
* @param num
*/
setBadgeNumber(num);
/**
* 通过点击通知启动app
* @param handler
*/
getInitialNotification(handler);
```