美文网首页React NativeReactNativeReact-Native开发大全
react native极光推送全程教程android和ios

react native极光推送全程教程android和ios

作者: liu_520 | 来源:发表于2016-11-12 13:33 被阅读15880次

    此处我用的是jpush-react-native,这个是极光官网维护的,还有一个是react-antive-jpush,这是中文网的,我这里没用这个

    上一篇讲了如何申请ios的开发和生产证书的流程,http://blog.csdn.net/liu__520/article/details/53133497

    先按照官网的步骤来呗:(为了了解具体的过程,我都是用手动配置的,没有用自动配置)

    今天是2017年2月16日,现在的RN版本是0.41.2,

    for latest RN, use latest

    for RN < 0.40.0, use v1.3.6

    for jpush-react-native > 1.4.4, need install jcore-react-native

    如果你的RN版本小于0.40.0,用极光的1.3.6版本;

    如果>=0.40.0,就要用最新的;

    而且如果jpush-react-native > 1.4.4,需要用到jcore-react-native

    一、手动配置

    1.1、进入你的项目目录,然后打开命令终端输入:

    `npm install jpush-react-native --save`

    `rnpm link jpush-react-native`

    1.2、android版的具体配置:

    使用 Android Studio import 你的 React Native 应用(选择你的 React Native 应用所在目录下的 android 文件夹即可)

    修改 android 项目下的 settings.gradle 配置:

    打开setting.gradle,然后添加如下代码:

    include ':app', ':jpush-react-native'

    project(':jpush-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jpush-react-native/android')

    修改app 下的 AndroidManifest 配置,将 jpush 相关的配置复制到这个文件中,参考 demo 的 AndroidManifest:(增加了 部分)

    你的 react native project/android/app/AndroidManifest.xml

    android:name=".MainApplication"

    android:allowBackup="true"

    android:icon="@drawable/ic_launcher"

    android:label="@string/app_name"

    android:theme="@style/AppTheme">

    android:name=".MainActivity"

    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

    android:label="@string/app_name">

    修改 app 下的 build.gradle 配置:

    your react native project/android/app/build.gradle

    android {

        defaultConfig {

            applicationId "yourApplicationId" 

           ...

             manifestPlaceholders = [

                              JPUSH_APPKEY: "yourAppKey", //在此替换你的APPKey

                              APP_CHANNEL: "developer-default"    //应用渠道号,默认就好

                      ]

               }

     }

    ...

    dependencies {

        compile fileTree(dir: "libs", include: ["*.jar"])

         compile project(':jpush-react-native')

        compile "com.facebook.react:react-native:+"  // From node_modules

     }

    将此处的 yourApplicationId 替换为你的项目的包名;yourAppKey 替换成你在官网上申请的应用的 AppKey。到此为止,配置完成。

    现在重新 sync 一下项目,应该能看到 jpush-react-native 作为一个 android Library 项目导进来了

    使用

    RN 0.29.0 以下版本

    打开 app 下的 MainActivity,在 ReactInstanceManager 的 build 方法中加入 JPushPackage:

    app/MainActivity.java

    RN 0.29.0 以上版本

    打开 app 下的 MainApplication.java 文件,然后加入 JPushPackage,参考 demo:

    app/MainApplication.java

    private boolean SHUTDOWN_TOAST = false;

    private boolean SHUTDOWN_LOG = false;

    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {

             @Override

             protected boolean getUseDeveloperSupport() {

                  return BuildConfig.DEBUG;

              }

            @Override

            protected List getPackages() {

                    return Arrays.asList(

                                    new MainReactPackage(),

                                   new JPushPackage(SHUTDOWN_TOAST, SHUTDOWN_LOG)

                       );

                 }

         };

    1.3、ios配置

    iOS Usage

    打开 iOS 工程,在 rnpm link 之后,RCTJPushModule.xcodeproj 工程会自动添加到 Libraries 目录里面

    在 iOS 工程 target 的 Build Phases->Link Binary with Libraries 中加入如下库

    libz.tbd

    CoreTelephony.framework

    Security.framework

    CFNetwork.framework

    CoreFoundation.framework

    SystemConfiguration.framework

    Foundation.framework

    UIKit.framework

    UserNotifications.framework

    libresolv.tbd

    在 AppDelegate.h 文件中 填写如下代码,这里的的 appkey、channel、和 isProduction 填写自己的

    static NSString *appKey = @"";    //填写appkey

    static NSString *channel = @"";    //填写channel  一般为nil

    static BOOL isProduction = false;  //填写isProdurion  平时测试时为false ,生产时填写true

    在AppDelegate.m 的didFinishLaunchingWithOptions 方法里面添加如下代码

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

    {

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {

    //可以添加自定义categories

    [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |

    UIUserNotificationTypeSound |

    UIUserNotificationTypeAlert)

    categories:nil];

    } else {

    //iOS 8以前 categories 必须为nil

    [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |

    UIRemoteNotificationTypeSound |

    UIRemoteNotificationTypeAlert)

    categories:nil];

    }

    [JPUSHService setupWithOption:launchOptions appKey:appKey

    channel:channel apsForProduction:isProduction];

    }

    在AppDelegate.m 的didRegisterForRemoteNotificationsWithDeviceToken 方法中添加 [JPUSHService registerDeviceToken:deviceToken]; 如下所示

    - (void)application:(UIApplication *)application

            didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

            [JPUSHService registerDeviceToken:deviceToken];

    }

    为了在收到推送点击进入应用能够获取该条推送内容需要在 AppDelegate.m didReceiveRemoteNotification 方法里面添加

    [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo] 方法,

    注意:这里需要在两个方法里面加一个是iOS7以前的一个是iOS7即以后的,如果AppDelegate.m 没有这个两个方法则直接复制这两个方法,

    在 iOS10 的设备则可以使用JPush 提供的两个方法;如下所示

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    // 取得 APNs 标准信息内容

    [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];

    }

    //iOS 7 Remote Notification

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:  (NSDictionary *)userInfo fetchCompletionHandler:(void (^)  (UIBackgroundFetchResult))completionHandler {

    [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];

    }

    // iOS 10 Support

    - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {

          // Required

           NSDictionary * userInfo = notification.request.content.userInfo;

            if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

           [JPUSHService handleRemoteNotification:userInfo];

          [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];

            }

    completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置

    }

    // iOS 10 Support

    - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

    // Required

            NSDictionary * userInfo = response.notification.request.content.userInfo;

            if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

            [JPUSHService handleRemoteNotification:userInfo];

           [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];

         }

    completionHandler();  // 系统要求执行这个方法

    }

    1.3.1、下面直接放我的代码图吧,上面的代码都是官网的,但是有几个地方是需要修改的,也是需要增加的,要不然各种报错,:

    1.3.2、还有一个最重要的,把github上极光的代码都放到你的这个AppDelegate.m文件中,然后加一个接口

    @interfaceAppDelegate();

    而且用官网的代码会提示下面的警告信息:

    /Users/vittorio/Desktop/log/ios/log/AppDelegate.m:39:55: 'UIRemoteNotificationTypeBadge' is deprecated:

    first deprecated in iOS 8.0 - Use UserNotifications Framework's UNAuthorizationOptions for user notifications

    and registerForRemoteNotifications for receiving remote notifications instead.

    需要把代码里面的UIRemoteNotificationType改成:UNAuthorizationOption

    具体看我以下的代码:

    /**

    * Copyright (c) 2015-present, Facebook, Inc.

    * All rights reserved.

    *

    * This source code is licensed under the BSD-style license found in the

    * LICENSE file in the root directory of this source tree. An additional grant

    * of patent rights can be found in the PATENTS file in the same directory.

    */

    #import "AppDelegate.h"

    #import "RCTBundleURLProvider.h"

    #import "RCTRootView.h"

    // ---------------------------start极光推送--------------------------

    #import "JPUSHService.h"

    #import

    #import

    #ifdef NSFoundationVersionNumber_iOS_9_x_Max

    #import

    #endif

    @interface AppDelegate ()

    // ---------------------------end极光推送---------------------------

    @end

    @implementation AppDelegate

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

    {

    // ---------------------------start极光推送--------------------------

    //Required

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {

    JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];

    entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;

    [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];

    }

    else if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {

    //可以添加自定义categories

    [JPUSHService registerForRemoteNotificationTypes:(UNAuthorizationOptionBadge |

    UNAuthorizationOptionSound |

    UNAuthorizationOptionAlert)

    categories:nil];

    }

    else {

    //categories 必须为nil

    [JPUSHService registerForRemoteNotificationTypes:(UNAuthorizationOptionBadge |

    UNAuthorizationOptionSound |

    UNAuthorizationOptionAlert)

    categories:nil];

    }

    [JPUSHService setupWithOption:launchOptions appKey:appKey

    channel:nil apsForProduction:nil];

    // ---------------------------end极光推送--------------------------

    NSURL *jsCodeLocation;

    jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];

    RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation

    moduleName:@"log"

    initialProperties:nil

    launchOptions:launchOptions];

    rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    UIViewController *rootViewController = [UIViewController new];

    rootViewController.view = rootView;

    self.window.rootViewController = rootViewController;

    [self.window makeKeyAndVisible];

    return YES;

    }

    // ---------------------------start极光推送--------------------------

    //-----------------------------------------------------------------------

    - (void)application:(UIApplication *)application

    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    [JPUSHService registerDeviceToken:deviceToken];

    }

    //-----------------------------------------------------------------------

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    // 取得 APNs 标准信息内容

    [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];

    }

    //iOS 7 Remote Notification

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:  (NSDictionary *)userInfo fetchCompletionHandler:(void (^)  (UIBackgroundFetchResult))completionHandler {

    [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];

    }

    // iOS 10 Support

    - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {

    // Required

    NSDictionary * userInfo = notification.request.content.userInfo;

    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

    [JPUSHService handleRemoteNotification:userInfo];

    [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];

    }

    completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置

    }

    // iOS 10 Support

    - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

    // Required

    NSDictionary * userInfo = response.notification.request.content.userInfo;

    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

    [JPUSHService handleRemoteNotification:userInfo];

    [[NSNotificationCenter defaultCenter] postNotificationName:kJPFDidReceiveRemoteNotification object:userInfo];

    }

    completionHandler();  // 系统要求执行这个方法

    }

    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

    //Optional

    NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);

    }

    // ---------------------------end极光推送--------------------------

    @end

    1.3.3、然后需要选择描述配置的东西吧:

    具体看下面的两张图:

    1.3.4、打开项目---capacities---打开push notifications,

    1.3.5、打开项目--build settings---signing---code signing identify,都改成 ios developer,

    1.3.6、然后把tests的signing也要改一下,要不然安装到真机上会报错的:

    到此为止,配置基本就完成了,

    2、下面我们在RN上进行操作了:

    下面分两部分进行:2.1、普通推送;2.2、别名推送

    2.1、普通的推送

    打开js文件我的是在主页上进行的,

    具体的代码如下:

    componentDidMount() {

              //---------------------------------android start---------------------------------

              JPushModule.addReceiveCustomMsgListener((message) => {

              //这是默认的通知消息

            //  this.setState({pushMsg:message});

            });

           JPushModule.addReceiveNotificationListener((map) => {

          //自定义推送的消息

           //console.log("alertContent: " + map.alertContent);

         //extra是可选配置上的附件字段

         //console.log("extras: " + map.extras);

         var message = JSON.parse(map.extras);

           this.storeDB(message);//我这里是把内容存在了数据库里面,你可以把这里的message放到state里面显示出来

          //这里面解析json数据,并存在数据库中,同时显示在通知栏上

         })

         //点击通知进入应用的主页,相当于跳转到制定的页面

         JPushModule.addReceiveOpenNotificationListener((map) => {

        //console.log("Opening notification!");

        this.props.navigator.replace({name: "HomePage",component:HomePage});

        })

        //---------------------------------android end---------------------------------

        //---------------------------------ios start---------------------------------

         NativeAppEventEmitter.addListener(

         'ReceiveNotification',

         (message) => {

                    //下面就是发送过来的内容,可以用stringfy打印发来的消息

                   console.log("content: " + JSON.stringify(message));

               //下面的json就是我在极光推送上的附件字段内容就是上面的log打印出来的东西

            // {

            //    "_j_msgid": 4572771355, 

           //    "content": "日志第一天", 

           //    "time": "2016-11-18/13:11:09", 

           //    "aps": {

                              //        "sound": "default",  

                            //        "badge": 1, 

                          //        "alert": "测试ios1" 

               //    }, 

           //    "name": "刘成",

            //    "age": "28", 

           //    "性别": "男",

           //"qq":"674668211",

         //"手机号":"674668211",

          // } console.log("_j_msgid:" + message._j_msgid);

             //这个是极光的消息id console.log("content:" + message.content);

            //这是标题 console.log("aps:" + message.aps.sound);

            //这是声音 console.log("aps:" + message.aps.badge);

             //这是上标 console.log("aps:" + message.aps.alert);

             //这是发送通知的主内容 this.storeDB(message); } );

           //---------------------------------ios end---------------------------------

    }

    //最后在组件卸载的时间取消监听:

    componentWillUnmount() {

           JPushModule.removeReceiveCustomMsgListener();

          JPushModule.removeReceiveNotificationListener();

          BackAndroid.removeEventListener('hardwareBackPress');

          NativeAppEventEmitter.removeAllListeners();

         DeviceEventEmitter.removeAllListeners();

      }

    上面的android的推送内容都在message.content里面,附加的数据在message.extras,

    message就是发送过来的消息内容:addReceiveNotificationListener

    如果你没有附加的消息,只是显示消息内容,用这个方法就行了:addReceiveCustomMsgListener

    如果你要点击通知打开某个应用,用:addReceiveOpenNotificationListener

    ios的要用到注册监听事件:

    NativeAppEventEmitter.addListener

    消息内容都在message里面,可以看下我的示例,结合我极光推送的附加字段:就会明白的//我这里是把内容存在了数据库里面,

    你可以把这里的message

    放到state里面显示出来

    2.2、别名推送

    setAlias有三个参数,第一个是你要推送的别名,要注册到极光的,第二和第三个分别是设置成功的回调、设置失败的回调

    import JPushModule from 'jpush-react-native';

    '您的别名' !== '' ? (JPushModule.setAlias('您的别名',this.success,this.fail)):null

    success=()=>{

        NativeAppEventEmitter.addListener( 'ReceiveNotification', (message) => {JPushModule.setBadge(0,function(){

        // console.log(message)

        })} );

      //---------------------------------android start---------------------------------

        JPushModule.addReceiveCustomMsgListener((message) => {

        //这是默认的通知消息

        // console.log(message)

        });

        JPushModule.addReceiveNotificationListener((map) => {

        //  var message = JSON.parse(map.extras);

        });

        //点击通知进入应用的主页

        JPushModule.addReceiveOpenNotificationListener((map) =>       {})

        //---------------------------------android end---------------------------------

        }

       fail=()=>{

       }

    总的来说

    3、最后给大家看下我的极光推送的内容吧:

    相关文章

      网友评论

      • 会飞的鱼儿_0012:请教下,能接收到推送消息,点击后怎么判断跳转到指定页面
        liu_520:@会飞的鱼儿_0012 那就需要看你的路由怎么写了,使用路由跳转
      • 5ec1da87f063:我这边安装完push库之后,iOS里面自动多了些代码.
        就是一些 [JPUSHService setupWithOption:launchOptions appKey:@"0000000000000000"
        channel:nil apsForProduction:nil];之类的.我看你的文章说还需要自己手写代码再appDelegate.m里面.这样吗?
      • 9d4547e2a1a9:你好 ios 在哪里能看到console.log 打印出来的内容呢!
        liu_520:@漫漫流年 没遇到过,你看下rn的issues 有没有
        9d4547e2a1a9:@liu_520 我是在真机上运行 通过摇晃手机可以在xcode中查看打印输出 但是xcode中一直再报一个错误:
        2018-03-10 15:41:34.984473+0800 pluto[631:188430] [] nw_connection_get_connected_socket 17 Connection has no connected handler
        2018-03-10 15:41:34.984610+0800 pluto[631:188430] TCP Conn 0x1c0172780 Failed : error 0:61 [61]
        但是不影响运行 就是无休止的在报 是什么原因呢
        liu_520:在谷歌浏览器看console,xcode也可以的,你可以在console的打印内容前面加上前缀啥的标记下,在xcode里面搜索下前缀就行了,比如:console.log("刘成"+your data);
      • 妄自:我在极光推送中,点击发送出来这些:
        如果是群发:则此应用还没有一个客户端用户注册。请检查 SDK 集成是否正常。
        如果是推送给某别名或者标签:则此别名或者标签还没有在任何客户端SDK提交设置成功。
        如果是根据 Registration ID 推送:则此 Registration ID 不存在。

        大大请问这是怎么回事?
        liu_520:@妄自 这是极光后台决定的,我们控制不了
        妄自:@liu_520 这个后台是在xcode配置,还是在极光推送官网里面配置?大大,真心求答案,谢谢了
        liu_520:@妄自 极光后台没有注册成功
      • 976dddb20236:如果杀死APP并不能接受到消息 这是什么原因? 是还要配置其他code?
        976dddb20236:@liu_520 哦 原来如此
        liu_520:@刘高俊 因为android的推送服务进程会被杀掉,自然收不到,这涉及到进程保活,一般不好解决,可以用小米推送或者华为推送,争对不同品牌手机,分别处理
      • 缇拉亚太:fatal error: 'React/RCTDefines.h' file not found 这个错误
        liu_520:@瘦马流年 没遇到过这个,百度下,或者问下极光的客服
      • 缇拉亚太:ios react-native link 之后编译报错遇到过没
        liu_520:@瘦马流年 报啥错你直接在xcode里面看,然后再找下问题如何解决的
      • 还没想到叫什么:iOS的生产环境一直收不到推送,这是为什么呢
        liu_520:@还没想到叫什么 配置没配好
      • cdd7bd930c44:别名推送没看懂,麻烦能详细一点讲解一下吗
        liu_520:@cdd7bd930c44 直接用setalias就行了,第一个参数是你的设备别名,剩下的是回调函数
      • cdd7bd930c44:您好,配置完了也启动了,不保存什么的,但就是接受不到消息
        ,之前这个推送是ios用过的,请问你知道吗
        cdd7bd930c44:麻烦问下didRegisterForRemoteNotificationsWithDeviceToken函数也不执行,注册失败的也不执行didFailToRegisterForRemoteNotificationsWithError,知道怎么回事吗,就是接收不到消息
        cdd7bd930c44:@liu_520 嗯嗯,好的
        liu_520:@cdd7bd930c44 仔细检查下你的配置,一步步来,应该是没问题的
      • 还没想到叫什么:您好,请教你一个问题,在ios里面 NativeAppEventEmitter.addListener('ReceiveNotification',(message)=>{ });这个方法,为什么只有应用在前台的时候才会调用呢?我主要是想做当用户点击通知的时候,我要让应用跳转到指定的界面,怎么处理呢
      • 还没想到叫什么:你好,如果用户不允许推送,那这个推送需要告诉后台吗
      • 677e2693e728:你好, 我的安卓端已经可以接受到推送,但是为什么点击推送不会打开应用
        liu_520:@chuhangyu 结合官方的说明,在接受通知里调用跳转方法
      • 红叶丶秋鸣:请问你点击通知后能跳转到指定页面吗?我使用react-navigation,不能实现跳转
        liu_520:@红叶丶秋鸣 你的路由有问题
        红叶丶秋鸣:@liu_520 我的怎么不跳转 打开通知后重启应用 但不跳转
        liu_520:@红叶丶秋鸣 可以的,结合官方的说明,在接受通知里调用跳转方法
      • a151e01f71ea: 你好 我的rn版本是0.42的 ios环境一直报错 是因为版本的原因吗?求解
        liu_520:@活成我喜欢的样子 通知关了吧
        还没想到叫什么:iOS 的为啥一直收不到通知呢,在极光里已经发送出去了,ios里的通知也打来了,就是什么都没收到呢
        也许不会重来:报错没关系 ,可以运行
      • a648f2c60808:打开 app 下的 MainActivity,在 ReactInstanceManager 的 build 方法中加入 JPushPackage:
        到这一步的时候 我的app 里 mainActivity 里没有你说的那个东西啊。我的mainActivity里只有
        /**
        * Returns the name of the main component registered from JavaScript.
        * This is used to schedule rendering of the component.
        */
        @Override
        protected String getMainComponentName() {
        return "LunbotuTexe";
        }
        这个东西没有别的
        a151e01f71ea:你好 我的rn版本是0.42的 ios环境一直报错 是因为版本的原因吗?求解
        liu_520:@灬心罪 你放错了地方,在MainApplication里面
        a648f2c60808:public class MainActivity extends ReactActivity {

        /**
        * Returns the name of the main component registered from JavaScript.
        * This is used to schedule rendering of the component.
        */
        @Override
        protected String getMainComponentName() {
        return "LunbotuTexe";
        }
        }
        只有这些东西
      • llitfk_DockOne:- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

        // Required

        NSDictionary * userInfo = response.notification.request.content.userInfo;

        if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

        [JPUSHService handleRemoteNotification:userInfo];

        [[NSNotificationCenter defaultCenter] postNotificationName:kJPFOpenNotification object:userInfo];

        }


        请使用 kJPFOpenNotification 而非 kJPFDidReceiveRemoteNotification
        liu_520:@llitfk_DockOne 谢谢你啦:smile:
        liu_520:@llitfk_DockOne 好
        llitfk_DockOne:麻烦作者修改下 不修改会导致回调 'OpenNotification'时,app在前台或者后台(没有销毁)运行时无法打开推送消息
      • Aaron丶丶:我的react native升级到最新的0.41,ios工程报错头文件找不到,就连官方的demo也是报找不到的错误
        liu_520:@Aaron丶丶 QQ:674668211
        Aaron丶丶:@liu_520 能否留个联系方式,配置一天了也没有配置好
        liu_520:@Aaron丶丶 目前应该不支持最新的版本,用39.2的版本可以支持的
      • liu_520:提醒各位小伙伴:设置成功后会有toast提示,建议把 项目/node_modules/jpush-react-native/android/src/main/java/cn/jpush/reactnativejpush/JPushModule.java,这个文件中的 Logger.toast()全部注释或者删除掉,有的是一行,有的是两行,请注意
      • liu_520:最近很多人反映 android的一直收不到信息,提示:‘没有满足条件的推送目标’。
        解决方案:找到 项目/node_modules/jpush-react-native/android/src/main/AndroidManifest.xml,里面的 ${applicationId} 全部换成 你自己的项目包名(也就是在 项目/android/app/src/main/AndroidManifest.xml的第三行一般是:package后面的com...的一大堆),这样就能很快解决问题了
      • cb37885f3175:执行rnpm link jpush-react-native,报
        rnpm-link ERR! ERRPACKAGEJSON No package found. Are you sure it's a React Native project?错误,求帮助。
        liu_520:@TAAndta 这样的,你在jpush-react-native 的包下面的AndroidManifest 文件中的application id 都换成你的项目包名,不要用它自带的指代
        cb37885f3175:@liu_520 按你说的操作真的可以了。但是现在还有一个问题,用极光发送的时候:提示没有满足条件的推送目标....
        我看上面的评论也有人遇到同样的问题,你回复是Android注册到极光需要一段时间,这个时间大概多久清楚吗?

        liu_520:@TAAndta 你最好用react-native link ,不要用rnpm link
      • 私奔天狼:您好 我配置完android 使用react-native run-android 时抱着个错误

        FAILURE: Build failed with an exception.

        * What went wrong:
        A problem occurred configuring project ':app'.
        > A problem occurred configuring project ':jpush-react-native'.
        > failed to find Build Tools revision 23.0.2

        * Try:
        Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

        求帮助
        liu_520:@ddfe3bfc4065 加我QQ:674668211,发一下错误截图,failure 上面的东西,
      • HT_Jonson:要请您帮忙了...安卓这边不知道为什么 搞不定了
      • liu_520:@皓天的简述 :joy:你仔细看下build.gradle里面的key啥的有没有写成你自己极光里的appkey
        HT_Jonson:@liu_520 都看过了 都正确 手机也换过了
        appkey 需要配置2次吗? 1:项目下配置一次 2:安卓生成的极光包再配置一次..
        liu_520:@皓天的简述 这很难说哪个地方出错了,你要一步步按照官网和我的步骤来查找,看看android的目录中是否配置正确,如果都没有问题,你换个android的手机试一下
        HT_Jonson:@liu_520 都没问题
        极光后台错误提示:

        没有满足条件的推送目标
        如果是群发:则此应用还没有一个客户端用户注册。请检查 SDK 集成是否正常。
        如果是推送给某别名或者标签:则此别名或者标签还没有在任何客户端SDK提交设置成功。
        如果是根据 Registration ID 推送:则此 Registration ID 不存在。
      • HT_Jonson:写的非常不错,我想问下,安卓这边为什么配置不起来,iOS的我已经搞定了
        在极光页面测试,就会提示错误,发送不成功
        HT_Jonson:首先感谢您的回复,安卓这边已经搞了一天了,按照您的文档配置的,然后再极光的后台管理点击发送 就提示没连接设备
        liu_520:@皓天的简述 可以配置起来的,你看下你android的appkey是否正确,android好像是隔段时间才能注册到极光的后台
        HT_Jonson:@皓天的简述 说是没有满足条件的推送目标
      • 99a89b8a0f81:你好,我集成jpush后,ios端日志能看到推送的内容,但是手机没有通知。只成功过一次显示通知的
        liu_520:@99a89b8a0f81 好像有延迟吧,我记得我测试的时间基本上都可以收到通知,你看下是不是通知的权限在手机的设置-通知里面是不是关掉了
        99a89b8a0f81:@liu_520 这个已经打开了
        liu_520:@99a89b8a0f81 你要在xcode 的capabilities 里面把push notification 打开
      • Android8年:配置后 极光后台 找不到 我的设备呢 推送失败 是什么原因呢?按照文档来配置的
        liu_520:@d7965c4bfcee 你的后台appkey要写上你在极光后台的appkey
        Android8年:@liu_520 manifestPlaceholders = [
        JPUSH_APPKEY: "后台appkey",
        APP_CHANNEL: "jpush" //应用渠道号
        ]
        我是这样配置的
        liu_520:@d7965c4bfcee 有可能你的appid配置错误,也有可能是你的设备刚装上还没有注册到极光的系统中
      • 99a89b8a0f81:rnpm link 在mac上执行不了,这是为什么啊??
        提示-bash: rnpm: command not found
        liu_520:@99a89b8a0f81 如果报错说没有权限,你就在命令前面输入sudo ,然后输入密码用管理权限安装rnpm
        liu_520:@99a89b8a0f81 你没有安装rnpm .你输入npm i -g rnpm
      • 极小光:您好,文章写得非常清楚,请问能够转载到「极光社区」么?让更多有需要的朋友看到。
        谢谢!
        liu_520:@极小光 可以的

      本文标题:react native极光推送全程教程android和ios

      本文链接:https://www.haomeiwen.com/subject/wdrqpttx.html