Android 友盟分享詳細集成過程及所遇問題解決

来源:http://www.cnblogs.com/upwgh/archive/2017/02/09/6382085.html
-Advertisement-
Play Games

最近項目需要針對微信、朋友圈、QQ、QQ空間集成友盟分享的功能,說實話,我也是第一次做,期間碰到過很多問題,這篇隨筆就來寫一下我是怎麼集成友盟分享的,還有碰到哪些問題,都是怎樣解決的! 其實集成友盟並不是很難,跟著集成文檔一步一步走下來就可以,而且下載的友盟SDK會附帶Demo,但是Demo中有很... ...


最近項目需要針對微信、朋友圈、QQ、QQ空間集成友盟分享的功能,說實話,我也是第一次做,期間碰到過很多問題,這篇隨筆就來寫一下我是怎麼集成友盟分享的,還有碰到哪些問題,都是怎樣解決的!

其實集成友盟並不是很難,跟著集成文檔一步一步走下來就可以,而且下載的友盟SDK會附帶Demo,但是Demo中有很多東西是用不上的,所以就需要我們選擇性的摘取有用的部分!

如需轉載請註明出處:http://www.cnblogs.com/upwgh/p/6382085.html

1-獲取友盟Appkey

如果你之前已經在友盟註冊了應用,並獲取到了Appkey,可以繼續使用它.

如果你尚未在友盟註冊開發者賬號,需要先註冊,註冊之後登錄你的賬號,點擊添加新應用,填寫完應用基本信息後,將進入"下載SDK並添加代碼"頁面,此頁面即可得到Appkey。

2-下載SDK並解壓到本地

到友盟官網下載最新版本U-Share SDK,現在的版本是v6.2.2

因為項目中只需要集成微信、朋友圈、QQ、QQ空間,所以只勾選了這兩項,微信完整版是帶有支付功能,沒有支付功能的話只需要勾選精簡版就可以了。

接下來就到我們的項目中了

3-環境配置(AndroidManifestXml)

3-1許可權配置

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

3-2註冊相關的Activity

微信:

<activity
        android:name=".wxapi.WXEntryActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:exported="true"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />

qq完整版:

 <activity
        android:name="com.tencent.tauth.AuthActivity"
        android:launchMode="singleTask"
        android:noHistory="true" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data android:scheme="tencent100424468" />
            </intent-filter>
            </activity>
            <activity
        android:name="com.tencent.connect.common.AssistActivity"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:configChanges="orientation|keyboardHidden|screenSize"/>

註意:這裡要放自己項目在QQ開放平臺的id,而且前面的tencent是一定不能省略的,否則在運行的時候,會報QQ配置錯誤的問題。

3-3友盟Appkey及相關第三方key配置

在AndroidManifest.xml中設置友盟Appkey

<meta-data
            android:name="UMENG_APPKEY"
            android:value="561cae6ae0f55abd990035bf">
         </meta-data>

在Application中配置第三方平臺的key

{
    //微信和QQ開放平臺對應的AppIdAppkey PlatformConfig.setWeixin(
"wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3"); PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba"); }

在application中初始化sdk,這個初始化最好放在application的程式入口中,防止意外發生:

public void onCreate() {
    super.onCreate();
        //開啟debug模式,方便定位錯誤,具體錯誤檢查方式可以查看http://dev.umeng.com/social/android/quick-integration的報錯必看,正式發佈,請關閉該模式
    Config.DEBUG = true;
    UMShareAPI.get(this);
}

4-代碼實現

4-1、解壓下載好的SDK,將main和platforms下麵的libs裡面的jar包導入到項目中(複製粘貼。。。),並添加依賴。

4-2、包名目錄下創建wxapi文件夾,新建一個名為WXEntryActivity的activity繼承WXCallbackActivity。這裡註意一定是包名路徑下,例如我的包名是com.umeng.soexample,則配置如下:(需要註意,如果使用精簡版WXCallbackActivity的路徑為com.umeng.weixin.callback.WXCallbackActivity,如果使用完整版路徑是com.umeng.socialize.weixin.view.WXCallbackActivity)

 

4-3、功能代碼(代碼部分只貼出部分重點內容,如有疑問請留言)

4-3-1 分享會掉監聽

//分享回調
    private UMShareListener umShareListener = new UMShareListener() {
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Log.d("plat","platform"+platform);
            ToastUtil.showToast("分享成功");
//            if (platform.toString().equals("QQ")){
//                ToastUtil.showToast("手機QQ分享成功");
//            }else if (platform.toString().equals("QZONE")){
//                ToastUtil.showToast("QQ空間分享成功");
//            }else if (platform.toString().equals("WEIXIN")){
//                ToastUtil.showToast("微信好友分享成功");
//            }else if (platform.toString().equals("WEIXIN_CIRCLE")){
//                ToastUtil.showToast("微信朋友圈分享成功");
//            }

        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            ToastUtil.showToast("分享失敗");
            if(t!=null){
                Log.d("throw","throw:"+t.getMessage());
            }
        }

        @Override
        public void onCancel(SHARE_MEDIA platform) {
            ToastUtil.showToast("分享取消");
        }
    };

這是對於分享成功、失敗、取消所對應的回調,對分享結果做相應的處理(這部分代碼要放在成員變數)

