原文地址:cloud.tencent.com/developer/a…html
倉庫地址:dalipushandroid
由於阿里的推進對小米和華爲的離線推送兼容的比較好,所以,我使用flutter將阿里推送封裝了一下,效過圖,以下所示,這裏是戰士的將進程殺死以後,小米設備收到的推送效果。ios
一、首先,你須要到阿里雲上面去申請一個appid,申請地址:阿里雲 後端
二、注意,若是你須要小米,華爲離線推送的話,須要參考這裏 參考,注意,華爲的離線推送測試必定要等到審覈經過以後bash
一、寫一個application繼承自FlutterApplication服務器
注意,這個是阿里推送的要求網絡
移動推送的初始化必須在Application中,不能放到Activity中執行。移動推送在初始化過程當中將啓動後臺進程channel,必須保證應用進程和channel進程都執行到推送初始化代碼。 若是設備成功註冊,將回調callback.onSuccess()方法。 但若是註冊服務器鏈接失敗,則調用callback.onFailed方法,而且自動進行從新註冊,直到onSuccess爲止。(重試規則會由網絡切換等時間自動觸發。) 請在網絡通暢的狀況下進行相關的初始化調試,若是網絡不通,或者App信息配置錯誤,在onFailed方法中,會有相應的錯誤碼返回,可參考錯誤處理。app
public class FApp extends io.flutter.app.FlutterApplication {
private static final String TAG = "FApp";
@Override
public void onCreate() {
super.onCreate();
initCloudChannel(this);
//////注意,下面是小米華爲的輔助通道,是一種黑科技,能夠在進程殺死的狀況下,收到推送消息,所謂的離線推送,
/////若是須要,注意讀一下下面一節,服務端代碼那塊,若是不須要,直接註釋2行,能夠知足app在線收到通知
// 註冊方法會自動判斷是否支持小米系統推送,如不支持會跳過註冊。
MiPushRegister.register(this, "2882303761517882020", "5671788227020");
// 註冊方法會自動判斷是否支持華爲系統推送,如不支持會跳過註冊。
HuaWeiRegister.register(this);
//GCM/FCM輔助通道註冊,這個地方打開的狀況我沒測試,不過,GCM你懂的。
// GcmRegister.register(this, sendId, applicationId); //sendId/applicationId爲步驟得到的參數
}
/**
* 初始化雲推送通道
*
* @param applicationContext
*/
private void initCloudChannel(Context applicationContext) {
PushServiceFactory.init(applicationContext);
CloudPushService pushService = PushServiceFactory.getCloudPushService();
pushService.register(applicationContext, new CommonCallback() {
@Override
public void onSuccess(String response) {
Log.d(TAG, "init cloudchannel success");
}
@Override
public void onFailed(String errorCode, String errorMessage) {
Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
}
});
}
}複製代碼
二、 服務端代碼,離線推送是須要後端配合的,後臺按照阿里推送的文檔部署好了以後,你能夠作成管理端,並封裝這樣的一個接口,來推送消息。ide
//服務端配置以下:
PushRequest pushRequest = new PushRequest();
// 其他設置省略
// ...
// 0:表示消息(默認爲0), 1:表示通知
pushRequest.setType(1);
// 標題
pushRequest.setTitle("hello");
// 內容
pushRequest.setBody("PushRequest body");
// 點擊通知後動做 "APPLICATION" : 打開應用 "ACTIVITY" : 打開AndroidActivity "URL" : 打開URL "NONE" : 無跳轉
pushRequest.setAndroidOpenType("APPLICATION");
// 設置輔助彈窗打開Activity,注意,這裏我配置爲了,com.brzhang.dalipush.PopupPushActivity
pushRequest.setAndroidPopupActivity("com.brzhang.dalipush.PopupPushActivity");
// 設置輔助彈窗通知標題
pushRequest.setAndroidPopupTitle("hello2");
// 設置輔助彈窗通知內容
pushRequest.setAndroidPopupBody("PushRequest body2");
// 設定android類型設備通知的擴展屬性
pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");複製代碼
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.brzhang.sophixtest"
minSdkVersion 16
targetSdkVersion 27
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
manifestPlaceholders = [
ALIPUSH_PKGNAME : applicationId,
ALIPUSH_APPKEY : "24xxxx5693", //ALIPush上註冊的包名對應的appkey.
ALIPUSH_APPSECRET: "dd973xxxxxxxxxxxf575aee1ab1", //appsecret.
]
//todo
// ndk {
// //選擇要添加的對應cpu類型的.so庫。
// abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'armeabi-v8a'
// }
}複製代碼
主要是兩個地方注意: 一個是applicationId,這裏要填你在阿里上申請的appid相關的那個包名 二個是manifestPlaceholders,這裏也注意填寫你本身的阿里雲key,secret。測試
四、請注意,不要使用個人appid到你的項目中,你用了也沒辦法推送,由於,要等登錄個人帳號去發推送消息啊。
ios使用起來就沒有那麼複雜了,惟一的是:ios須要去配置APNS推送證書,能夠參考阿里推送ios配置文檔,到蘋果開發者中心申請的步驟也是繁瑣的一逼,不過,搞過一次以後,你就會發現很是簡單,最後導出的p12文件交給阿里push就好。
而後,你的ios工程中的配置,能夠參考本項目example目錄下的配置,
一、appDelegate.m文件
二、AliyunEmasServices-info.plist的導入
三、pod文件編寫
大概經歷這些步驟,cmd+r
就ok了。