Androidの雲IM金融統合の方法といくつかの問題解決

オンライン統合方法財務情報クラウドIMはまた、いくつか、まだ見ることができるだけでなく、QAの公式ウェブサイト上の情報は非常に良いですが、公式のデモは1日親切古いこと、そして今Androidの終わりもあり、デモが困難であると考えられます稼働。

非常に詳細に書かれた公式文書:https://www.rongcloud.cn/docs/#necessary

  1. まず、唯一のAndroid APPキーをすることができ、エンド必要とするアプリケーションキー/秘密を登録し得ます。
  2. Imlibは、コアライブラリでダウンロードとインポートはImlib IMkItは、IMkitは、のLib、再入力するキット、最後のチェック、Libのを頼りにするキットの必要性を導入することが推奨され、UIインターフェイスライブラリです。
  3. AndroidManifestでは、アプリのマニフェストでそれらの活性を高めるために対応する必要がありますが、パッケージ名を設定し、私は唯一の問題でパッケージ名を見つけるのに長い時間を探して、プロジェクトを変更しました。また、はImlibにAPPKEYを変更する必要があります。
  4. アプリケーションで初期化されます。

 

ほとんどに行ってきましたにこれはここでもコードがステージにだ、統合されています

  1. 最初のユーザーがIMサーバーに接続した後、ユーザーがトークンを渡す必要があり、金融​​雲は、ユーザーのトークンを返しますとき、永久に独自のデータベースサーバーを保存するトークンの必要性をユーザを追加、ユーザのログインは、独自のシステムを占めますこのトークン毛背中、およびトークンログIMを使用しています。
  2. 金融クラウドは、ユーザーが友人を追加し、ユーザーリスト機能この機能ならば、あなたはあなた自身のサーバーを管理することができます提供していません。するtargetId送信メッセージのみを送信する必要があります。
  3. 以下は、あなたはUIが正式採用により提供されるインタフェースすることができ、構成メッセージインタフェース、でなければなりません。私は珍しいフラグメントを経験してAndroidXを使用していたので、変換することはできませんが、私は公式のQAを見た後、エラーがまだ(私もASがandroidX機能に移行していますが、それは無駄を感じてみました)を実行することができました
    輸入androidx.appcompat.app.AppCompatActivity;
    輸入androidx.fragment.app.FragmentManager;
    輸入android.net.Uri;
    輸入android.os.Bundle;
    輸入io.rong.imkit.fragment.ConversationListFragment;
    輸入io.rong.imlib.model.Conversation; 
    
    パブリック クラス ConversationListActivityは延びAppCompatActivity { 
    
        @Overrideが
        保護 ボイドのonCreate(バンドルsavedInstanceStateを){
             スーパー.onCreate(savedInstanceState)。
            setContentView(R.layout.activity_conversation_list)。
    
            FragmentManager fragmentManage =getSupportFragmentManager(); 
            ConversationListFragment fragement = (ConversationListFragment)fragmentManage.findFragmentById(R.id.conversationlist)。
            ウリのuri = Uri.parse( "栄://" + 。getApplicationInfo()のpackageName).buildUpon()
                    .appendPath( "conversationlist" 
                    .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName()、 "偽" 
                    .appendQueryParameter (Conversation.ConversationType.GROUP.getName()、 "偽" 
                    .appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName()、 "偽" 
                    .appendQueryParameter(Conversation.ConversationType.APP_PUBLIC_SERVICE.getName()、 "偽" 
                    .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName()、 "真" 
                    .build(); 
            fragement.setUri(URI)。
    
        } 
    }

    ここではエラーは正常です 

  4. 最後はあなたが意図からいくつかのデータを取得することができ、自分自身のタイトルページを記述する必要が特定のチャットページ、です。
    輸入androidx.appcompat.app.AppCompatActivity;
    輸入androidx.fragment.app.FragmentManager;
    輸入android.net.Uri;
    輸入android.os.Bundle;
    輸入io.rong.imkit.fragment.ConversationFragment;
    輸入io.rong.imlib.model.Conversation; 
    
    パブリック クラス ConversationActivityは拡張AppCompatActivity { 
    
    
    //     プライベートConversation.ConversationType mConversationTypeを。
    //     プライベート文字列mTargetId。
    
        @Overrideは、
        保護された ボイドのonCreate(バンドルsavedInstanceState){
             スーパー .onCreate(savedInstanceState)。
            setContentView(R.layout.activity_conversation)。
    
    //         mTargetId = getIntent()getStringExtra( "するtargetId")。
    //         mConversationType =(Conversation.ConversationType)getIntent()getSerializableExtra( "conversationType")。
            URIデータ= getIntent()のgetData()。
            文字列タイトル。。= getIntent()のgetData()getQueryParameter( "タイトル" )。
            ストリングするtargetId。。= getIntent()のgetData()getQueryParameter( "するtargetId" )。
            文字列の会話。。= getIntent()のgetData()getQueryParameter( "会話" )。
            Conversation.ConversationTypeタイプ = Conversation.ConversationType。
    
            FragmentManager fragmentManage = getSupportFragmentManager()。
            ConversationFragment fragement = (ConversationFragment)fragmentManage.findFragmentById(R.id.conversation)。
    //         ウリのuri = Uri.parse( "栄:// "。+ getApplicationInfo()のpackageName).buildUpon()
     //                 。.appendPath( "会話")APPENDPATH(。type.getName()toLowerCaseメソッド())
     //                 .appendQueryParameter( "するtargetId"するtargetId).build(); 
    
            fragement.setUri(データ)。
        } 
    }

    ここで発生した問題の一部です

  1. 私のプロジェクトのメッセージ一覧ページがフラグメント+ビューページの方法が、道の公式を使用していますが、それはでの活動である、と私はIMが提供するセット内のフラグメントのフラグメントを使用して、私はまた、メッセージ一覧ページに追加コントロールを追加する必要があります。
    パブリック クラス MessageFragmentは延び BaseFragment { 
    
        文字列のpackageNameと、
        公共MessageFragment(文字列のpackageName){
             この .packageName = のpackageName。
        } 
    
        @Overrideは、
        保護された intをprovideContentViewId(){
             リターンR.layout.fragment_message_list。
        } 
    
        @BindView(R2.id.vp_contain)でframeLayout vp_contain。
        @BindView(R2.id.toolbar)ツールバーツールバー。
    
        @Override 
        公共 のボイドinitView(ビューrootView){
             スーパー.initView(rootView)。 
            FragmentTransaction取引 =getChildFragmentManager()のbeginTransaction();. 
            フラグメントhomeFragment = setConversationView(); 
            transaction.add(vp_contain.getId()、homeFragment); 
            transaction.show(homeFragment).commit(); 
        } プライベートフラグメントsetConversationView(){ 
            ConversationListFragment conversationListFragment = 新しい新ConversationListFragment(); 
            conversationListFragment.setAdapter(新新ConversationListAdapterEx(RongContext.getInstance())); //カスタムリストページ(たとえば下に、いいえ、あなたが削除することができます)
            URIのuri = Uri.parse( "栄://" + packageName).buildUpon()。APPENDPATH( "activity_chat_main" 
                    .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName()、 "偽" 
                    .appendQueryParameter(Conversation.ConversationType.GROUP.getName()、 "偽" 
                    .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName()、 "真" ))(.build。
            conversationListFragment.setUri(URI)。
            返すconversationListFragmentを。
        } 
    }
     
       
    activity_conversation.xml
    <?XMLバージョン= "1.0"エンコード= "UTF-8" ?> 
    < のLinearLayout
         のxmlns:アンドロイド= "http://schemas.android.com/apk/res/android" 
    
        のandroid:layout_width = "match_parent" 
        のandroid:layout_height =」 match_parent " 
        アンドロイド:オリエンテーション= "垂直" > 
    
        < のTextView
             アンドロイド:ID = "@ + ID / tv_title" 
            アンドロイド:テキスト= "用户名" 
            アンドロイド:TEXTSIZE = "30sp" 
            アンドロイド:重力= "center_horizo​​ntal" 
            アンドロイド:layout_width =" match_parent」
        フラグメント
             アンドロイド:ID = "@ + ID /会話" 
            アンドロイド:名= "io.rong.imkit.fragment.ConversationFragment" 
            のandroid:layout_width = "match_parent" 
            のandroid:layout_height = "match_parent"  /> 
    </ のLinearLayout >

    2. IMの最新バージョンは、ユーザーIDことを示す、ID情報のみを取得するようだと、ユーザー名を取得することはできませんので、メッセージ一覧ページ、と私はショーにしたいことは、ユーザー名です。これは、リストのデータページを変更する必要があります。その後、独自のサーバーからユーザー名を取得する必要があり、携帯電話にキャッシュされ、それがさまざまなプロジェクトの状況を考慮する必要があります。お互いの電話番号を照会することができたとき、あなたは独自のサーバーを要求するために、ローカルの場合に見つけることができない、互いのIDとユーザー名を返します。

    輸入android.content.Context;
    輸入android.view.View;
    輸入android.view.ViewGroup; 
    
    輸入io.rong.imkit.model.UIConversation;
    輸入io.rong.imkit.userInfoCache.RongUserInfoManager;
    輸入io.rong.imkit.widget.adapter.ConversationListAdapter;
    輸入io.rong.imlib.model.Conversation;
    輸入io.rong.imlib.model.UserInfo; 
    
    パブリック クラス ConversationListAdapterExは延びConversationListAdapter {
         公共ConversationListAdapterEx(コンテキスト・コンテキスト){
             スーパー(コンテキスト)。
        } 
    
        @Override
        保護されたビューnewView(コンテキスト・コンテキスト、INT 位置、のViewGroup基){
             戻り スーパー.newView(コンテキスト、位置、基); 
        } 
    
        @Overrideが
        保護 ボイド bindView(ビューV、INT {位置、UIConversationデータ)
             であれば(data.getConversationType()に等しい(Conversation.ConversationType.DISCUSSION)。)
                data.setUnreadType(UIConversation.UnreadRemindType.REMIND_ONLY)。
            ユーザー情報のUserInfo =   RongUserInfoManager.getInstance()getUserInfo(data.getUIConversationTitle())。
            もし(のUserInfo!= nullの){
                文字列s = userInfo.toString()。
                data.setUIConversationTitle(S); 
            } 
            スーパー.bindView(V、位置、データ)。
        } 
    }
        @Override
         公共 ボイドgetUserIdSuccess(UserBeanのユーザ){ 
            。RongIM.getInstance()startConversation(のgetContext()、Conversation.ConversationType.PRIVATE、user.getUserId() + ""、 "悟空" )。
            ユーザー情報のUserInfo = 新規のUserInfo(user.getUserId()+ ""、user.getUserName()、NULL ); 
            RongUserInfoManager.getInstance()setUserInfo(ユーザー情報)。
        }

     

    ここでIMユーザーキャッシュが提供するツール:. RongUserInfoManager.getInstance()getUserInfo(data.getUIConversationTitle())の使用は、ローカルに格納されているユーザ情報の取得に成功した後に必要。

   

 

おすすめ

転載: www.cnblogs.com/shunlibest/p/12466907.html