react native 友盟集成

IOS

1.友盟后台新建推送应用

1.新建应用需要提交push的证书,故无证书先配置ios含推送的证书(若原来已有证书,却没有推送,可在原先基础上直接修改,证书cer无需更换,只需配置pp描述文件,让其包含推送功能,重新下载对应的新的pp文件,重新点击载入即可),同时需要项目的capabilities中加入Push notifications 以及background modes(选中remote notification)


WX20200312-095422@2x.png
WX20200312-100427@2x.png

2.集成sdk

1.以creat group的方式引入你需要的功能的sdk(ios端和与js通信的bridge端, 不用管下图的manager,manager中的是为了ios向rn层通信传参回调的一些方法)

WX20200312-101108@2x.png

2.push功能集成(获取deviceToken等)
完成参照友盟ios集成文档(https://developer.umeng.com/docs/67966/detail/66734
),appdelegate.m中加入相关代码
3.若友盟后台消息发送失败,一般是证书配置不对(开发模式对应开发证书,生产模式对应生产证书)

Android(参照https://developer.umeng.com/docs/66632/detail/67587

1.下载相关jar包。放入项目安卓目录新创建的lib下
WX20200313-160315@2x.png

2.下载对应的桥接文件注意修改路径,放到对应的目录中

3. 修改Application,DplusReactPackage

4.未知类,方法等引入可以使用option + enter

@Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);

    Log.d("启动应用","启动");

    UMConfigure.setLogEnabled(true);
    //初始化组件化基础库, 统计SDK/推送SDK/分享SDK都必须调用此初始化接口

    // pro

    String appChannel = "Umeng";
//    String appServer = getJsonString("env.json",this);
//    if (appServer.contains("env") && !appServer.toLowerCase().contains("pro")) {
//      appChannel = "AppTest";
//      // isEnable: false-关闭错误统计功能;true-打开错误统计功能(默认打开)
//
//      MobclickAgent.setCatchUncaughtExceptions(false);
//    }

