本發明涉及Android移動終端的信息交互領域,具體涉及一種Android移動終端的網絡交互方法及系統。
背景技術:
在Android移動終端進行開發時,通常會遇到2個以上的移動終端在應用中進行交互的場景,目前多個移動終端交互傳遞消息時,消息的接收和推送一般通過交互服務器進行中轉,交互服務器進行中轉不僅增大了交互信息的復雜程度,而且耗費了交互服務器較多的網絡資源,增加了運行成本。
技術實現要素:
針對現有技術中存在的缺陷,本發明解決的技術問題為:在不需要通過交互服務器轉發交互信息的情形下,實現多個移動終端的網絡交互,本發明不僅顯著降低了交互信息的復雜程度,而且在交互服務器上注冊移動終端所耗費的網絡資源較少,降低了運行成本。
為達到以上目的,本發明提供的Android移動終端的網絡交互方法,包括以下步驟:
步驟A:移動終端根據交互服務器的真實地址,向交互服務器發起基于SIP的注冊請求,注冊請求中的注冊數據包括移動終端本地儲存的IMEI編碼和移動終端IP,轉到步驟B;
步驟B:所述注冊數據不存在于交互服務器中時,交互服務器根據注冊數據生成唯一ID字符串,并將唯一ID字符串進行加密;交互服務器將注冊數據和唯一ID字符串保存形成注冊請求數據;交互服務器將唯一ID字符串返回至移動終端,轉到步驟C;
步驟C:當前移動終端A需要向移動終端B進行交互時,移動終端A獲取移動終端B的唯一ID字符串后,向交互服務器發送帶有移動終端B的唯一ID字符串的交互請求,轉到步驟D;
步驟D:交互服務器根據交互請求中的唯一ID字符串對應的移動終端IP,向移動終端B發送基于SIP的響應信息,響應信息中包括移動終端A的唯一ID字符串;交互服務器收到移動終端B響應的同意交互信息后,將移動終端B的IP返回至移動終端A,轉到步驟E;
步驟E:移動終端A根據移動終端B的IP,向移動終端B發送傳輸信息加密方式;移動終端A收到移動終端B響應的加密方式確認成功信息后,將傳輸信息通過所述加密方式加密后發送至移動終端B,移動終端B通過所述加密方式對應的解密方式對傳輸信息進行解密。
與現有技術相比,本發明的優點在于:
參見步驟A和步驟B可知,本發明的交互服務器只用于注冊移動終端,通過注冊的唯一ID字符串,能夠促使需要交互的移動終端跳過交互服務器自行傳輸信息,因此與現有技術中通過交互服務器轉發交互消息相比,本發明不僅顯著降低了交互信息的復雜程度,而且在交互服務器上注冊移動終端所耗費的網絡資源較少,降低了運行成本。
與此同時,參見步驟B可知,本發明的交互服務器生成唯一ID字符串時,會通過加密方式加密;參見步驟E可知,移動終端進行交互時,會通過自行設置的加密方式傳輸信息進行加密,加密方式只有交互雙方知悉,進一步增強了網絡傳輸的安全。
進一步,本發明根據鏡像地址請求交互服務器的真實地址,進而保證開發者的交互服務器可隨時變動或者更換,靈活性較強。
附圖說明
圖1為本發明實施例中Android移動終端的網絡交互方法的流程圖。
具體實施方式
以下結合附圖及實施例對本發明作進一步詳細說明。
參見圖1所示,本發明實施例中的Android移動終端的網絡交互方法,包括以下步驟:
S1:移動終端根據交互服務器的真實地址,向交互服務器發起基于SIP(Session Initiation Protocol,會話初始協議)的注冊請求,注冊請求中的注冊數據包括移動終端本地儲存的IMEI(International Mobile Equipment Identity,國際移動設備標識)編碼和移動終端IP,轉到S2。
S1中交互服務器的真實地址的獲取方法為:根據預先設置于移動終端中的鏡像地址,使用Android中的HttpGet向交互服務器發起真實地址請求,具體流程為:
HttpGet httpGet=new HttpGet(url);
//url為鏡像地址;
HttpClient httpClient=new DefaultHttpClient();
//發送請求
HttpResponse response=httpClient.execute(httpGet);
//顯示響應
showResponseResult(response);
//一個私有方法,將交互服務器的響應結果顯示出來;
根據交互服務器的響應結果獲取真實地址,具體流程為:
HttpEntity httpEntity=response.getEntity();
InputStream inputStream=httpEntity.getContent();
BufferedReader reader=
new BufferedReader(new InputStreamReader(inputStream));
String result="";
String line="";
while(null!=(line=reader.readLine()))
{result+=line;}
使用上述代碼,會得到一個result的返回數據,該數據交互服務器的真實地址。
S1中IMEI編碼的獲取方式為:
android.os.SystemProperties.get(android.telephony.TelephonyProper ties.PROPERTY_IMEI)。
S1中向交互服務器發起sip注冊請求的方法為:
調用sipservice.class,實例化sipservice.class中的SipManager(sip管理器),具體流程為:mSipManager=SipManager.newInstance(this)。
通過SipManager初始化sip協議棧(即使用voip中的本地配置文件SipProfile來執行注冊服務)后,通過真實地址和IMEI編碼向交互服務器發起sip注冊請求,具體流程為:
SipProfile.Builder builder=
new SipProfile.Builder(username,domain);
上述UserName為IME編碼,domain為真實地址。
S2:交互服務器判斷注冊請求中的注冊數據是否已經存在,若是,則證明當前移動終端已注冊,轉到S4,否則證明當前移動終端未注冊,轉到S3。
S3:交互服務器根據注冊數據生成唯一ID字符串,并將唯一ID字符串通過MD5(Message Digest Algorithm MD5,消息摘要算法第五版)加密算法加密(唯一ID就是移動終端交互時識別交互對方的標識);交互服務器將注冊數據和唯一ID字符串保存形成注冊請求數據、并標記保存時間;交互服務器將注冊成功信息(例如回復狀態為200,若注冊失敗,則等待移動終端再次發起注冊)和唯一ID字符串返回至移動終端,轉到S5。
此外,由于注冊請求基于SIP,即注冊請求是1個臨時會話(即會話時間小于指定時間,本實施例中為3小時),因此交互服務器在啟動時(即進行S2時),會自動啟動輪詢服務,根據保存時間判斷對應的已經保存的注冊請求數據是否已過期(即保存時間距離交互服務器當前時間是否大于3小時),若是,則刪除注冊請求數據,否則繼續保存注冊請求數據。
S4:交互服務器將注冊數據對應的注冊請求數據的保存時間,更新為當前時間后,向移動終端返回已注冊信息、以及注冊數據對應的唯一ID字符串,轉到S5。
S5:當前移動終端A需要向其他移動終端B進行交互時,移動終端A獲取移動終端B的唯一ID字符串后(獲取方式包括短信、郵件等多種),通過makeCall方法,向交互服務器發送帶有移動終端B的唯一ID字符串的交互請求,轉到S6。
S5中交互請求的發送方式為:
SipManager.makeCall(mSipProfile.getUriString(),md5,listener,30);
其中SipProfile為移動終端A的本地配置文件,UriString()為交互服務器信息,md5為移動終端B的唯一ID字符串,listener為監聽器。
S6:交互服務器根據交互請求中的唯一ID字符串對應的移動終端IP(若唯一ID字符串不存在,則直接向移動終端A返回交互請求失敗信息),向移動終端B發送基于SIP的響應信息,響應信息中包括移動終端A的唯一ID字符串。交互服務器收到移動終端B的響應后(即返回同意交互信息,例如狀態碼200;移動終端B若已注冊,則監聽器收到響應信息后會彈出對話框,以供移動終端B的用戶選擇同意或者拒絕交互),將移動終端B的IP返回至移動終端A,轉到S7。
S6中若交互服務器收到移動終端B返回的拒絕交互信息(例如狀態401)時,向移動終端A返回交互請求失敗信息)。
S7:移動終端A使用sipcall(聊天通訊類軟件,運行環境支持Android1.5),根據移動終端B的IP向移動終端B發送傳輸信息加密方式。若移動終端B同意使用移動終端A發送的加密方式對傳輸信息進行加密和解密,則向移動終端A響應加密方式確認成功信息;移動終端A將傳輸信息通過上述加密方式加密后,發送給移動終端B,移動終端B通過上述加密方式對應的解密方式對傳輸信息進行解密。
S7中加密方式為Base64(8Bit字節代碼的編碼方式)或自定義的字符串。
S7中移動終端A向移動終端B發送傳輸信息加密方式后,若移動終端B不同意使用移動終端A發送的加密方式對傳輸信息進行加密和解密,則向移動終端A響應加密方式確認失敗信息,重新執行S7。
本發明實施例中的Android移動終端的網絡交互系統,包括:設置于移動終端上的服務器地址請求模塊、交互請求模塊和交互信息傳輸模塊;該系統還包括設置于交互服務器上的交互秘鑰生成模塊和交互響應模塊。
服務器地址請求模塊用于:根據預先設置的交互服務器的鏡像地址,獲取交互服務器的真實地址;根據交互服務器的真實地址,向交互秘鑰生成模塊發起基于SIP的注冊請求,注冊請求中的注冊數據包括移動終端本地儲存的IMEI編碼和移動終端IP。
交互秘鑰生成模塊用于:收到注冊請求后:
若注冊數據不存在于交互服務器中時,根據注冊數據生成唯一ID字符串,并將唯一ID字符串進行加密(加密方式為MD5);將注冊數據和唯一ID字符串保存形成注冊請求數據(并標記保存時間);將唯一ID字符串返回至交互請求模塊;
若所述注冊數據已保存于交互服務器中時,將注冊數據對應的注冊請求數據的保存時間,更新為當前時間后,向交互請求模塊返回所述注冊數據對應的唯一ID字符串。
交互秘鑰生成模塊工作時,還會根據保存時間判斷對應的注冊請求數據是否已過期,若是,則刪除注冊請求數據,否則繼續保存注冊請求數據。
兩個移動終端進行交互時,定義主動交互的移動終端的交互請求模塊和交互響應模塊為A,被動交互的移動終端的交互請求模塊和交互響應模塊為B。
交互請求模塊A用于:獲取移動終端B的唯一ID字符串后,向交互響應模塊B發送帶有移動終端B的唯一ID字符串的交互請求。
交互請求模塊B用于:收到交互響應模塊發送的響應信息后,向交互響應模塊返回同意交互信息或者拒絕交互信息。
交互響應模塊用于:收到交互請求模塊A發送的交互請求后,根據交互請求中的唯一ID字符串對應的移動終端B的IP,向交互請求模塊B發送基于SIP的響應信息,響應信息中包括交互請求模塊A所屬移動終端的唯一ID字符串;收到交互請求模塊B響應的同意交互信息后,將移動終端B的IP返回至交互信息傳輸模塊A;收到交互請求模塊B響應的拒絕交互信息后,向交互請求模塊A返回交互請求失敗信息。
交互信息傳輸模塊A用于:根據移動終端B的IP,向交互信息傳輸模塊B發送傳輸信息加密方式(加密方式為Base64或自定義的字符串);收到交互信息傳輸模塊B響應的加密方式確認成功信息后,將傳輸信息通過所述加密方式加密后發送至交互信息傳輸模塊B;收到交互信息傳輸模塊B響應的加密方式確認失敗信息后,重新開始工作。
交互信息傳輸模塊B用于:收到傳輸信息加密方式,向交互信息傳輸模塊A返回加密方式確認成功信息或加密方式確認失敗信息;收到加密的傳輸信息后,通過所述加密方式對應的解密方式對傳輸信息進行解密。
進一步,本發明不局限于上述實施方式,對于本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發明的保護范圍之內。本說明書中未作詳細描述的內容屬于本領域專業技術人員公知的現有技術。