說好要寫示例文章來給大家演示一下什么樣的文章才比較適合在微信上發(fā),那么本篇就是一個典型的標桿了。有朋友在群里問我,怎么樣實現(xiàn)從網(wǎng)頁中直接打開App的效果,這個問題實現(xiàn)起來并不復雜,但是卻有很多人都不會,像這種文章就太適合在微信上發(fā)了。
實際上這種技術(shù)是個一個專業(yè)名詞的,叫deep links,在Google Ads里面用的比較多。比如說你是一個購物的App,花錢在人家的網(wǎng)頁上掛了個裙子的廣告鏈接,那么當用戶點擊了這個廣告鏈接,最理想的效果就是直接打開你的App的裙子界面,然后用戶可能就會直接購買了。
怎么樣實現(xiàn)這種效果呢?其實并不復雜,說白了就是利用Android的隱式Intent機制,對于隱式Intent如果還不了解的朋友請參考第一行代碼第二章,講的很透徹。
下面開始嘗試實現(xiàn)deep links功能,首先我們來認識一下鏈接,對于鏈接大家肯定是再熟悉不過了,比如這樣:
http://www.example.com/
其中http部分是協(xié)議,www.example.com部分是域名。那么根據(jù)我們平時上網(wǎng)的經(jīng)驗,域名部分一般都是各個網(wǎng)站的具體網(wǎng)址,而協(xié)議部分基本都是http,因為這是一個最廣泛使用的協(xié)議。
而我們實現(xiàn)deep links功能其實也是借助這樣的鏈接機制,但是我們不必拘泥于http協(xié)議,而是可以自定義任何的協(xié)議。
了解了這個概念之后就可以開始寫一些具體的代碼了,新建一個Android項目,然后打開AndroidManifest.xml文件,在MainActivity中添加如下內(nèi)容:
? ?...... ? ? ? ? ? ? ? ? ? ? ? ? ? ?
對于熟悉隱式Intent的部分,這部分代碼應(yīng)該不難理解。這里我們新增了一個標簽,在里面加入了action,category和data三部分內(nèi)容。其中action和category部分要固定寫成這個樣子,我們不能修改的,因為當你點擊一個html鏈接時系統(tǒng)自動發(fā)出就是這樣的action和category。
然后data部分就需要我們來自定義了,android:scheme用于指定協(xié)議,類似于http這樣的東西,這里我們指定成了com.example.androidtest,這是一個自定義的協(xié)議,指定成這樣是為了避免和其它的應(yīng)用程序沖突,從而誤把deep links鏈到人家的程序里去了。除了android:scheme之外,我們還可以通過android:host來指定域名,android:port來指定端口,android:path來指定路徑,這些屬性都可以對deep links進行更多的限制,要滿足特定條件才能打開指定App。那這里我希望只要是使用com.example.androidtest協(xié)議的鏈接就能打開我們的程序,因此就不對其他屬性進行設(shè)置了。
現(xiàn)在將程序安裝到手機上就可以了。
為了測試這個功能,我在本地搭建了一個服務(wù)器,然后在網(wǎng)頁上放了這樣一個鏈接:
Try Deep Links
也就是說,當點擊了Try Deep Links這個鏈接時,會嘗試跳轉(zhuǎn)到com.example.androidtest://buydress這個界面,那么我們現(xiàn)在來試試吧,結(jié)果如下:
可以看到,deep links已經(jīng)生效了。
那么有的朋友可能還會有疑問,這樣只是打開了程序的MainActivity,如果真的像剛才介紹的一樣,我想要直接打開購買裙子的界面該怎么辦呢?總不能給每個Activity都設(shè)置一個deep link吧?確實沒有必要,我們可以通過非常簡單的界面跳轉(zhuǎn)來實現(xiàn)這個功能。比如說上面的鏈接,除了scheme之外,還有一個叫做buydress的host,我們只需要在MainActivity中取出這個host,判斷出來原來是你想買裙子的,然后跳轉(zhuǎn)到裙子界面就可以了。具體代碼如下:
publicclassMainActivityextendsAppCompatActivity{
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState); ? ? ? ?setContentView(R.layout.activity_main);
Intentintent=getIntent();
if(intent!=null) {
Uriuri=intent.getData();
Stringhost=uri.getHost();
if("buydress".equals(host)) {
// 跳轉(zhuǎn)到賣裙子界面} ? ? ? ?} ? ?}}
本篇文章的內(nèi)容就到這里, 是不是感覺簡單易懂,而又可以學到東西?沒有貼大量的代碼,也沒有長篇大論講一個知識點,10分鐘就能讀完的精煉文章,這就是微信上最適合發(fā)的標桿技術(shù)文章了。那本篇文章也是一個比較典型的示例,希望所有有意向向我投稿的作者們可以參考一下, 不一定非要是多少高級的技術(shù)才可以拿來投稿的,你平時工作總結(jié)出的一些別人不知道的心得,也可以拿出來分享的。
至于我用來錄制GIF圖片的工具,我知道也會有很多朋友好奇,這里統(tǒng)一回答一下:Mac電腦上我使用的licecap,Window上我使用的GifCam,都是非常好用的工具,啟用錄制之后對模擬器進行操作就可以了。