欧美日韩专区-欧美日韩中文一区二区三区-欧美日韩中文一区-欧美日韩中文国产一区二区三区-日韩成人在线免费视频

小米推送集成

云通訊 SDK在5.4.0之后開始支持小米推送。開發者需要根據小米官網文檔集成小米推送。 小米推送服務集成

1.準備工作

登錄小米開發者網站,注冊app,申請AppId,AppKey。

AppId和AppKey是客戶端的身份標識,在客戶端SDK初始化時使用。然后下載安卓sdk并導入,小米sdk下載

2.上傳推送證書

注冊完成后,需要在云通訊開發者后臺上傳推送證書,云通訊管理控制臺—>IM基礎功能配置—>推送證書,然后輸入你在小米開放后臺創建的應用的APPID、APPKey及包名。

3.配置AndroidMainfest.xml文件

(1) 小米推送服務SDK支持的最低安卓版本為2.2。

       
	//如下				
	<uses-sdk  android:minSdkVersion="8"/>
                    

(2) 推送服務需要的權限列表。

     
//必選
<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.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.VIBRATE"/> 
<permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" 
android:protectionLevel="signature" /> 
//這里com.xiaomi.mipushdemo改成app的包名  
<uses-permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" /> 
//這里com.xiaomi.mipushdemo改成app的包名
                

(3) 推送服務需要配置的service和receiver。

     
//小米
<service  android:enabled="true"  android:process=":pushservice"  
android:name="com.xiaomi.push.service.XMPushService"/> 
<service   
android:name="com.xiaomi.push.service.XMJobService"   android:enabled="true"   
android:exported="false"   android:permission="android.permission.BIND_JOB_SERVICE"  
android:process=":pushservice" /> 
//注:此service必須在3.0.1版本以后(包括3.0.1版本)加入
<service   
android:enabled="true"   
android:exported="true"   android:name="com.xiaomi.mipush.sdk.PushMessageHandler" />  
<service 
android:enabled="true"   android:name="com.xiaomi.mipush.sdk.MessageHandleService" />  
//注:此service必須在2.2.5版本以后(包括2.2.5版本)加入
<receiver   
android:exported="true"   android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver" >   
<intent-filter>     
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />     
<category android:name="android.intent.category.DEFAULT" />   
</intent-filter> 
</receiver> 
<receiver   
android:exported="false"   
android:process=":pushservice"   android:name="com.xiaomi.push.service.receivers.PingReceiver" >   
<intent-filter>     
<action android:name="com.xiaomi.push.PING_TIMER" />   
</intent-filter> 
</receiver>
                    

備注:

這里將XMPushService和PingReceiver定義在了pushservice進程中,您也可以配置其運行在任意進程。如果沒有配置android:process這個屬性,那么它們將運行在應用的主進程中。要在調試程序時檢查AndroidManifest.xml是否符合上述配置,使用3.4.15所述的API:checkManifest(Context) 。

4.注冊推送服務

通過調用MiPushClient.registerPush來初始化小米推送服務。注冊成功后,您可以在自定義的onCommandResult和onReceiveRegisterResult中收到注冊結果,其中的regId即是當前設備上當前app的唯一標示。您可以將regId上傳到自己的服務器,方便向其發消息。

為了提高push的注冊率,你可以在Application的onCreate中初始化push。你也可以根據需要,在其他地方初始化push。代碼如下:

public class DemoApplication extends Application {      
public static final String APP_ID = "your appid";     
public static final String APP_KEY = "your appkey";     
public static final String TAG = "your packagename";      
@Override     
public void onCreate() {         
super.onCreate();//初始化push推送服務         
if(shouldInit()) {             
MiPushClient.registerPush(this, APP_ID, APP_KEY);         
}         
//打開Log         
LoggerInterface newLogger = new LoggerInterface() {             
 @Override             
public void setTag(String tag) {                 
// ignore                
}              
@Override             
public void log(String content, Throwable t) {                 
Log.d(TAG, content, t);            
}              
@Override             
public void log(String content) {                 
Log.d(TAG, content);             
}         
};         
Logger.setLogger(this, newLogger);     
}      
private boolean shouldInit() {         
ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE));        
 List processInfos = am.getRunningAppProcesses();         
 String mainProcessName = getPackageName();         
int myPid = Process.myPid();         
for (RunningAppProcessInfo info : processInfos) {             
if (info.pid == myPid && mainProcessName.equals(info.processName)) {                 
return true;             
  }         
}         
return false;     
  } 
}
			   

4.自定義一個BroadcastReceiver類

為了接收消息,您需要自定義一個繼承自PushMessageReceiver類的BroadcastReceiver, 實現其中的onReceivePassThroughMessage,onNotificationMessageClicked,onNotificationMessageArrived, onCommandResult和onReceiveRegisterResult方法,然后把該receiver注冊到AndroidManifest.xml文件中。 onReceivePassThroughMessage用來接收服務器發送的透傳消息,onNotificationMessageClicked用來接收服務器發來的通知欄消息(用戶點擊通知欄時觸發), onNotificationMessageArrived用來接收服務器發來的通知欄消息(消息到達客戶端時觸發,并且可以接收應用在前臺時不彈出通知的通知消息), onCommandResult用來接收客戶端向服務器發送命令消息后返回的響應,onReceiveRegisterResult用來接受客戶端向服務器發送注冊命令消息后返回的響應。

例如:自定義的BroadcastReceiver