4-3-2 點擊分享事件

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.tv_cancle:
                popupWindow.dismiss();
                break;
            case R.id.rl_common_title_exit:
                initPopupWindow();
                //設置popupWindow顯示的位置
                popupWindow.showAtLocation(mPopView, Gravity.BOTTOM, 0, 0);
                backgroundAlpha(0.5f);
                break;
            case R.id.qq:
                new ShareAction(ShowWebViewActivity.this)
                        .setPlatform(SHARE_MEDIA.QQ)
                        .withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
                        .setCallback(umShareListener)
                        .share();
                popupWindow.dismiss();
                break;
            case R.id.weixin:
                new ShareAction(ShowWebViewActivity.this)
                        .setPlatform(SHARE_MEDIA.WEIXIN)
                        .withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
                        .setCallback(umShareListener)
                        .share();
                popupWindow.dismiss();
                break;
            case R.id.kongjian:
                new ShareAction(ShowWebViewActivity.this)
                        .setPlatform(SHARE_MEDIA.QZONE)
                        .withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
                        .setCallback(umShareListener)
                        .share();
                popupWindow.dismiss();
                break;
            case R.id.pengyouquan:
                new ShareAction(ShowWebViewActivity.this)
                        .setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)
                        .withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
                        .setCallback(umShareListener)
                        .share();
                popupWindow.dismiss();
                break;
        }
    }

標紅的這部分是需要分享的內容,根據需要自己進行初始化

    /**\
     * 分享鏈接、title、內容
     */
    String linkHref = "分享鏈接";
    String title = "分享標題!";
    String content = "分享內容";
    //分享圖片
    private UMImage image = null;

4-3-3 分享彈窗

大家應該看出來了,我的分享面板是寫的一個PopupWindow

關於PopupWindow我有寫過一篇相關的隨筆http://www.cnblogs.com/upwgh/p/5910261.html

不同的是因為需要,分享彈窗彈出的時候,背景要變色,彈窗消失的時候,背景要恢復,隨意寫了一個簡單的動畫。

initPopupWindow()
private void initPopupWindow() {
        /**
         * 實例popupWindow對象
         */
        popupWindow = new PopupWindow(mPopView, GridLayout.LayoutParams.MATCH_PARENT, GridLayout.LayoutParams.WRAP_CONTENT);
        //設置popupWindow中的item可以被點擊,這句話是必須要添加的
        popupWindow.setFocusable(true);
     //設置動畫 popupWindow.setAnimationStyle(R.style.mypopwindow_anim_style);
//設置PopupWindow的背景 //如果不設置背景,會導致無論是點擊外部區域還是Back鍵都無法dismiss掉popupWindow ColorDrawable dw = new ColorDrawable(0xb0000000); popupWindow.setBackgroundDrawable(dw); }

彈窗彈出動畫:

    <style name="mypopwindow_anim_style">
        <!-- 指定顯示的動畫xml -->
        <item name="android:windowEnterAnimation">@anim/popu_show</item>

        <!-- 指定消失的動畫xml -->
        <item name="android:windowExitAnimation">@anim/popu_hide</item>
    </style>

popu_show.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="200"
        android:fromYDelta="100%p"
        android:toYDelta="0" />

    <alpha
        android:duration="200"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

popu_hide.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="200"
        android:fromYDelta="0"
        android:toYDelta="50%p" />

    <alpha
        android:duration="200"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

最後設置分享彈窗彈出時背景的變化:

    /**
     * 設置添加屏幕的背景透明度
     * @param bgAlpha
     */
    public void backgroundAlpha(float bgAlpha) {
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.alpha = bgAlpha; //0.0-1.0
        getWindow().setAttributes(lp);
        popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {

            @Override
            public void onDismiss() {
                WindowManager.LayoutParams lp = getWindow().getAttributes();
                lp.alpha = 1f;
                getWindow().setAttributes(lp);
            }
        });
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    }

以上就是這次分享功能的主要內容了,寫的可能不是很好,大家多多包涵,如果有錯誤或者不明白的地方,歡迎留言哈~~~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 項目中創建表格, 引用頭文件 #import "WBDataGridView.h" - (void)viewDidLoad{ [superviewDidLoad]; // Do any additional setup after loading the view. self.view.backgr ...
  • //左右震動效果- (void)shake:(UIView *)view {CGRect frame = view.frame;CAKeyframeAnimation *shakeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"posi ...
  • iOS開發常用國外網站清單 原文地址:iOS開發常用國外網站清單作者:eseedo 工欲善其事必先利其器,最近發現臨時查找一些東西容易浪費時間,花了點時間整理一下常用的網站,方便以後備用。 國內的code4app,ui4app,cocoachina,oschina,csdn就不說了,基本上很好用。不 ...
  • 更多博客請訪問http://blog.csdn.net/dylan_lwb_ ...
  • 知識點: 1.UITabBarController使用 2.UITabBarItem使用 關於TabBarController除了本次整理的內容,有興趣的可以看下我以前發過的這兩篇,在實際開發中很實用的東西. RDVTabBarController的基本使用 以及tabbar的防止雙點擊方法 從ta ...
  • 作者:Antonio Leiva 時間:Feb 8, 2017 原文鏈接:https://antonioleiva.com/generic-functions-kotlin/ Kotlin的一些特性組合起來與泛型混合使用創建函數可以極大的簡化你的編碼,且保證它的可讀性。 在Kotlin庫中,有幾個函 ...
  • 由OpenDigg 出品的iOS開源項目周報第七期來啦。我們的iOS開源周報集合了OpenDigg一周來新收錄的優質的iOS開源項目,方便iOS開發人員便捷的找到自己需要的項目工具等。 ...
  • 1.在新的地址添加一個用戶,並創建一個文件 打開新地址 ssh 用戶名@ ip 密碼:xxxx sudo adduser asamu 連敲三次 enter 之後輸入 n, 表示不要密碼,下麵填寫一些詳細信息(選填),輸入 y 繼續 su asamu 切換用戶, cd /home 可以看到用戶文件夾 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...