React-native之友盟(UMeng)推送集成(超詳細)(android版)----------小白的天堂

React-native之友盟(UMeng)推送集成(超詳細)(android版)

集成環境:

React-native: 0.61.5

Umeng push sdk:6.0.5

測試環境:

Android模擬器版本:5.x(成功)

Android真機版本:6.x、8.x、9.x(成功)(包括:紅米、華爲、VIVO)

集成開始:

  • 首先登陸umeng官網(https://message.umeng.com),創建友盟push應用,獲取Appkey和Umeng Message Secret:

 

 

  • 下面正式進入友盟push集成步驟:

 

  1. 下載友盟sdk(https://developer.umeng.com/sdk/androidbeta):

注:這裏要注意一下,最新的push sdk 是6.x的版本,也就是android公測版,不過這裏可以放心下載,這個就是上線的正式版本,解決市面是最新機型(可以理解爲andorid 6.0以後設備)收不到消息的問題,如果您下載的是6.x以下的sdk,會在現在的新手機上 收不到推送的消息

2.在項目android/app 下創建libs 文件夾,把下載的sdk放到libs目錄下:

 

 

並在android/app/build.gradle 中加入如下代碼:

 

  • 在 Project 根目錄的gradle.properties文件中添加:

android.useDeprecatedNdk=true

  • APP工程的build.gradle中配置jniLibs的目錄

android {

...

sourceSets {

main {

jniLibs.srcDirs = ['libs']

}

}

}

  • Android支持包添加

工程中添加android-support-v4.jar支持包(v2.3.0以上),關於v4支持包的說明請參考:https://developer.android.com/topic/libraries/support-library/features.html#v4

 

在AndroidManifest.xml中添加權限:

<!-- 以下爲需要的基本權限,需要自行添加至您的AndroidManifest文件中 start-->

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.WAKE_LOCK" />

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" />

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_INSTALL" />

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />

<uses-permission android:name="android.permission.GET_TASKS" />

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<!-- 以下爲需要的基本權限,需要自行添加至您的AndroidManifest文件中 end-->

 

application中添加如下內容:

<service

android:name="com.taobao.accs.ChannelService"

android:exported="true"

android:process=":channel">

<intent-filter>

<action android:name="com.taobao.accs.intent.action.SERVICE" />

</intent-filter>

<intent-filter>

<action android:name="com.taobao.accs.intent.action.ELECTION" />

</intent-filter>

</service>

<service

android:name="com.taobao.accs.data.MsgDistributeService"

android:exported="true">

<intent-filter>

<action android:name="com.taobao.accs.intent.action.RECEIVE" />

</intent-filter>

</service>

<receiver

android:name="com.taobao.accs.EventReceiver"

android:process=":channel">

<intent-filter>

<action android:name="android.intent.action.BOOT_COMPLETED" />

</intent-filter>

<intent-filter>

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

</intent-filter>

<intent-filter>

<action android:name="android.intent.action.PACKAGE_REMOVED" />

<data android:scheme="package" />

</intent-filter>

<intent-filter>

<action android:name="android.intent.action.USER_PRESENT" />

</intent-filter>

</receiver>

<receiver

android:name="com.taobao.accs.ServiceReceiver"

android:process=":channel">

<intent-filter>

<action android:name="com.taobao.accs.intent.action.COMMAND" />

</intent-filter>

<intent-filter>

<action android:name="com.taobao.accs.intent.action.START_FROM_AGOO" />

</intent-filter>

</receiver>

<service

android:name="com.taobao.accs.internal.AccsJobService"

android:permission="android.permission.BIND_JOB_SERVICE"

android:process=":channel"/>

<service

android:name="com.taobao.accs.ChannelService$KernelService"

android:process=":channel" />

<service

android:name="org.android.agoo.accs.AgooService"

android:exported="true">

<intent-filter>

<action android:name="com.taobao.accs.intent.action.RECEIVE" />

</intent-filter>

</service>

<service

android:name="com.umeng.message.UmengIntentService"

android:exported="true"

android:process=":channel">

<intent-filter>

<action android:name="org.agoo.android.intent.action.RECEIVE" />

</intent-filter>

</service>

<service

android:name="com.umeng.message.XiaomiIntentService"

android:exported="true"

android:process=":channel">

<intent-filter>

<action android:name="org.agoo.android.intent.action.RECEIVE" />

</intent-filter>

</service>

<receiver

android:name="com.taobao.agoo.AgooCommondReceiver"

android:exported="true"

android:process=":channel">

<intent-filter>

<action android:name="${applicationId}.intent.action.COMMAND" />

</intent-filter>

<intent-filter>

<action android:name="android.intent.action.PACKAGE_REMOVED" />

<data android:scheme="package" />

</intent-filter>

</receiver>

<service

android:name="com.umeng.message.UmengMessageIntentReceiverService"

android:exported="true"

android:process=":channel">

<intent-filter>

<action android:name="org.android.agoo.client.MessageReceiverService" />

</intent-filter>

</service>

<receiver

android:name="com.umeng.message.NotificationProxyBroadcastReceiver"

android:exported="false" />

<service

android:name="com.umeng.message.UmengMessageCallbackHandlerService"

android:permission="android.permission.BIND_JOB_SERVICE"

android:exported="false">

<intent-filter>

<action android:name="com.umeng.messge.registercallback.action" />

</intent-filter>

<intent-filter>

<action android:name="com.umeng.message.enablecallback.action" />

</intent-filter>

<intent-filter>

<action android:name="com.umeng.message.disablecallback.action" />

</intent-filter>

<intent-filter>

<action android:name="com.umeng.message.message.handler.action" />

</intent-filter>

<intent-filter>

<action android:name="com.umeng.message.message.sendmessage.action" />

</intent-filter>

</service>

<service

android:name="com.umeng.message.UmengDownloadResourceService"

android:permission="android.permission.BIND_JOB_SERVICE"

android:exported="false" />

<provider

android:name="com.umeng.message.provider.MessageProvider"

android:authorities="${applicationId}.umeng.message"

android:exported="false">

<grant-uri-permission android:pathPattern=".*" />

</provider>

<meta-data android:value="你的appkey" android:name="APPKEY"/>

<meta-data android:value="Umeng" android:name="UMENG_CHANNEL"/>

 

 

 

4.下載react-native集成環境的交接文件:

 

導入交接文件到項目中:

 

在MainApplication.java導入文件:

import com.freemusice.push.DplusReactPackage;

import com.freemusice.push.RNUMConfigure;

import com.umeng.commonsdk.UMConfigure;

import com.umeng.message.PushAgent;

import com.umeng.message.IUmengRegisterCallback;

 

在onCreate方法中初始化umeng:

 

具體代碼:

RNUMConfigure.init(this, "你的appkey", "Umeng", UMConfigure.DEVICE_TYPE_PHONE,

"你的Umeng Message Secret ");

 

UMConfigure.setLogEnabled(true);

此處開啓,可以查看正式包的deviceToken,方便後期進行單播模式的推送

具體代碼:

registerUPush();

 

private void registerUPush() {

PushAgent mPushAgent = PushAgent.getInstance(this);

mPushAgent.setResourcePackageName("你的包名");

//註冊推送服務

mPushAgent.register(new IUmengRegisterCallback() {

@Override

public void onSuccess(String deviceToken) {

Log.e("獲取token成功: " ,deviceToken);

}

@Override

public void onFailure(String s, String s1) {

Log.e("獲取token失敗: " , s);

}

});

PushAgent.getInstance(this).onAppStart();

}

 

 

  1. 在MainActivity.java中添加:

import com.facebook.react.ReactActivity;

import com.freemusice.push.PushModule;(注意換成你自己的包名)

import com.umeng.message.PushAgent;

 

具體代碼:

PushModule.initPushSDK(this);

PushAgent.getInstance(this).onAppStart();

 

到這裏react-native android端Umeng push集成完成,下邊就可以測試了!

 

  • 推送測試(這裏需要android studio 來啓動項目,查看deviceToken)
  1. 測試包:

 

  1. 用as 啓動項目,在控制檯查看deviceToken:

 

  1. 進入Umeng 工作臺:(先查看當前token設備是否在線,必須保持設備在線狀態)

 

點擊測試模式,創建測試設備:(輸入token,綁定測試設備)

 

創建測試推送:

·第一步:填寫帶星號內容

·第二部:選擇獨立用戶,填寫deviceToken

·第三部:點擊完成,確認發送

 

注:測試模式可能會有1~2個小時的延遲,如果一開始不能立刻收不到推送消息,可以等過一兩個小時在測試

 

如果你能正常收到推送的消息那麼恭喜你,集成成功,可以進行真機測試了!!!

 

  • 真機測試:
  1. 刪除剛剛添加的測試設備,然後打正式包(過程就不說了)
  2. 打開應用,如果是android 6.0 以上系統,需要去設置中打開允許通知
  3. 打開手機文件管理,找到該應用對應的包名,在裏面會有一個deviceToken的文件,裏面就是當前應用的正式token(具體位置:文件管理 -> 本地文件 -> Android ->  data->com.xxx -> files -> deviceToken)
  4. 用當前的deviceToken 確定設備是否在線(保證設備在線纔行)
  5. 按照測試發推送的步驟重新走一遍即可

注:

  1. 同一手機測試包和正式包的token是不一樣的,如果正式包卸載後重新安裝應用,token也有可能不一樣,這個需要重新確認一遍
  2. 正式環境測試慢的話大概會有1天的時間延遲,所以測試時不能立刻收到通知,也不一定是集成環境的問題

 

推送效果:

 

 

在確認發送通知時,怎麼判斷這條推送消息發送的是測試消息還是正式消息呢?

就是下圖中的production_mode字段來確定的:true爲正式消息;false爲測試消息

 

如果真機測試沒問題,能收到通知,那麼恭喜你,推送集成成功,之後發送推送,只需要把第二步的獨立用戶切換成全部用戶就可以了。

 

本教程是本人經過了三天的時間,從開始集成push到最後成功,期間也遇到了各種問題,最終不負衆望,終於完成。文檔儘量全面,也可能會有遺漏的地方,如果你在集成過程中遇到什麼問題,或者有不明白的地方歡迎留言探討,歡迎收藏,謝謝!

 

demo下載鏈接:

鏈接:https://pan.baidu.com/s/1P-RDbD8eGlSLM4X_ubjJsA 
提取碼:cusr 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章