由于信鴿接入文檔比較詳細,這里我不對如何接入進行闡述,想知道具體如何接入可以參考信鴿幫助手冊: 信鴿Android快速接入 ,在這里,我就說一些在文檔和信鴿提供的demo里不細致或者沒有或者以前我沒有發現的,但是比較實用的進行描述吧,也是一個工作的存檔。
Part1:信鴿注冊。
APP只有在完成信鴿的啟動與注冊后才可以信鴿SDK提供push服務,在這之前請確保配置AccessId和AccessKey。
新版的SDK已經將啟動信鴿和APP注冊統一集成在注冊接口中,即只需調用注冊接口便默認完成啟動和注冊操作。
注冊成功后,會返回設備token,token用于標識設備唯一性,同時也是信鴿維持與后臺連接的唯一身份標識。
關于如何獲取token請參考“獲取token”章節。注冊接口通常提供簡版和帶callback版本的接口,請根據業務需要決定選擇接口。
這是信鴿接入文檔里的話,一開始我以為只要信鴿注冊了一次,就ok了。事實上信鴿的token只要注冊過一次,只要你不反注冊就不會丟失。但是,你在后臺程序中關掉APP,信鴿就接收不到通知了。所以,你注冊的代碼必須寫在每次啟動APP都會去調用的地方。而且不能傻傻的跟我以前一樣,為了避免多次注冊還加個判斷token是否存在的代碼,這個確實是畫蛇添足啊!人家要的就是每次打開APP都注冊一次!(可能我的想法不是很正確啊!但這是我實際開發中遇到的,實際的方法,就是每次打開APP注冊)
Part2:debug模式。
XGPushConfig配置類 , 提供信鴿服務的對外配置API列表,方法默認為public static類型,對于本類提供的set和enable方法,要在XGPushManager接口前調用才能及時生效。
void enableDebug(Context context,boolean debugMode)
是否開啟debug模式,即輸出logcat日志(重要:為保證數據的安全性,發布前必須設置為false)
debug模式在實際開發中還是很重要的,因為我以前也在另一個項目中集成過信鴿,但是那邊需求比較簡單,只需要集成進去就可以了,所以也就沒有過多的關注過,但如果你的需求比較復雜,而你對信鴿了解還不是很深的時候,遇到問題,debug模式就能給你很大的幫助了,而且就是一句代碼的問題:
XGPushConfig.enableDebug(MainActivity.this, RuntimeStatus.isDebug());
RuntimeStatus.isDebug(),是我本地測試環境正式環境的字段。
Part3:信鴿推送通知欄點擊之重復打開APPamp;重復從Laucher主入口啟動問題
說到這個首先要推薦一篇文章。這是一篇別人工作的存檔,里面的字數特別少,相對于別人文章而言,但是卻每一句話都特別有用!
【Android】信鴿推送通知欄點擊之重復打開APPamp;重復從Laucher主入口啟動問題
http://blog.csdn.net/littlebrain4solving/article/details/50903052 鏈接地址
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 判斷是否從推送通知欄打開的 XGPushClickedResult click = XGPushManager.onActivityStarted(this); if(click !=null) { //從推送通知欄打開-Service打開Activity會重新執行Laucher流程 //查看是不是全新打開的面板 if(isTaskRoot()) { return; } //如果有面板存在則關閉當前的面板 finish(); }}
這段代碼可以很好的解決外部來了通知點開后會打開兩遍APP的問題,但是要注意一點就是這段話一定要放在onCreate的最開始的地方。放到其他代碼后面還是不能解決問題的。我就在這里摔了一跤,把這段代碼放在最后面,還是debug模式才發現這個問題。
Part4:從信鴿的Service外部進程打開Activity
這里特別指出一下就是去Activity的時候,必須指定FLAG_ACTIVITY_NEW_TASK標記。不加這句,就進不去Activity的界面。
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Part5:更改信鴿通知欄的圖片大小
通知欄中信鴿推送的圖片,一般是在我們的AndroidManifest里的android:icon的屬性里添加的,一般都會選擇這里面的圖片。我們當然可以在這里進行圖片適配,但是安卓總有些奇葩手機,這樣的適配的不行的。所以,在反編譯之后,發現有幾句代碼可以專門針對信鴿的圖片進行更改。不去用icon里的圖片。
XGBasicPushNotificationBuilder builder =newXGBasicPushNotificationBuilder();
builder.setIcon(R.drawable.push_logo);//設置狀態欄的通知小圖標
XGPushManager.setDefaultNotificationBuilder(MainActivity.this, builder);
Part6:按返回鍵退出APP后,從通知點擊進入APP異常問題
這是我踩的一個坑,當然,這個跟我自己考慮不全更有關系。解決做法也很簡單。在點擊回調的地方onNotifactionClickedResult
這個函數里面,在獲取了信鴿傳過來的內容之后,加上去主界面的跳轉。
Intent intent =newIntent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(quot;push_paramsquot;, entity);
context.startActivity(intent);
在主界面做你想做的詳細跳轉。NoticeClassIntentEntity類是信鴿傳過來的內容的字段類,NoticeReceiver.NoticeClassIntent()是我自己項目里的具體跳轉類,是個static類型的。
private void sendMessage() {
Intent it = getIntent();
NoticeClassIntentEntity= (NoticeClassIntentEntity) it.getSerializableExtra(quot;push_paramsquot;);
if(entity !=null) {
NoticeReceiver.NoticeClassIntent(MainActivity.this, entity.messageType, entity);
}}
還有一點要注意是因為都是在主函數里面做的跳轉,當APP存在的時候點擊通知欄就必須在onNewIntent()調sendMessage()方法。
Part7:最后
如果大家有疑問或者其他處理方法可以給我留言,我會盡快答復,謝謝!
Tags: 信鴿推送 安卓開發
文章來源:http://www.jianshu.com/p/f1a453162044