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


新浪微博開放平台http://open.weibo.com/有賬號就可以,經常刷微博的小伙伴可以直接登錄嘍,注意修改安全域名同時確保授權回調頁與代碼中配置一致。

登錄微信開放平台https://open.weixin.qq.com/官網, 審核通過后獲取到微信AppID及AppSecret(注意保存好,平台不會再顯示忘了需要重置),需要微信登錄功能,需要申請微信登錄權限

獲取微信登錄權限需要收取一定費用,貌似300。一直沒舍得,還好做項目的時候用到獲得了,土豪隨意吐舌頭

    

下面說代碼實現 

到友盟官網http://www.umeng.com/下載需要的SDK包。copy其中的jar包等到自己的項目中。

1、添加回調Activity

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

 

      

 

2、權限及其他maifest中的配置

 

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

3、在項目的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);

 

4、登錄實現

 

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();
    }
};

 

5、分享

 

回調相關配置

 

如果使用的是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(); 

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

 

 

 

登錄不回調可能的情況:

1、WXEntryActivity
這個類的路徑問題

 

2、微信官網的配置要求很嚴格 程序目錄的包名必須與配置文件的包名還有微信開放平台配置的包名完全一致。否則會出現回調無反應現象。(遇到過的)

3、微信未獲取登錄權限。(一般交錢審核通過就自動獲取了登錄權限)
 
1
0
 
 
 

 

* 以上用戶言論只代表其個人觀點,不代表CSDN網站的觀點或立場
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM