1. 程式人生 > >umeng(友盟)實現第三方登入和分享詳解之登入詳解

umeng(友盟)實現第三方登入和分享詳解之登入詳解

一、簡單介紹

因為一個平臺一個平臺進行弄太麻煩,也不夠統一,所以領導選擇了umeng(我的內心是拒絕的),umeng的文件寫的便於查詢,但是比較分散,對於比較熟悉的很好用,沒接觸過umeng的肯定一臉懵逼,比如我,所以,我整理一篇,以後也好用到。
本文以6.4.5版本更新。
二、申請appkey

如果你已經申請了,請跳過1-6看下面的。
大部分平臺進行分享、登入操作需要(zhuangbi)在第三方平臺建立應用並提交稽核,建立應用後,分享、登入操作時顯示的應用icon、名稱和對應開放平臺設定有關,必須要建立應用的平臺為:微信、新浪、QQ、Facebook、Kakao、LinkeIn、Twitter、釘釘.
根據自己需要進行申請平臺賬號。
1、新浪微博
登入新浪微博開放平臺(

http://open.weibo.com/),填寫相關應用資訊並上傳icon圖片。
就能獲取到AppID及AppSecret。

ps:新浪和其他平臺不同的是多一個授權回撥頁。

這裡寫圖片描述

授權回撥頁的作用是成功授權之後會回撥這個地址,把資訊傳給這個地址,可以隨便設定一個,建議自家域名。

2、微信開放平臺

登入微信開放平臺(https://open.weixin.qq.com/),填寫相關應用資訊,稽核通過後獲取到微信AppID及AppSecret,如果需要微信登入功能,需要申請微信登入許可權,注意微信登入有效期為一年,需要按時在微信平臺認證
注意應用包名、簽名設定必須和打包後的apk一致

3、 QQ及Qzone

QQ及Qzone使用同一個AppID及Appkey,登入騰訊開放平臺(http://open.qq.com/) ,選擇Android或iOS應用,填寫相關應用資訊並提交稽核,未稽核前通過只能使用測試賬號

這裡寫圖片描述

這裡寫圖片描述

正確配置簽名、包名及相應的應用icon等基本資訊,注意應用包名、簽名設定必須和打包後的apk一致

6,剩下的Twitter Facebook 騰訊微博 LinkedIn 人人網 豆瓣之類的都去對應的開放平臺申請賬號(mdzz),如果你想整合他們的分享,我就不一一贅述了。

7、看這裡,說一些重要的注意事項

1)所有平臺,請正確配置簽名、包名及相應的應用icon等基本資訊,注意應用包名、簽名設定必須和打包後的apk一致
2)我們認證是為了獲取 id和key,這兩個值很重要,整理放到一起,新浪微博比較特殊,多個回撥地址。
3)我們需要把這些值配置到umeng後臺,具體的如下圖

這裡寫圖片描述

選中自己的專案後,點選社會化分享裡面的設定,給每個平臺設定進去上面得到的id和key。

三、配置

1、umeng的整合工具

順便提一下umeng的整合工具,很智慧(zz)的整合工具,你熟練使用umeng之後,再用整合工具,就會覺得很方便。第一次,還是跳過吧,看下面的。

2、匯入jar包

下載sdk後,會發現有精簡版和完整版的區別,根據自己的需要下載需要的吧。

然後下面就是一些copy了,其實如果你使用umeng整合工具,你可以選擇你需要整合的umeng會把你需要的jar包和資源放到一起,你不需要copy很多次了。(省略這項,看下面)

你需要copy下圖這幾個資料夾裡面的所有東西

這裡寫圖片描述

main是核心庫

lib裡面有三個jar,copy到工程libs下面
umeng_social_api.jar
umeng_social_net.jar
umeng_social_tool.jar

res裡面檔案全選copy到工程res下面
這裡寫圖片描述
這裡寫圖片描述

platforms是平臺庫

和核心庫一樣,copy裡面的libs和res裡面的檔案,但對於平臺來說可能會有回撥activity,

支付寶: 把apshare這個檔案(裡面包含activity)直接copy到專案的包名下,com.xxx.xxx下面。
微信 :把wxapi這個檔案(包含activity,精簡版和完整版不同)放到copy專案包名下

