近期由于产品需求,需要在react-native项目上集成友盟推送,笔者翻阅各种这方面资料后,看到RN论坛上面有位大神给出了具体的集成方案,请参考:react-native-umeng-push。 不过笔者测试后发现ios很是顺畅,能够正常接收到消息,但是android却各种不行,官网查询的结果是“无状态”或者“离线”,各种尝试后终于没能成功。无奈之下将友盟的sdk升级到最新的4.0版本,最后终于可以收到推送了。不过目前只针对android进行了集成,ios这边不熟悉语言,以后会抽空补上。
npm install react-native-upush
react-native link
注意:笔者是针对友盟sdk4.0的集成教程,pushsdk 2.8版本传送门:react-native-umeng-push。
由于这个库依赖于react-native-upush-sdk,需要在你的工程settings.gradle文件中添加pushsdk。
include ':pushsdk'
project(':pushsdk').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-upush-sdk/android/pushsdk')
注意:友盟的官方规定一定要在项目的主进程中进行初始化操作,所以我们可以将初始化的方法放在MainApplication中的onCreate中。关键参考代码:
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
....
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new UPushPackage()
);
...
};
@Override
public void onCreate() {
super.onCreate();
//友盟配置
UMConfigure.init(this, "your key", null, UMConfigure.DEVICE_TYPE_PHONE, "your secret");
//推送服务注册
registerUPush();
SoLoader.init(this, /* native exopackage */ false);
}
private void registerUPush() {
PushAgent mPushAgent = PushAgent.getInstance(this);
//注册推送服务
mPushAgent.register(new IUmengRegisterCallback() {
@Override
public void onSuccess(String deviceToken) {
...
}
@Override
public void onFailure(String s, String s1) {
...
}
});
PushAgent.getInstance(this).onAppStart();
}
}
1、android获取不到deviceToken问题?
2、设备不在状态、离线问题或pushservice服务问题?
注:如果是android6.0以上的api编译,需要在pushsdk的build.gradle文件的android{}块内添加
useLibrary 'org.apache.http.legacy'。
API | Note |
---|---|
getDeviceToken | 获取DeviceToken |
onReceiveListener | 接收到推送消息回调的方法 |
onOpenListener | 点击推送消息打开应用回调的方法 |
import UPush from 'react-native-upush';
export default class App extends Component {
constructor(props) {
super(props);
}
componentDidMount(){
UPush.getDeviceToken(deviceToken => {
console.log("deviceToken: ", deviceToken);
});
UPush.onReceiveListener((msg)=>{
console.log(msg);
});
UPush.onOpenListener((msg)=>{
console.log(msg);
});
}
render() {
return (
<View style={styles.container}>
</View>
);
}
}
liuchungui/react-native-umeng-push
- 欢迎大家Pull Request
- 有什么疑问,欢迎提问题
- 觉得好的,来一个star