react native 友盟集成

IOS

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

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


2.集成sdk

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


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下

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' }
  }
}


你可能感兴趣的:(react native 友盟集成)