釘釘與微信相似,釘釘需要在包名目錄下建立ddshare資料夾,然後建立一個DDShareActivity的類,DingCallBack。

新浪和QQ 不需要回調activity,但是需要在登入分享的activity內加入回撥

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}

3、配置Android Manifest XML

這些許可權都是必要的,已經存在的不需要再次新增。

   <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" />

4、Android Manifest XML中配置activity

加上umeng的appkey

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

新浪:

   <activity
            android:name="com.umeng.socialize.media.WBShareCallBackActivity"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:exported="false"
            android:screenOrientation="portrait" >
        </activity>
 <activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
                  android:configChanges="keyboardHidden|orientation"
                  android:exported="false"
                  android:windowSoftInputMode="adjustResize">

        </activity>
        <activity
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
            android:launchMode="singleTask"
            android:name="com.sina.weibo.sdk.share.WbShareTransActivity">
            <intent-filter>
                <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        </activity>

微信:不需要

支付寶:

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

釘釘:

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

qq精簡版:

 <activity
            android:name="com.umeng.qq.tencent.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.umeng.qq.tencent.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"/>

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"/>

5、配置友盟key及三方key

建立一個application檔案,注意要在AndroidManifest檔案中配置(如果本身已有,不需要重新建立):

  <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:name=".App"
        android:theme="@style/AppTheme">

在application裡面進行umeng的第三方key配置

這裡作為示例,只配置了微信、QQ/Qzone、新浪的三方appkey,如果使用其他平臺,在這裡增加對應平臺key配置
把前面在其他平臺獲取的key

public class App extends Application{
{
PlatformConfig.setWeixin(“wx967daebe835fbeac”, “5bb696d9ccd75a38c8a0bfe0675559b3”);
PlatformConfig.setQQZone(“100424468”, “c7394704798a158208a74ab60104f0ba”);
PlatformConfig.setSinaWeibo(“3921700954”, “04b48b094faeb16683c32669824ebdad”, “http://sns.whalecloud.com“);
}
}
當然初始化操作也放在application裡面進行@Override

public void onCreate() {
        super.onCreate();
        UMShareAPI.get(this);
}

6、 將資料夾中的簽名檔案放入到工程中,這個不再贅述。

四,登入整合

1、登入的整合很簡單,直接呼叫方法即可
第三方登入包含兩種使用場景:

獲取使用者資料的授權介面,使用該介面可以獲取該三方平臺返回的所有資料(包括姓名,性別,頭像等)

三方授權,開發者呼叫授權介面,可以獲取accesstoken相關的資訊,但是沒有使用者資料(姓名,性別,頭像等),需要開發者根據token自己去請求使用者資料,對於保密性要求較高的使用者可以使用。 目前支援第三方登入的平臺包括:

國內平臺(微信、新浪微博、QQ、豆瓣、人人)

國外平臺(Facebook、Twitter、linkedIn、kakao、VKontakte、Dropbox)

這裡推薦直接使用第一種方式實現,因為本質上三方登入最終都需要拉取三方平臺的使用者資料,從這點來說,直接呼叫SDK和通過後臺伺服器請求,安全性是一樣的

mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);

SHARE_MEDIA.SINA寫入你需要的平臺,umAuthListener是回撥方法

UMAuthListener authListener = new UMAuthListener() {
        /**
         * @desc 授權開始的回撥
         * @param platform 平臺名稱
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {

        }

        /**
         * @desc 授權成功的回撥
         * @param platform 平臺名稱
         * @param action 行為序號,開發者用不上
         * @param data 使用者資料返回
         */
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {

            Toast.makeText(mContext, "成功了", Toast.LENGTH_LONG).show();

       }

        /**
         * @desc 授權失敗的回撥
         * @param platform 平臺名稱
         * @param action 行為序號,開發者用不上
         * @param t 錯誤原因
         */
        @Override
       public void onError(SHARE_MEDIA platform, int action, Throwable t) {

        Toast.makeText(mContext, "失敗:" + t.getMessage(),                                  Toast.LENGTH_LONG).show();
        }

        /**
         * @desc 授權取消的回撥
         * @param platform 平臺名稱
         * @param action 行為序號,開發者用不上
         */
        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
        }
    };

