android使用友盟實現第三方登陸、分享以及微信回調無反應問題解決辦法

新浪微博開放平臺http://open.weibo.com/有帳號就能夠,常常刷微博的小夥伴能夠直接登陸嘍,注意修改安全域名同時確保受權回調頁與代碼中配置一致。css

登陸微信開放平臺https://open.weixin.qq.com/官網, 審覈經過後獲取到微信AppID及AppSecret(注意保存好,平臺不會再顯示忘了須要重置),須要微信登陸功能,須要申請微信登陸權限html

獲取微信登陸權限須要收取必定費用,貌似300。一直沒捨得,還好作項目的時候用到得到了,土豪隨意吐舌頭
前端

    

下面說代碼實現 java

到友盟官網http://www.umeng.com/下載須要的SDK包。copy其中的jar包等到本身的項目中。android

一、添加回調Activity程序員

包名目錄下建立wxapi文件夾,新建一個名爲WXEntryActivity的activity繼承WXCallbackActivity。這裏注意必定是包名路徑下。同理新浪微博也須要一個回調的Activity,與微信不一樣的是它只須要在包名目錄下創建一個名爲WBShareActivity類便可,不用創建文件夾,該類繼承WBShareCallBackActivityweb

 

      

 

二、權限及其餘maifest中的配置api

 

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

 

 

相關Activity註冊

 

新浪微博:(精簡版不須要)如下方式註冊若沒法find請把包名寫全。安全

<activity android:name=".WBShareActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" > <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="com.sina.weibo.sdk.component.WeiboSdkBrowser" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="adjustResize" android:exported="false" > </activity> <service android:name="com.sina.weibo.sdk.net.DownloadService" android:exported="false"></service> 

微信:微信

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

分享編輯頁(只有新浪微博精簡版,豆瓣人人騰訊微博須要):

<activity android:name="com.umeng.socialize.editorpage.ShareActivity" android:theme="@style/Theme.UMDefault" android:excludeFromRecents="true"/> 

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

在AndroidManifest.xml中設置友盟Appkey

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

三、在項目的application類中配置第三方信息

 

    {
      // <!-- 微信平臺 --> appid appsecret
      PlatformConfig.setWeixin("替換成本身appid","替換成本身的appsecret");
      // <!-- 新浪微博 --> appkey appsecret 
      PlatformConfig.setSinaWeibo("替換成本身appid","替換成本身的appsecret");
      Config.REDIRECT_URL = "新浪後臺配置的回調地址";
      // <!-- QQ、Qzone -->appid appkey
      PlatformConfig.setQQZone("替換成本身appid","替換成本身的appsecret");
   }
在application的oncreat方法中初始化
UMShareAPI.get(this);

 

四、登陸實現

 

private UMShareAPI mShareAPI = null;
private SHARE_MEDIA platform = null;
mShareAPI = UMShareAPI.get(this);
點擊事件:

 

 

case R.id.login_img_weibo:
    platform = SHARE_MEDIA.SINA;
    mShareAPI.doOauthVerify(LoginActivity.this, platform,
            umAuthListener);
    break;
case R.id.login_img_weixin:
    platform = SHARE_MEDIA.WEIXIN;
    mShareAPI.doOauthVerify(LoginActivity.this, platform,
            umAuthListener);
    break;
下面new
umAuthListener
private UMAuthListener umAuthListener = new UMAuthListener() {

    @Override
    public void onComplete(SHARE_MEDIA platform, int action,
                           Map<String, String> data) {
        if(platform == SHARE_MEDIA.WEIXIN){
           //unionid:(6.2之前用unionid)uid
           uid = data.get("unionid");
        }else{
            uid = data.get("uid");
        }
        if(!CheckUtils.isEmpty(uid)){
            //若是uid不爲空即回調受權成功,則能夠調接口告訴後臺此時的第三方uid,後臺判斷此惟一標識值是否存在即判斷用戶是否用
            //第三方登陸過,若是登陸過直接進入主界面, 沒有登陸過則後臺存儲該值並進入註冊界面進行手機號綁定註冊
            judgeUMLogin();,若是登陸
        }else{
            Toast.makeText(getApplicationContext(), "暫沒法使用該登陸方式",
                    Toast.LENGTH_SHORT).show();
        }
        Toast.makeText(getApplicationContext(), "受權成功",
                Toast.LENGTH_SHORT).show();
        Log.d("user info", "user info:" + data.toString());
    }

    @Override
    public void onError(SHARE_MEDIA platform, int action, Throwable t) {
        Toast.makeText(getApplicationContext(), "Authorize fail",
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCancel(SHARE_MEDIA platform, int action) {
        Toast.makeText(getApplicationContext(), "Authorize cancel",
                Toast.LENGTH_SHORT).show();
    }
};

 

五、分享

 

回調相關配置

 

若是使用的是qq或者新浪精簡版jar,須要在您使用分享或受權的Activity(fragment不行)中添加以下回調代碼:

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

分享相關代碼調用

 打開分享面板

能夠經過以下代碼打開分享面板選擇頁

new ShareAction(MainActivity.this) .withText("hello") .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN) .setCallback(umShareListener) .open(); 

其中umShareListener爲回調監聽,相關分享結果都在回調監聽中獲取

構建以下,其中分享成功會回調onComplete,取消分享回調onCancel,分享錯誤回調onError,對應的錯誤信息能夠用過onError的Throwable參數來打印

private UMShareListener umShareListener = new UMShareListener() { @Override public void onResult(SHARE_MEDIA platform) { Log.d("plat","platform"+platform); Toast.makeText(MainActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show(); } @Override public void onError(SHARE_MEDIA platform, Throwable t) { Toast.makeText(MainActivity.this,platform + " 分享失敗啦", Toast.LENGTH_SHORT).show(); if(t!=null){ Log.d("throw","throw:"+t.getMessage()); } } @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(MainActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show(); } }; 

 

直接分享接口

 

對於須要不通過分享面板選擇頁,直接經過按鈕實現某個平臺的分享跳轉操做的開發者,能夠調用下面的代碼實現

new ShareAction(MainActivity.this) .setPlatform(SHARE_MEDIA.QQ) .withText("hello") .setCallback(umShareListener) .share(); 

具體分享結果獲取方法與使用分享面板相同,這裏再也不復述

 

 

 

登陸不回調可能的狀況:

一、WXEntryActivity
這個類的路徑問題

 

二、微信官網的配置要求很嚴格 程序目錄的包名必須與配置文件的包名還有微信開放平臺配置的包名徹底一致。不然會出現回調無反應現象。(遇到過的)

三、微信未獲取登陸權限。(通常交錢審覈經過就自動獲取了登陸權限)
 
1
0
 
 
 

 

* 以上用戶言論只表明其我的觀點,不表明CSDN網站的觀點或立場
 
相關文章
相關標籤/搜索