1. 程式人生 > >Android 微信分享後用戶選擇留在微信了。怎麼辦???如何監聽呢?

Android 微信分享後用戶選擇留在微信了。怎麼辦???如何監聽呢?

        使用者分享成功後有兩個選擇,“留在微信”和“返回app”。如果使用者選擇“返回app”,我們這樣正常接收到回撥。如果使用者“留在微信”,我們就無法就到回撥。所以只要能檢測到使用者調起分享後留在了微信,就可以認為使用者分享成功了。因為分享失敗或者取消分享到情況下,使用者是不能留在微信的,我們也是可以正常接收到失敗或取消的回撥的。

那麼我們如何確定使用者留在了微信呢?讓我們看一下當用戶點選“返回app”和點選“留在微信”時,當前Activity的生命週期會有什麼不同,從中找出端倪。 
注:當前Activity指的是調起微信分享的Activity,而不是接收微信分享回撥的WXEntryActivity。 
當調起微信分享時,會啟動一個微信分享的頁面,把當前Activity覆蓋,當前Activity的生命週期會回撥onPause()->onStop()。 
圖片

 
當分享成功,點選“返回app”時,會關閉分享頁面,回到當前Activity。當前Activity的生命週期會回撥onRestart() ->onStart()->onResume()。 
圖片 
當分享成功,點選“留在微信”時,會關閉分享頁面,但是不會回到當前Activity。當前Activity的生命週期會回撥onRestart() ->onStart()->onStop(),不會回撥onResume()。 
圖片 
這是因為點選“留在微信”,關閉分享頁面時會讓當前Activity重新啟動(onRestart),但同時又啟動了微信,當前Activity還沒來得及顯示(onResume),就被微信覆蓋了(onStop)。所以不會呼叫它的onResume方法。

由上面生命週期回撥的區別可以發現,“返回app”時會同時回撥onRestart() 和onResume(),而“留在微信”時只會回撥onRestart()不會回撥onResume()。那麼我們是否就可以認為,如果Activity回調了onRestart(),但是沒有回撥onResume(),就是使用者留在微信的情況,也就是說使用者已經分享成功了(只有分享成功的情況下才有可能留住微信)。 
下面我們用程式碼測試一下這種想法是否可行。

    private boolean isSharing;  //是否調起了分享。如果調起分享,這個值為true。
    private boolean isResume;  //Activity是否處於前臺。

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("TAG", "onRestart");
        if (isSharing) {
            isSharing = false;
            //這裡要延時0.2秒在判斷是否回調了onResume,因為onRestart在onResume之前執行。
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    // 如果0.2秒後沒有呼叫onResume,則認為是分享成功並且留著微信。
                    if (!isResume) {
                        Log.i("TAG", "分享成功,留在微信");
                    }
                }
            }, 200);
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("TAG", "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("TAG", "onResume");
        isSharing = false;
        isResume = true;
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("TAG", "onPause");
        isResume = false;
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("TAG", "onStop");
    }
  • 分享成功,點選“留在微信”後,log如下: 

圖片 
我們成功的檢查到了使用者分享成功並留在微信。證明了我們的這種方法是可行。 
不過如果使用者既沒有點選“返回app”,也沒有點選“留在微信”,而是用其他的方式退出(比如按了Home鍵),那麼上面的方法就不可行了