public class DemoMessageReceiver extends PushMessageReceiver {     
private String mRegId;     
private long mResultCode = -1;     
private String mReason;     
private String mCommand;     
private String mMessage;     
private String mTopic;     
private String mAlias;     
private String mUserAccount;     
private String mStartTime;     
private String mEndTime;     
@Override     
public void onReceivePassThroughMessage(Context context, MiPushMessage message) {         
mMessage = message.getContent();         
if(!TextUtils.isEmpty(message.getTopic())) {             
mTopic=message.getTopic();         
} else if(!TextUtils.isEmpty(message.getAlias())) {             
mAlias=message.getAlias();         
} else if(!TextUtils.isEmpty(message.getUserAccount())) {             
mUserAccount=message.getUserAccount();         
}     
}     
@Override     
public void onNotificationMessageClicked(Context context, MiPushMessage message) {         
mMessage = message.getContent();         
if(!TextUtils.isEmpty(message.getTopic())) {             
mTopic=message.getTopic();         
} else if(!TextUtils.isEmpty(message.getAlias())) {             
mAlias=message.getAlias();         
} else if(!TextUtils.isEmpty(message.getUserAccount())) {             
mUserAccount=message.getUserAccount();         
}     
}     
@Override     
public void onNotificationMessageArrived(Context context, MiPushMessage message) {         
mMessage = message.getContent();         
if(!TextUtils.isEmpty(message.getTopic())) {             
mTopic=message.getTopic();         
} else if(!TextUtils.isEmpty(message.getAlias())) {             
mAlias=message.getAlias();         
} else if(!TextUtils.isEmpty(message.getUserAccount())) {             
mUserAccount=message.getUserAccount();         
}     
}     
@Override     
public void onCommandResult(Context context, MiPushCommandMessage message) {         
String command = message.getCommand();         
List arguments = message.getCommandArguments();         
String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null);         
String cmdArg2 = ((arguments != null && arguments.size() > 1) ? arguments.get(1) : null);         
if (MiPushClient.COMMAND_REGISTER.equals(command)) {             
if (message.getResultCode() == ErrorCode.SUCCESS) {                 
mRegId = cmdArg1;             
}         
} else if (MiPushClient.COMMAND_SET_ALIAS.equals(command)) {             
if (message.getResultCode() == ErrorCode.SUCCESS) {                 
mAlias = cmdArg1;             
}         
} else if (MiPushClient.COMMAND_UNSET_ALIAS.equals(command)) {             
if (message.getResultCode() == ErrorCode.SUCCESS) {                 
mAlias = cmdArg1;             
}         
} else if (MiPushClient.COMMAND_SUBSCRIBE_TOPIC.equals(command)) {             
if (message.getResultCode() == ErrorCode.SUCCESS) {                 
mTopic = cmdArg1;             
}         
} else if (MiPushClient.COMMAND_UNSUBSCRIBE_TOPIC.equals(command)) {             
if (message.getResultCode() == ErrorCode.SUCCESS) {                 
mTopic = cmdArg1;             
}         
} else if (MiPushClient.COMMAND_SET_ACCEPT_TIME.equals(command)) {             
if (message.getResultCode() == ErrorCode.SUCCESS) {                 
mStartTime = cmdArg1;                 
mEndTime = cmdArg2;             
}         
}      
}     
@Override     
public void onReceiveRegisterResult(Context context, MiPushCommandMessage message) {         
String command = message.getCommand();         
List arguments = message.getCommandArguments();         
String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null);         
String cmdArg2 = ((arguments != null && arguments.size() > 1) ? arguments.get(1) : null);         
if (MiPushClient.COMMAND_REGISTER.equals(command)) {             
if (message.getResultCode() == ErrorCode.SUCCESS) {                 
mRegId = cmdArg1;             
}         
}      
} }
將自定義的BroadcastReceiver注冊到AndroidManifest.xml文件中
<receiver   android:exported="true"   android:name="com.xiaomi.mipushdemo.DemoMessageReceiver">           
//這里com.xiaomi.mipushdemo.DemoMessageRreceiver改成app中定義的完整類名  <intent-filter>     
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />   </intent-filter>     
<intent-filter>     
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />   </intent-filter>   
<intent-filter>     
<action android:name="com.xiaomi.mipush.ERROR" />   
</intent-filter> 
</receiver>

			   

5.上報小米Token

將獲取到的Token,上報云通訊SDK。在云通訊SDK初始化登錄成功之后調用。

//上報小米Token
ECDevice.reportXiaoMiToken(token);
		   

文檔更新時間:2017年9月21日

主站蜘蛛池模板: 亚洲十欧美十日韩十国产 | www.四虎网站 | 篠崎かんな黑人解禁粗暴 | 国产自产自拍 | 亚洲欧美在线视频观看 | 在线视频久| 国产福利一区二区精品视频 | 五月花精品视频在线观看 | 欧美成人午夜剧场 | 午夜羞羞视频 | 亚洲自拍偷拍视频 | 久久久久亚洲 | 激情网站网址 | 亚洲看片| 自拍偷拍亚洲视频 | 香蕉午夜 | 欧美一区二区福利视频 | 日本在线视频免费看 | 中文字幕一区二区三区四区五区人 | 狠狠五月深爱婷婷网 | 色五婷婷 | 亚洲国产精品久久久久666 | 丁香激情六月 | 亚洲国产成人综合 | 国产成人精品免费久久久久 | 欧美综合精品一区二区三区 | 麻豆www| 亚洲欧美精品中字久久99 | 激情综合网五月天 | 最近的中文字幕在线看 | 亚洲午夜精品 | 在线aa| 黑人一区 | 五月一区二区久久综合天堂 | 免费视频色 | 免费版 | 三妻四妾韩国电影 | 婷婷免费高清视频在线观看 | 亚洲日韩欧美综合 | 欧美久久一区二区三区 | 久热精品在线观看 |