onComplete方法是成功的方法,map集合中儲存著使用者資訊。根據公司後臺的需要把需要的資訊拿過去走登入介面或者註冊介面都可以。

這裡寫圖片描述

一些常用引數。

獲取使用者資料可以使用如下介面:

mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);

“`
UMAuthListener authListener = new UMAuthListener() {
/**
* @desc 授權開始的回撥
* @param platform 平臺名稱
*/
@Override
public void onStart(SHARE_MEDIA platform) {

    }

    /**
     * @desc 授權成功的回撥
     * @param platform 平臺名稱
     * @param action 行為序號,開發者用不上
     * @param data 使用者資料返回
     */
    @Override
    public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {

        Toast.makeText(mContext, "成功了", Toast.LENGTH_LONG).show();

   }

    /**
     * @desc 授權失敗的回撥
     * @param platform 平臺名稱
     * @param action 行為序號,開發者用不上
     * @param t 錯誤原因
     */
    @Override
   public void onError(SHARE_MEDIA platform, int action, Throwable t) {

    Toast.makeText(mContext, "失敗:" + t.getMessage(),                                  Toast.LENGTH_LONG).show();
    }

    /**
     * @desc 授權取消的回撥
     * @param platform 平臺名稱
     * @param action 行為序號,開發者用不上
     */
    @Override
    public void onCancel(SHARE_MEDIA platform, int action) {
        Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
    }
};

相關推薦

umeng實現第三方登入分享登入

一、簡單介紹 因為一個平臺一個平臺進行弄太麻煩,也不夠統一,所以領導選擇了umeng(我的內心是拒絕的),umeng的文件寫的便於查詢,但是比較分散,對於比較熟悉的很好用,沒接觸過umeng的肯定一臉懵逼,比如我,所以,我整理一篇,以後也好用到。 本文以6.

使用Redis+java模仿資料庫實現物件存取讀取

實現前要引入Redis架包   maven專案 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId

iOS第三方登入分享注意事項

本人使用友盟SDK的真實經歷,全,比官方文件詳細 1.下載友盟SDK及開發文件 2. 去開放中心註冊微信/QQ/微博的AppKey,注意,必須新增測試的QQ號,才能在測試,否則QQ返回登入授權失敗 3. http傳輸安全設定 A、在info.plist中加入安全域名白名單

整合QQ第三方登入獲取顯示頭像

匯入jar 2.複製官方佈局裡面的程式碼====================== 3.匯入依賴 compile 'com.umeng.sdk:common:latest.integration' compile 'com.gith

PCB CS架構工程系統實現單點登入方法

社會的不斷進步發展,分工也越來越細了.而我們工作接觸的範圍也越來越狹小了,但這不是倒退了,而是分工之細讓人們在各個方面深耕細作。PCB企業軟體系統發展路線同樣也如此,隨著我們PCB企業發展不斷壯大,軟體系統也在不斷細分。目的只有一個,讓專業的事情交給專業的系統去做。回想當初起公司用必有德ERP,一個ERP能搞

IOS崩潰Crash分析MTA騰訊雲分析,

公司做IOS的走了,東西就丟給了我這個從來沒有做過IOS的。最近為了捕獲BUG,集成了MTA平臺的BUG收集。問題就來了,對於我這種,雖然沒有學過OC,但是寫寫程式碼還是可以的,xCode中除錯下BUG也行,但是碰到這種Crash的,還不帶崩潰路徑的,完全

使用ShareSDK完成第三方QQ、微信、微博登入分享

這幾天遇到一個需求:做第三方登入和分享。遇到了一些坑,把整個過程整理記錄下來,方便他人,同時也捋一下思路。 當時考慮過把每個平臺的SDK下載下來,一個一個弄,一番取捨後決定還是用ShareSDK。這裡只做了微博、微信和QQ。過程如下: 1.去ShareSDK官網註冊一個賬號方便以後對ShareSDK的

多渠道打包打包

注意簽名檔案必須永久儲存,不然後果不堪設想 1.生成簽名檔案 點選 Build -> Generate Signed APK: 2.建立一個簽名 3.多渠道打包 步驟一:

通過Java SE 7自帶的監控服務WatchService API實現類似.NET FileWatcher的功能

thread new and mar chan col att 項目 chang 轉自:http://www.cnblogs.com/callwangxiang/archive/2011/08/04/JavaDirectoryWatcherFileWatcher.html

試用SDK實現Android分享微信朋友圈

社會 mis gettext 視頻 blog test cte widget mod 社會化分享是眼下必學且火熱的功能。之前有寫第三方登錄,那僅僅是社會化分享的一部分。今天來玩玩分享微信朋友圈。 為了方便操作,還是依照步驟寫。 一,註冊 註冊應用已經在

C#編程二十三----------實現繼承

一點 more 希望 否則 產生 無法 概念 類的方法 將不 原文鏈接:http://blog.csdn.net/shanyongxu/article/details/46593809 如果要聲明派生自另一個類的一個類,可以使用下面的語法: class DerivedC

轉載利用SIFTRANSAC算法openCV框架實現物體的檢測與定位,並求出變換矩陣findFundamentalMatfindHomography的比較 置頂

bsp 解釋 邊界 返回值 class 不同的 rip 很多 per 原文鏈接:https://blog.csdn.net/qq_25352981/article/details/46914837#commentsedit 本文目標是通過使用SIFT和RANSAC算

微信小程序 支付功能 服務器端TP5.1實現

ces 形式 當前 單位 class private cda 庫存 vat 首先下載微信支付SDK ,將整個目錄的文件放在 /application/extend/WxPay 目錄下 在使用SDK之前我們需要對 WxPay.Config.php 進行配置 <?ph

安全路 —— 利用遠程線程註入的方法使用DLL實現穿墻與隱藏進程

pat 完整路徑 ystemd return cpi printf output inf server 簡介 大多數後門或病毒要想初步實現隱藏進程,即不被像任務管理器這樣典型的RING3級進程管理器找到過於明顯的不明進程,其中比較著名的方法就是通過遠程線程註

python作業實現註冊功能登陸功能

[] nbsp del inf pen pan style NPU pytho #1、實現註冊功能 輸入:username、passowrd,cpassowrd #最多可以輸錯3次 #3個都不能為空 #用戶名長度最少6位, 最長20位

Spotfire使用經驗——使用文件屬性Document Property實現資料集範圍的動態限定

需求描述: 由於業務系統將被升級,現有的Spotfire報表的資料呈現將會收到影響。因此,使用者希望能夠在Spotfire中選擇檢視不同時間範圍內的資料,即,業務系統升級前的資料和升級後的資料。 解決方法: 使用者提出的方法是,建立兩份Spotfire報表。我建議使用者最好不要這樣做

圓形緩衝區迴圈buffer實現【轉】

(轉自:https://blog.csdn.net/hbuxiaofei/article/details/51463662#commentBox) 用法 圓形緩衝區的一個有用特性是:當一個數據元素被用掉後,其餘資料元素不需要移動其儲存位置。相反,一個非圓形緩衝區(例如一個

CSS3 - 使用彈性盒子Flex Box實現完美居中、柵格系統及響應式佈局

CSS3彈性盒子介紹 彈性盒子是 CSS3 的一種新的佈局模式。 CSS3 彈性盒( Flexible Box 或 flexbox),是一種當頁面需要適應不同的螢幕大小以及裝置型別時確保元素擁有恰當的行為的佈局方式。 引入彈性盒佈局模型的目的是提供一種更加有效的方式來對一個容器中的子

過載運算子號

#include using namespace std; class complex //複數類宣告 { private: double sb;//實數部 double xb;//虛數部 public: complex(double r=0,double i=0)//直接賦值可以多用於有

ArcEngine10.2設計與開發課程學習作業四——實現地圖的簡單渲染唯一值渲染

所有習題材料:連結:HTTPS://pan.baidu.com/s/1oiylGi6IEgndYO2j9_oQnQ  提取碼:jp3r  複製這段內容後開啟百度網盤手機應用程式,操作更方便哦 本題EXE:連結:HTTPS://pan.baidu.com/s/10_buC4K1