作中經常會遇到服務器向App推送消息的需求,一般企業中選擇用極光推送的比較多,在集成極光時發現極光的文檔并不完整,網上的文章也很多不能直接使用,這里列出我在工作中集成極光的全部代碼,只需要按照如下代碼保證一次性實現。
<!-- 極光推送 begin -->
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.3.10</version>
</dependency>
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jiguang-common</artifactId>
<version>1.1.4</version>
</dependency>
<!-- 極光推送 end -->
jpush:
appKey: xxx
masterSecret: xxxx
apnsProduction: false # 是否生成環境,true表示生成環境
import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 極光推送客戶端
*
* @author Mengday Zhang
* @version 1.0
* @since 2019-04-01
*/
@Component
public class MyJPushClient {
@Value("${jpush.appKey}")
private String appKey;
@Value("${jpush.masterSecret}")
private String masterSecret;
@Value("${jpush.apnsProduction}")
private boolean apnsProduction;
private static JPushClient jPushClient = null;
private static final int RESPONSE_OK = 200;
private static final Logger logger = LoggerFactory.getLogger(MyJPushClient.class);
public JPushClient getJPushClient() {
if (jPushClient == null) {
jPushClient = new JPushClient(masterSecret, appKey);
}
return jPushClient;
}
/**
* 推送到alias列表
*
* @param alias 別名或別名組
* @param notificationTitle 通知內容標題
* @param msgTitle 消息內容標題
* @param msgContent 消息內容
* @param extras 擴展字段
*/
public void sendToAliasList(List<String> alias, String notificationTitle, String msgTitle, String msgContent, String extras) {
PushPayload pushPayload = buildPushObject_all_aliasList_alertWithTitle(alias, notificationTitle, msgTitle, msgContent, extras);
this.sendPush(pushPayload);
}
/**
* 推送到tag列表
*
* @param tagsList Tag或Tag組
* @param notificationTitle 通知內容標題
* @param msgTitle 消息內容標題
* @param msgContent 消息內容
* @param extras 擴展字段
*/
public void sendToTagsList(List<String> tagsList, String notificationTitle, String msgTitle, String msgContent, String extras) {
PushPayload pushPayload = buildPushObject_all_tagList_alertWithTitle(tagsList, notificationTitle, msgTitle, msgContent, extras);
this.sendPush(pushPayload);
}
/**
* 發送給所有安卓用戶
*
* @param notificationTitle 通知內容標題
* @param msgTitle 消息內容標題
* @param msgContent 消息內容
* @param extras 擴展字段
*/
public void sendToAllAndroid(String notificationTitle, String msgTitle, String msgContent, String extras) {
PushPayload pushPayload = buildPushObject_android_all_alertWithTitle(notificationTitle, msgTitle, msgContent, extras);
this.sendPush(pushPayload);
}
/**
* 發送給所有IOS用戶
*
* @param notificationTitle 通知內容標題
* @param msgTitle 消息內容標題
* @param msgContent 消息內容
* @param extras 擴展字段
*/
public void sendToAllIOS(String notificationTitle, String msgTitle, String msgContent, String extras) {
PushPayload pushPayload = buildPushObject_ios_all_alertWithTitle(notificationTitle, msgTitle, msgContent, extras);
this.sendPush(pushPayload);
}
/**
* 發送給所有用戶
*
* @param notificationTitle 通知內容標題
* @param msgTitle 消息內容標題
* @param msgContent 消息內容
* @param extras 擴展字段
*/
public void sendToAll(String notificationTitle, String msgTitle, String msgContent, String extras) {
PushPayload pushPayload = buildPushObject_android_and_ios(notificationTitle, msgTitle, msgContent, extras);
this.sendPush(pushPayload);
}
private PushResult sendPush(PushPayload pushPayload) {
logger.info("pushPayload={}", pushPayload);
PushResult pushResult = null;
try {
pushResult = this.getJPushClient().sendPush(pushPayload);
logger.info("" + pushResult);
if (pushResult.getResponseCode() == RESPONSE_OK) {
logger.info("push successful, pushPayload={}", pushPayload);
}
} catch (APIConnectionException e) {
logger.error("push failed: pushPayload={}, exception={}", pushPayload, e);
} catch (APIRequestException e) {
logger.error("push failed: pushPayload={}, exception={}", pushPayload, e);
}
return pushResult;
}
/**
* 向所有平臺所有用戶推送消息
*
* @param notificationTitle
* @param msgTitle
* @param msgContent
* @param extras
* @return
*/
public PushPayload buildPushObject_android_and_ios(String notificationTitle, String msgTitle, String msgContent, String extras) {
return PushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.all())
.setNotification(Notification.newBuilder()
.setAlert(notificationTitle)
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(notificationTitle)
.setTitle(notificationTitle)
// 此字段為透傳字段,不會顯示在通知欄。用戶可以通過此字段來做一些定制需求,如特定的key傳要指定跳轉的頁面(value)
.addExtra("androidNotification extras key", extras)
.build()
)
.addPlatformNotification(IosNotification.newBuilder()
// 傳一個IosAlert對象,指定apns title、title、subtitle等
.setAlert(notificationTitle)
// 直接傳alert
// 此項是指定此推送的badge自動加1
.incrBadge(1)
// 此字段的值default表示系統默認聲音;傳sound.caf表示此推送以項目里面打包的sound.caf聲音來提醒,
// 如果系統沒有此音頻則以系統默認聲音提醒;此字段如果傳空字符串,iOS9及以上的系統是無聲音提醒,以下的系統是默認聲音
.setSound("default")
// 此字段為透傳字段,不會顯示在通知欄。用戶可以通過此字段來做一些定制需求,如特定的key傳要指定跳轉的頁面(value)
.addExtra("iosNotification extras key", extras)
// 此項說明此推送是一個background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
// .setContentAvailable(true)
.build()
)
.build()
)
// Platform指定了哪些平臺就會像指定平臺中符合推送條件的設備進行推送。 jpush的自定義消息,
// sdk默認不做任何處理,不會有通知提示。建議看文檔http://docs.jpush.io/guideline/faq/的
// [通知與自定義消息有什么區別?]了解通知和自定義消息的區別
.setMessage(Message.newBuilder()
.setMsgContent(msgContent)
.setTitle(msgTitle)
.addExtra("message extras key", extras)
.build())
.setOptions(Options.newBuilder()
// 此字段的值是用來指定本推送要推送的apns環境,false表示開發,true表示生產;對android和自定義消息無意義
.setApnsProduction(apnsProduction)
// 此字段是給開發者自己給推送編號,方便推送者分辨推送記錄
.setSendno(1)
// 此字段的值是用來指定本推送的離線保存時長,如果不傳此字段則默認保存一天,最多指定保留十天,單位為秒
.setTimeToLive(86400)
.build())
.build();
}
/**
* 向所有平臺單個或多個指定別名用戶推送消息
*
* @param aliasList
* @param notificationTitle
* @param msgTitle
* @param msgContent
* @param extras
* @return
*/
private PushPayload buildPushObject_all_aliasList_alertWithTitle(List<String> aliasList, String notificationTitle, String msgTitle, String msgContent, String extras) {
// 創建一個IosAlert對象,可指定APNs的alert、title等字段
// IosAlert iosAlert = IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();
return PushPayload.newBuilder()
// 指定要推送的平臺,all代表當前應用配置了的所有平臺,也可以傳android等具體平臺
.setPlatform(Platform.all())
// 指定推送的接收對象,all代表所有人,也可以指定已經設置成功的tag或alias或該應應用客戶端調用接口獲取到的registration id
.setAudience(Audience.alias(aliasList))
// jpush的通知,android的由jpush直接下發,iOS的由apns服務器下發,Winphone的由mpns下發
.setNotification(Notification.newBuilder()
// 指定當前推送的android通知
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(notificationTitle)
.setTitle(notificationTitle)
// 此字段為透傳字段,不會顯示在通知欄。用戶可以通過此字段來做一些定制需求,如特定的key傳要指定跳轉的頁面(value)
.addExtra("androidNotification extras key", extras)
.build())
// 指定當前推送的iOS通知
.addPlatformNotification(IosNotification.newBuilder()
// 傳一個IosAlert對象,指定apns title、title、subtitle等
.setAlert(notificationTitle)
// 直接傳alert
// 此項是指定此推送的badge自動加1
.incrBadge(1)
// 此字段的值default表示系統默認聲音;傳sound.caf表示此推送以項目里面打包的sound.caf聲音來提醒,
// 如果系統沒有此音頻則以系統默認聲音提醒;此字段如果傳空字符串,iOS9及以上的系統是無聲音提醒,以下的系統是默認聲音
.setSound("default")
// 此字段為透傳字段,不會顯示在通知欄。用戶可以通過此字段來做一些定制需求,如特定的key傳要指定跳轉的頁面(value)
.addExtra("iosNotification extras key", extras)
// 此項說明此推送是一個background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
// 取消此注釋,消息推送時ios將無法在鎖屏情況接收
// .setContentAvailable(true)
.build())
.build())
// Platform指定了哪些平臺就會像指定平臺中符合推送條件的設備進行推送。 jpush的自定義消息,
// sdk默認不做任何處理,不會有通知提示。建議看文檔http://docs.jpush.io/guideline/faq/的
// [通知與自定義消息有什么區別?]了解通知和自定義消息的區別
.setMessage(Message.newBuilder()
.setMsgContent(msgContent)
.setTitle(msgTitle)
.addExtra("message extras key", extras)
.build())
.setOptions(Options.newBuilder()
// 此字段的值是用來指定本推送要推送的apns環境,false表示開發,true表示生產;對android和自定義消息無意義
.setApnsProduction(apnsProduction)
// 此字段是給開發者自己給推送編號,方便推送者分辨推送記錄
.setSendno(1)
// 此字段的值是用來指定本推送的離線保存時長,如果不傳此字段則默認保存一天,最多指定保留十天;
.setTimeToLive(86400)
.build())
.build();
}
/**
* 向所有平臺單個或多個指定Tag用戶推送消息
*
* @param tagsList
* @param notificationTitle
* @param msgTitle
* @param msgContent
* @param extras
* @return
*/
private PushPayload buildPushObject_all_tagList_alertWithTitle(List<String> tagsList, String notificationTitle, String msgTitle, String msgContent, String extras) {
//創建一個IosAlert對象,可指定APNs的alert、title等字段
//IosAlert iosAlert = IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();
return PushPayload.newBuilder()
// 指定要推送的平臺,all代表當前應用配置了的所有平臺,也可以傳android等具體平臺
.setPlatform(Platform.all())
// 指定推送的接收對象,all代表所有人,也可以指定已經設置成功的tag或alias或該應應用客戶端調用接口獲取到的registration id
.setAudience(Audience.tag(tagsList))
// jpush的通知,android的由jpush直接下發,iOS的由apns服務器下發,Winphone的由mpns下發
.setNotification(Notification.newBuilder()
// 指定當前推送的android通知
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(notificationTitle)
.setTitle(notificationTitle)
//此字段為透傳字段,不會顯示在通知欄。用戶可以通過此字段來做一些定制需求,如特定的key傳要指定跳轉的頁面(value)
.addExtra("androidNotification extras key", extras)
.build())
// 指定當前推送的iOS通知
.addPlatformNotification(IosNotification.newBuilder()
// 傳一個IosAlert對象,指定apns title、title、subtitle等
.setAlert(notificationTitle)
// 直接傳alert
// 此項是指定此推送的badge自動加1
.incrBadge(1)
// 此字段的值default表示系統默認聲音;傳sound.caf表示此推送以項目里面打包的sound.caf聲音來提醒,
// 如果系統沒有此音頻則以系統默認聲音提醒;此字段如果傳空字符串,iOS9及以上的系統是無聲音提醒,以下的系統是默認聲音
.setSound("default")
// 此字段為透傳字段,不會顯示在通知欄。用戶可以通過此字段來做一些定制需求,如特定的key傳要指定跳轉的頁面(value)
.addExtra("iosNotification extras key", extras)
// 此項說明此推送是一個background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
// 取消此注釋,消息推送時ios將無法在鎖屏情況接收
// .setContentAvailable(true)
.build())
.build())
// Platform指定了哪些平臺就會像指定平臺中符合推送條件的設備進行推送。 jpush的自定義消息,
// sdk默認不做任何處理,不會有通知提示。建議看文檔http://docs.jpush.io/guideline/faq/的
// [通知與自定義消息有什么區別?]了解通知和自定義消息的區別
.setMessage(Message.newBuilder()
.setMsgContent(msgContent)
.setTitle(msgTitle)
.addExtra("message extras key", extras)
.build())
.setOptions(Options.newBuilder()
// 此字段的值是用來指定本推送要推送的apns環境,false表示開發,true表示生產;對android和自定義消息無意義
.setApnsProduction(apnsProduction)
// 此字段是給開發者自己給推送編號,方便推送者分辨推送記錄
.setSendno(1)
// 此字段的值是用來指定本推送的離線保存時長,如果不傳此字段則默認保存一天,最多指定保留十天;
.setTimeToLive(86400)
.build())
.build();
}
/**
* 向android平臺所有用戶推送消息
*
* @param notificationTitle
* @param msgTitle
* @param msgContent
* @param extras
* @return
*/
private PushPayload buildPushObject_android_all_alertWithTitle(String notificationTitle, String msgTitle, String msgContent, String extras) {
return PushPayload.newBuilder()
// 指定要推送的平臺,all代表當前應用配置了的所有平臺,也可以傳android等具體平臺
.setPlatform(Platform.android())
// 指定推送的接收對象,all代表所有人,也可以指定已經設置成功的tag或alias或該應應用客戶端調用接口獲取到的registration id
.setAudience(Audience.all())
// jpush的通知,android的由jpush直接下發,iOS的由apns服務器下發,Winphone的由mpns下發
.setNotification(Notification.newBuilder()
// 指定當前推送的android通知
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(notificationTitle)
.setTitle(notificationTitle)
// 此字段為透傳字段,不會顯示在通知欄。用戶可以通過此字段來做一些定制需求,如特定的key傳要指定跳轉的頁面(value)
.addExtra("androidNotification extras key", extras)
.build())
.build()
)
// Platform指定了哪些平臺就會像指定平臺中符合推送條件的設備進行推送。 jpush的自定義消息,
// sdk默認不做任何處理,不會有通知提示。建議看文檔http://docs.jpush.io/guideline/faq/的
// [通知與自定義消息有什么區別?]了解通知和自定義消息的區別
.setMessage(Message.newBuilder()
.setMsgContent(msgContent)
.setTitle(msgTitle)
.addExtra("message extras key", extras)
.build())
.setOptions(Options.newBuilder()
// 此字段的值是用來指定本推送要推送的apns環境,false表示開發,true表示生產;對android和自定義消息無意義
.setApnsProduction(apnsProduction)
// 此字段是給開發者自己給推送編號,方便推送者分辨推送記錄
.setSendno(1)
// 此字段的值是用來指定本推送的離線保存時長,如果不傳此字段則默認保存一天,最多指定保留十天,單位為秒
.setTimeToLive(86400)
.build())
.build();
}
/**
* 向ios平臺所有用戶推送消息
*
* @param notificationTitle
* @param msgTitle
* @param msgContent
* @param extras
* @return
*/
private PushPayload buildPushObject_ios_all_alertWithTitle(String notificationTitle, String msgTitle, String msgContent, String extras) {
return PushPayload.newBuilder()
// 指定要推送的平臺,all代表當前應用配置了的所有平臺,也可以傳android等具體平臺
.setPlatform(Platform.ios())
// 指定推送的接收對象,all代表所有人,也可以指定已經設置成功的tag或alias或該應應用客戶端調用接口獲取到的registration id
.setAudience(Audience.all())
// jpush的通知,android的由jpush直接下發,iOS的由apns服務器下發,Winphone的由mpns下發
.setNotification(Notification.newBuilder()
// 指定當前推送的android通知
.addPlatformNotification(IosNotification.newBuilder()
// 傳一個IosAlert對象,指定apns title、title、subtitle等
.setAlert(notificationTitle)
// 直接傳alert
// 此項是指定此推送的badge自動加1
.incrBadge(1)
// 此字段的值default表示系統默認聲音;傳sound.caf表示此推送以項目里面打包的sound.caf聲音來提醒,
// 如果系統沒有此音頻則以系統默認聲音提醒;此字段如果傳空字符串,iOS9及以上的系統是無聲音提醒,以下的系統是默認聲音
.setSound("default")
// 此字段為透傳字段,不會顯示在通知欄。用戶可以通過此字段來做一些定制需求,如特定的key傳要指定跳轉的頁面(value)
.addExtra("iosNotification extras key", extras)
// 此項說明此推送是一個background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
// .setContentAvailable(true)
.build())
.build()
)
// Platform指定了哪些平臺就會像指定平臺中符合推送條件的設備進行推送。 jpush的自定義消息,
// sdk默認不做任何處理,不會有通知提示。建議看文檔http://docs.jpush.io/guideline/faq/的
// [通知與自定義消息有什么區別?]了解通知和自定義消息的區別
.setMessage(Message.newBuilder()
.setMsgContent(msgContent)
.setTitle(msgTitle)
.addExtra("message extras key", extras)
.build())
.setOptions(Options.newBuilder()
// 此字段的值是用來指定本推送要推送的apns環境,false表示開發,true表示生產;對android和自定義消息無意義
.setApnsProduction(apnsProduction)
// 此字段是給開發者自己給推送編號,方便推送者分辨推送記錄
.setSendno(1)
// 此字段的值是用來指定本推送的離線保存時長,如果不傳此字段則默認保存一天,最多指定保留十天,單位為秒
.setTimeToLive(86400)
.build())
.build();
}
public static void main(String[] args) {
// MyJPushClient jPushUtil = new MyJPushClient();
// List<String> aliasList = Arrays.asList("239");
// String notificationTitle = "notificationTitle";
// String msgTitle = "msgTitle";
// String msgContent = "msgContent";
// jPushUtil.sendToAliasList(aliasList, notificationTitle, msgTitle, msgContent, "exts");
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class JPushApplicationTests {
@Autowired
private MyJPushClient jPushClient;
@Test
public void testJPush() {
List<String> aliasList = Arrays.asList("239");
String notificationTitle = "notification_title";
String msgTitle = "msg_title";
String msgContent = "msg_content";
jPushClient.sendToAliasList(aliasList, notificationTitle, msgTitle, msgContent, "exts");
}
}
光推送(Jiguang Push)是一個跨平臺的消息推送服務,可幫助您向您的移動應用用戶發送推送通知。它提供廣泛的功能,包括:
定時推送:在指定的時間向用戶發送推送通知。
標簽推送:根據用戶標簽向特定用戶群組發送推送通知。
別名推送:向單個用戶或一組用戶發送推送通知。
豐富推送:發送包含文本、圖像和鏈接的推送通知。
地理圍欄推送:向位于特定地理區域內的用戶發送推送通知。
離線推送:即使用戶離線,也能向他們發送推送通知。
要開始使用極光推送,您需要創建一個極光開發者賬號并創建一個應用。然后,您需要將極光推送 SDK 集成到您的移動應用中。SDK 提供用于發送推送通知、接收推送通知和管理用戶訂閱的 API。
以下是一般步驟:
1. 創建極光開發者賬號
訪問極光推送官網:https://www.jiguang.cn/
注冊賬號并完成驗證
2. 創建應用
登錄極光控制臺
進入【應用管理】頁面
點擊“創建應用”按鈕
填寫應用名稱并選擇應用類型
選擇服務“消息推送”
完成應用創建
3. 配置推送服務
按照不同平臺的配置說明進行設置
Android 配置
填寫應用包名
上傳廠商密鑰文件
HarmonyOS 配置
填寫應用包名
填寫默認標題
上傳廠商密鑰文件
iOS 配置
上傳 APNs 證書
填寫 Bundle ID
4. 集成極光推送 SDK
將極光推送 SDK 下載到您的項目中
按照 SDK 文檔進行集成
5. 發送推送通知
使用極光推送 SDK 的 API 發送推送通知
您可以指定目標用戶、推送內容和推送選項
6. 接收推送通知
在您的應用中實現極光推送 SDK 的回調函數
處理推送通知并相應地更新您的應用界面
有關更詳細的開發步驟,請參閱極光推送官方文檔:https://docs.jiguang.cn/
以下是一些額外的提示,可幫助您開始使用極光推送:
使用極光推送控制臺測試您的推送通知。
使用極光推送的分析功能來跟蹤您的推送通知效果。
遵循極光推送的最佳實踐來確保您的推送通知有效且不打擾用戶。
欲善其事,必先利其器。在我們開發的過程中,一些“輪子”、工具能夠幫助我們應對項目中切實的需求,提升開發的效率。所以,日常收集一些庫或工具就顯得尤為重要了。畢竟,遇見需求/問題的時候,能做到“家有余糧,心中不慌。”
在本期中,我依然精選了一些近期收羅的開源庫、工具以及我的微博上 #每日一Pen# 話題中大家轉發較多的編程靈感,希望你們有所收獲。
1. TypeLighter.js
TypeLighter.js 是一款輕量級(Gzip 壓縮后僅 1.04KB)的 JS 庫,能夠幫助你實現打字機效果。它提供了 8 個屬性(寫入速度、寫入/刪除延遲等)供你微調,更改 data 屬性即可更改其值。 ????
項目地址:
https://github.com/EdernClemente/TypeLighterJS
2.Clendar
Clendar 是一款輕量級、無依賴的 JS 日歷組件。它具備簡潔的 API,適用于 React、Vue、Angular 等框架。 ????
項目地址:
https://github.com/simbawus/calendar
3.Lax.js
Lax.js 是一款輕量的 Vanilla JS 插件,當頁面滾動時,創建流暢、炫酷的動畫效果,讓你的網站“動”起來。
項目地址:
https://github.com/alexfoxy/laxxx
4.HIUI
HIUI 是由小米開源的面向中后臺系統的前端組件庫。它以用戶體驗一致性為出發點,提供類型全面的組件庫和頁面模板,幫助開發人員快速實現交互一致、界面美觀的界面開發。 ?
項目地址:
https://github.com/XiaoMi/hiui
5.awesome-coding-js
這個倉庫整合了大量算法和數據結構的 JavaScript 實現,涉及經典排序算法、二叉樹、鏈表、字符串等內容,鞏固基礎的朋友,可以關注下。
項目地址:
https://github.com/ConardLi/awesome-coding-js
6.JS-Dev-Reads
專為 JS 開發者匯總的閱讀清單,涉及圖書推薦、文章精選等內容。
項目地址:
https://github.com/twhite96/js-dev-reads
1.JetCache
JetCache 是由阿里巴巴開源的通用緩存訪問框架,它提供了統一的 API 和注解來簡化緩存的使用。如果你了解 SpringCache 的話,那么更容易接受它,因為它比 SpringCache 更強大。它支持 TTL、兩級緩存、分布式緩存自動刷新、異步 Cache API,還可以手動去操作緩存實例。
項目地址:
https://github.com/alibaba/jetcache
2.architect-awesome
一套非常全面的后端架構師技術圖譜,從數據結構與算法著手,帶你學習后端技術的方方面面。目前 GitHub 上已有 3.7W Star,值得推薦。
項目地址:
https://github.com/xingshaocheng/architect-awesome
3.Bistoury
Bistoury 是去哪兒網開源的一個對應用透明,無侵入的 Java 應用診斷工具。它提供了在線 Debug、線程級 CPU 監控等諸多功能,幫助開發人員直接通過日志、內存、線程、類信息、調試、機器和系統屬性等各個方面對應用進行診斷,提升開發人員的診斷效率和診斷能力。
項目地址:
https://github.com/qunarcorp/bistoury
4.Python-Crawler-Tutorial-Starts-From-Zero
這是 Python 從零到一爬蟲系列教程。教程涉及爬蟲預備知識、請求分析流程、Requests 模塊的使用等基礎知識部分,以及 3 個項目實例內容,幫助你零到一學會 Python 爬蟲。
項目地址:
https://github.com/Kr1s77/Python-crawler-tutorial-starts-from-zero
5.VHR
VHR(微人事)是一個由 SpringBoot+Vue 開發的人力資源管理系統。項目采用前后端分離,并提供了詳細的開發文檔,供參考與學習。
項目地址:
https://github.com/lenve/vhr
1.Morec
Morec 是一個精美的 Flutter 版電影客戶端。它利用了豆瓣現有的 API,實現了具備電影搜索、電影榜單、詳情介紹等完整功能的電影展示,或許這個項目能給你一些參考。 ?
項目地址:
https://github.com/Mayandev/morec
2.PickerView
這是一個非常好用的 Android PickerView 庫,內部提供 2 種常用類型的 Picker.它支持擴展自定義 Picker、自定義彈窗,也可作為 View 的非彈窗場景。
項目地址:
https://github.com/jaaksi/pickerview
3.Xpush
Xpush 是一款輕量級、可插拔的 Android 消息推送框架。它集成便捷,提供了一鍵集成推送(極光推送、友盟推送、華為、小米推送等),它具備豐富的功能(支持推送相關的注冊、注銷,標簽的增加、刪除、獲取等操作),還支持統一的消息訂閱、增加消息過濾器、支持 Android 9.0.
項目地址:
https://github.com/xuexiangjys/XPush
1.React Image Crop
React Image Crop 是一款響應式圖像剪裁工具,它具備輕量、無依賴、響應式、支持觸控等特性。
項目地址:
https://github.com/DominicTobias/react-image-crop
2.Chrome 插件英雄榜
這個倉庫匯集了眾多優秀、實用的 Chrome 插件,并提供了詳盡的說明。或許,你會淘到自己喜歡的工具。
項目地址:
https://github.com/zhaoolee/ChromeAppHeroes
3.Microsoft Whiteboard
Microsoft Whiteboard 是由微軟推出的一款電子白板軟件,能幫助你便捷的記錄想法、靈感與創意。它支持實時協作,云端保存等功能。目前可以免費下載,喜歡的朋友可以試試。 ????
項目地址:
https://products.office.com/zh-cn/microsoft-whiteboard/digital-whiteboard-app
4.StarrySky
這是一個豐富的音樂播放封裝庫。它針對快速集成音頻播放功能,減少大家搬磚的時間,提升開發效率。
項目地址:
https://github.com/EspoirX/StarrySky
5.Awesome Actions
這個倉庫匯集了與 GitHub Actions 相關的優質內容。除了官方推薦以外,作者還匯總了 Actions 相關的工具、應用、測試、服務等眾多內容。 ?
項目地址:
https://github.com/sdras/awesome-actions
6.A Programmer's Guide to English
這是一個專為程序員編寫的英語學習指南。面對網上雜七雜八的英語學習技巧,如果想要學好英語,這個指南將會減少你不必要花費的時間。
項目地址:
https://github.com/yujiangshui/A-Programmers-Guide-to-English
1.Simple CSS Waves
純 CSS 實現簡單的波浪動畫。
查看源碼:
https://codepen.io/goodkatz/pen/LYPGxQz
2.CSS 3D Carousel Room
CSS+JS 實現 3D Carousel Room 效果。
查看源碼:
https://codepen.io/Anemolo/pen/ERPvZV
3.Pure CSS Cute Cup
純 CSS 繪制可愛杯子動畫。
查看源碼:
https://codepen.io/keirafoxy/pen/JgdBVW
4.Play Hard
HTML+CSS+JS 實現《Play Hard》文字伸縮炫彩動畫。
查看源碼:
https://codepen.io/chrisgannon/pen/KONLar
5.CSS Only-Social Icons
純 CSS 實現帶有 Hover 效果的社交圖標。
查看源碼:
https://codepen.io/Stockin/pen/aQoQGr
100 Days Of ML Code
人工智能一直是科技領域的熱點,目前市場的需求也更為強烈,所以想學它人不在少數。但是,面對網絡上良莠不齊的學習資源,鑒別和甄選其價值卻耗費了我們不少時間與精力。今天分享的《100 Days Of ML Code》——百日機器學習計劃,在 GitHub 上可謂相當火爆,于是有熱心網友就將其翻譯成了中文版本,供大家參考與學習。
這是一個系統的學習計劃,作者圖文并茂的講述了機器學習的相關概念,并有源碼輔助教學,內容從易到難、循序漸進的幫你掌握機器學習的概念與應用,推薦給大家。
項目地址:
https://github.com/MLEveryday/100-Days-Of-ML-Code
感謝你的閱讀。若你有所收獲,點贊與分享是給我最大的支持。
注:
如需轉載,煩請按下方注明出處信息,謝謝!
作者:IT程序獅
原文地址:
https://zhuanlan.zhihu.com/p/81911980
同時也歡迎關注我的微信公眾號【IT程序獅】,不定期分享 IT 學習文章與資源。
1.開源精粹!18 個值得關注的開源項目與工具
2.開源精粹(二)!22 個實用、有趣的開源項目
3.開源精粹(三)!程序員必備的21款工具與編程靈感
*請認真填寫需求信息,我們會在24小時內與您取得聯系。