????????開早會的時候与境,突然就被安排了集成個推的任務,emmm……有點不知所措猖吴。(本人是android 開發(fā)摔刁,學習taro還不到一周,一行代碼還沒有寫過海蔽」睬可能是我高度不夠,所以技術水平也就停留在這一般的一般層次了党窜。)
? ? ? ? 其實集成第三方SDK各個平臺的步驟都差不多拗引,一般第三方都會提供各個平臺的集成文檔,根據文檔一步步來基本上都能完成幌衣。這篇文章只記錄集成過程中遇到的問題和坑寺擂,不代表最終可以達到推送功能的過程和代碼。
? ? ? ? 去個推官網泼掠,emmm怔软,沒有找到任何關于taro(react-native)相關的文檔。幸好之前有加過個推的客服择镇,通過咨詢之后給到了rn的集成地址:GitHub - GetuiLaboratory/react-native-getui: 個推官方提供的推送SDK React Native 插件(支持 Android & iOS)
一:配置Android?
1挡逼、根據文檔流程開始,通過終端進入到taro-native-shell文件夾腻豌,分別執(zhí)行命令npm install react-native-getui --save和react-native link react-native-getui家坎,終端顯示link成功
再執(zhí)行官方文檔(上面的鏈接)的這個命令
但在Android studio中進行rebuild時,會出現(xiàn)這樣的錯誤
當然終端執(zhí)行react-native run-android 同樣會報錯吝梅,這里就不貼出報錯信息了(其實是報錯后的截圖我找不到了虱疏,總是就是報一些啥啥文件找不到,還有什么什么函數找不到的錯誤)
在build.gradle文件中添加如下代碼
maven{
? url"http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
}
2苏携、繼續(xù)執(zhí)行做瞪,又出現(xiàn)了這樣的錯誤
在AndroidManifest.xml文件個推配置中,添加如下代碼
繼續(xù)運行右冻,又出現(xiàn)啥魅族装蓬、小米、華為啥啥的纱扭,這是多廠商配置的問題
根據終端的錯誤進行配置即可
開通了多廠商就配置上相應的appId和appKey牍帚,沒有開通設置為空就好了。
3乳蛾、再在android/app/build.gradle 的defaultConfig節(jié)點中添加如下代碼
再在MainActivity中添加如下代碼:
????????至此暗赶,react native 配置Android 個推就完成了鄙币,剩下的就是要在taro框架中的頁面完成推送的功能。
????????完結撒花蹂随,????????????????
????????哦爱榔,還有ios的,阿西吧~~~~~~~
二:配置ios
? ? ? ? 先運行一下ios糙及,看會報什么錯
使用Xcode打開taro-native-shell/ios/taroDemo.xcodeproj详幽。打開AppDelegate.h文件,發(fā)現(xiàn)引用的個推(在上面的步驟中浸锨,執(zhí)行l(wèi)ink和npm run GetuiConfigure唇聘。。柱搜。命令后迟郎,一般Xcode引用會自動生成)的頭部文件沒找到
依次找到target-build setting-search paths-header search paths添加路徑$(SRCROOT)/../node_modules/react-native-getui/iOS/RCTGetuiModule
然后終端cd ios執(zhí)行pod install,cd .. 聪蘸,執(zhí)行react-native run-ios 正常編譯運行宪肖。再根據個推文檔在AppDelegate.h和AppDelegate.m文件中添加相應的代碼(上邊也說過了,執(zhí)行l(wèi)ink和npm run GetuiConfigure健爬。控乾。。命令后娜遵,Xcode一般會把需要添加的代碼自動引入蜕衡,不需要手動添加。但還是需要檢查一下设拟,如果沒有的話還是需要手動添加的)慨仿,react native 集成個推的ios端就算完成了(感覺比配置Android 要簡單。纳胧。镰吆。。跑慕。)万皿。
三、集成個推代碼后報錯
引入
終端運行npm run dev:rn報錯:
這個也算是集成的一個問題吧(其實就是自己沒反應過來相赁,個推提供的rn的文檔相寇,不是taro的慰于,并不是完全一樣的)钮科,原因就是只在taro-native-shell殼子中引入了個推,沒有在自己的taro項目目錄中引入婆赠。在自己項目中引入之后绵脯,問題就解決了佳励。完美獲取到了clientId