Android微博、微信、QQ共有機能の実現

4999 ワード

最近のプロジェクトは微博、微信、QQの共有機能を実現することを要求し、共有コールバックを要求し、ユーザーに共有の成功か失敗かを提示した.ユーザが三者アプリケーションから共有接続をクリックすると、h 5ページからインストールappをダウンロードしたり、appの対応ページに直接アクセスすることができる.
まず、私が出会ったいくつかの問題についてお話ししましょう.
  • QQはコールバックを行うことができなくて、しかし確かにすでに分かち合って
  • に成功しました
  • 複数のマイクロブログ共有にバグが発生しました
  • は3つの共有ページからローカルにジャンプし、崩壊現象が発生した.三方接続は詳細ページに入り、コールバックプロンプト
  • もあります.
  • 三方分かち合いに成功した後、三方に残って、デスクトップに戻って、プロジェクトに入って、分かち合いに失敗した
  • を提示することを選択します.
    Qはコールバックできませんが、確かに共有に成功しました.
    QQ共有の構成については、公式文書またはブログに記載する、Tencentを呼び出す方法public void shareToQQ(Activity var 1,Bundle var 2,IUiListener var 3)が必要である.3つ目のパラメータは私たちのコールバックリスニングです.詳細ページに戻ると私たちはrequestCodeがQQ共有のリクエストコードであるかどうかを判断することでよい.もし私たちがこの方法を呼び出したらonActivityResultData(requestCode, resultCode, data, iUiListener);他のことは私たちが関心を持つ必要はありません.しかし、結果呼び出し方法の判断は常にQQの内部論理と一致せず、長い間探しても問題は発見されなかった.時間を無駄にして、QQidが最新ではないことに気づいた.同時に行われたもう一つの三者登録のため、QQのidが交換され、結局プロファイルの中の変更はありませんでした.IDの前にtencent.をつなぎ合わせることに注意してください.共有に成功したのは、共有に使用するidが最新で、ローカルの定数を呼び出しているためですが、プロファイルには含まれていないので、コールバックに問題があります.
    複数のマイクロブログでバグが発生
    最初は私がポップアップボックスで使用していたDialogFragmentが実現したが、微博コールバックはactivityの起動タイプがsingleTaskであることを要求し、このように再び入るとonNewIntentメソッドを実行し、微博を通じてインスタンスIWeiboShareAPIのhandleWeiboResponse(Intent,Response)を共有した.このresponseはIWeiboHandlerを継承する.Responseはこれらのコールバック方法を実現する
    @Override public void onResponse(BaseResponse baseResponse) {
            if (baseResponse != null) {
                switch (baseResponse.errCode) {
                    case WBConstants.ErrorCode.ERR_OK:
                        //    
                        break;
                    case WBConstants.ErrorCode.ERR_CANCEL:
                        //    
                        break;
                    case WBConstants.ErrorCode.ERR_FAIL:
                        //    
                        break;
                }
            }
        }

    最初はすべての呼び出し共有クラスでこの方法を実現しましたが、結果的に4つのオプションの弾枠がポップアップされます.私があちこちにコールバックを書いているからだと思います.この4つのactivityactivityの起動方式はsingleTaskで、微博のコールバックがあるので、問題が発生しました.したがって、弾窓はdialogfragmentで実現することはできず、activityで実現しなければならない.これにより、すべてのコールバックを弾き窓のactivityで実現することができ、1カ所で済む.
    3つの共有ページからローカルにジャンプし、クラッシュ現象が発生した.3つの接続は詳細ページに入り、コールバックのヒントもあります.
    最初は、onNewIntentメソッドでマイクロブログ共有オブジェクトのメソッドが呼び出されたため、直接クラッシュしたが、このメソッドはマイクロブログをクリックしてから初期化されるので、マークを付けて、マイクロブログ共有をクリックしたかどうかを記録した.
    @Override protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            if (isWeiBo) {//         
                //     
                HNAHelper.thirdPard().weibo().getWeiboShareObj().handleWeiboResponse(intent, this);
            }
        }

    この問題を解決すると次の問題が現れた.この问题の详しい说明は私がQQの分かち合うページから私の详しいページに入る时をクリックして、更に分かち合うことをクリックして、このページは消えてなくなって、また1つの同じ详しいページが现れて、更に分かち合うボタンをクリックする时问题がありません.この問題も長い間見ていたので,断点も追跡できなかった.最後に現象分析に基づいて、消えたその詳細ページに三方が入るのは作成されたもので、後に出たその詳細ページには前のものを共有する.なぜこんなことになったのでしょうか.なぜなら、マイクロブログがプロファイルに起動モードを設定することを要求するのはsingleTaskであるからである.4つの起動方法について、私の前のブログでまとめたことがありますが、参考にしてください.基礎知識を振り返る–第1章:Activityのライフサイクルと起動モードなので、共有をクリックすると、共有弾枠を呼び出すとQQから入ってきて新しいスタックのHomeActivityと詳細ページがすべてポップアップされ、前のものが表示されます.この問題に対して、私はHomeActivityの起動モードもsingleTaskに設定しました.このようにHomeActivityを呼び出すたびにこのプロジェクトに再進出することに相当します.これまでのactivityも、三方が入ってきたときにコールバックすることもありません.トーストを弾く状況もありません.
    三者は成功を分かち合った後、三者に残って、デスクトップに戻って、プロジェクトに入ったが、分かち合いの失敗を提示した.
    この問題はデスクトップからの意図で、requestCodeは共有コードで間違いないが、resultCodeは変わり、dataがnullになったので、共有に失敗したのだ.dataがnullであるかどうかの判断を追加し、問題は解決しました.
    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            //          ,        ,       !
            if (requestCode == Constants.REQUEST_QQ_SHARE && data != null) {
                Tencent.onActivityResultData(requestCode, resultCode, data, iUiListener);
            }
        }

    肝心なのはactivityを使って共有するdialogをしなければならない.そうしないと、前功は捨てられる.