//       UMConfigure.init(this, "5cdd2e4e0cafb227fd00042e", "Umeng", UMConfigure.DEVICE_TYPE_PHONE,
//         "");
    UMConfigure.init(this, "", appChannel, UMConfigure.DEVICE_TYPE_PHONE,
            "");


    //获取消息推送代理示例
    PushAgent mPushAgent = PushAgent.getInstance(this);
    //注册推送服务,每次调用register方法都会回调该接口
    mPushAgent.register(new IUmengRegisterCallback() {

      @Override
      public void onSuccess(String deviceToken) {
        //注册成功会返回deviceToken deviceToken是推送消息的唯一标志
        deviceId = deviceToken;
        Log.i(TAG,"注册成功:deviceToken:-------->  " + deviceToken);
      }

      @Override
      public void onFailure(String s, String s1) {
        Log.e(TAG,"注册失败:-------->  " + "s:" + s + ",s1:" + s1);
      }
    });


    //sdk开启通知声音
    mPushAgent.setNotificationPlaySound(MsgConstant.NOTIFICATION_PLAY_SDK_ENABLE);
    // sdk关闭通知声音
    //mPushAgent.setNotificationPlaySound(MsgConstant.NOTIFICATION_PLAY_SDK_DISABLE);
    // 通知声音由服务端控制
    //mPushAgent.setNotificationPlaySound(MsgConstant.NOTIFICATION_PLAY_SERVER);
    //mPushAgent.setNotificationPlayLights(MsgConstant.NOTIFICATION_PLAY_SDK_DISABLE);
    //mPushAgent.setNotificationPlayVibrate(MsgConstant.NOTIFICATION_PLAY_SDK_DISABLE);

    UmengMessageHandler messageHandler = new UmengMessageHandler() {



      /**
       * 自定义消息的回调方法
       */
      @Override
      public void dealWithCustomMessage(final Context context, final UMessage msg) {
        Log.d(TAG,"dealWithCustomMessage");
        handler.post(new Runnable() {
          @Override
          public void run() {
            // TODO Auto-generated method stub
            // 对自定义消息的处理方式,点击或者忽略
            boolean isClickOrDismissed = true;
            if (isClickOrDismissed) {
              //自定义消息的点击统计
              UTrack.getInstance(getApplicationContext()).trackMsgClick(msg);
            } else {
              //自定义消息的忽略统计
              UTrack.getInstance(getApplicationContext()).trackMsgDismissed(msg);
            }
            Toast.makeText(context, msg.custom, Toast.LENGTH_LONG).show();
          }
        });
      }

      /**
       * 自定义通知栏样式的回调方法
       */
      @Override
      public Notification getNotification(Context context, UMessage msg) {
        Log.d("handleMessage----111", String.valueOf(msg.builder_id));

        Log.d("handleMessage----111", msg.activity);

        Log.d("handleMessage----111", msg.custom);




        switch (msg.builder_id) {
          case 1:
            Notification.Builder builder = new Notification.Builder(context);
            RemoteViews myNotificationView = new RemoteViews(context.getPackageName(), R.layout.upush_notification);
            myNotificationView.setTextViewText(R.id.notification_title, msg.title);
            myNotificationView.setTextViewText(R.id.notification_text, msg.text);
            myNotificationView.setImageViewBitmap(R.id.notification_large_icon1, getLargeIcon(context, msg));
            myNotificationView.setImageViewResource(R.id.notification_large_icon2, getSmallIconId(context, msg));
            builder.setContent(myNotificationView)
                    .setSmallIcon(getSmallIconId(context, msg))
                    .setTicker(msg.ticker)
                    .setAutoCancel(true);
//                            return builder.build();
            return super.getNotification(context, msg);
          default:
            //默认为0,若填写的builder_id并不存在,也使用默认。
            return super.getNotification(context, msg);
        }
      }



      @Override
      public void handleMessage(Context context, UMessage uMessage) {
        //如果app在前台的话,则不展示通知栏
        //                if(!isForeground(application)){
        //                    super.handleMessage(context, uMessage);
        //                }
        Log.d("handleMessage----",uMessage.display_type);
        Log.d("handleMessage----",uMessage.title);
//                    recerveMessage(uMessage);
        super.handleMessage(context, uMessage);
      }
    };

    Log.d("setMessageHandler","启动");
    mPushAgent.setMessageHandler(messageHandler);


    /**
     * 自定义行为的回调处理,参考文档:高级功能-通知的展示及提醒-自定义通知打开动作
     * UmengNotificationClickHandler是在BroadcastReceiver中被调用,故
     * 如果需启动Activity,需添加Intent.FLAG_ACTIVITY_NEW_TASK
     * */
    UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {
      @Override
      public void dealWithCustomAction(Context context, UMessage msg) {
        Log.d("dealWithCustomAction---", msg.display_type);
        launchApp(MainApplication.this, msg);
        recerveMessage(msg);
//              Toast.makeText(context, msg.custom, Toast.LENGTH_LONG).show();
      }
    };
    //使用自定义的NotificationHandler,来结合友盟统计处理消息通知,参考http://bbs.umeng.com/thread-11112-1-1.html
    //CustomNotificationHandler notificationClickHandler = new CustomNotificationHandler();
    mPushAgent.setNotificationClickHandler(notificationClickHandler);


  }
  /**
   * 处理点击通知栏后的动作行为
   */
  public void recerveMessage(UMessage uMessage){
    Log.d("handleMessage----",uMessage.display_type);
    Log.d("handleMessage----",uMessage.title);


    WritableMap writableMap = Arguments.createMap();
    writableMap.putString("jumpType", uMessage.extra.get("jumpType"));
    writableMap.putString("jumpContent", uMessage.extra.get("jumpContent"));
    ReactContext currentReactContext = getReactNativeHost().getReactInstanceManager().getCurrentReactContext();
    if (currentReactContext != null) {
      currentReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("clickNotification", writableMap );
      Log.d("handleMessage----",uMessage.extra.get("jumpType"));
    }
  }

4.初始化

5.修改Activity,初始化

6.app/build.gradle 添加依赖

//PushSDK必须依赖基础组件库,所以需要加入对应依赖
//    implementation 'com.umeng.umsdk:common:1.5.4'
//PushSDK必须依赖utdid库,所以需要加入对应依赖
    implementation 'com.umeng.umsdk:utdid:1.1.5.3'
//PushSDK
    implementation 'com.umeng.umsdk:push:6.0.1'

7.android/build.gradle中 maven依赖

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
  ext {
      buildToolsVersion = "28.0.3"
      minSdkVersion = 16
      compileSdkVersion = 28
      targetSdkVersion = 28
      supportLibVersion = "28.0.0"
  }
  repositories {
      google()
      jcenter()
      mavenCentral()
      maven { url 'https://dl.bintray.com/umsdk/release' }
  }
  dependencies {
      classpath("com.android.tools.build:gradle:3.3.1")

      // NOTE: Do not place your application dependencies here; they belong
      // in the individual module build.gradle files
  }
}

allprojects {
  repositories {
      mavenLocal()
      google()
      jcenter()
      maven {
          // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
          url "$rootDir/../node_modules/react-native/android"
      }
      maven { url 'https://dl.bintray.com/umsdk/release' }
  }
}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,200评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,526评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,321评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,601评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,446评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,345评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,753评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,405评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,712评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,743评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,529评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,369评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,770评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,026评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,301评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,732评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,927评论 2 336

推荐阅读更多精彩内容