微信開放平臺之安卓分享

這篇文章我在CSDN上發過,地址是:java

https://blog.csdn.net/qq_2839...

不想再重複寫了,直接複製粘貼過來的
微信開放平臺andriod有不少坑,常常不知緣由地跑不通。如下是本身結合慕課網課程的記錄。
學習地址:android

https://www.imooc.com/video/8844

這個課程給我很大的啓發,可是不少很重要的地方沒有提到,如下是實現轉發到朋友圈的具體過程。
首先是建立應用:git

  1. 在微信開放平臺註冊一個帳號,注意這個帳號不能是註冊過的,這裏註冊過的包含微信公衆平臺的郵箱帳號;
  2. 申請應用:在管理中心建立一個移動應用,而後按照要求填寫基本信息,注意上傳icon時要嚴格按照大小,能夠直接用畫圖軟件調整大小;下一步進應用平臺,建立一個andriod應用,應用下載地址先不填(若是有也能夠填上),重點是應用簽名和應用包名。

如下打包方法參照別人的博客,地址是:github

https://blog.csdn.net/github_2011/article/details/60966976

用管理員身份打開cmd,cd到jdk目錄,執行如下命令:
祕鑰口令是很重要的,我直接設置成123456,避免之後忘記
keytool -genkey -alias qj_test -keyalg RSA -validity 10000 -keystore qj_test.keystore
keytool -list -v -keystore qj_test.keystore
將上文生成的祕鑰以及密碼都記錄下來,打開android studio建立項目,包名能夠隨便取,可是必定要記錄下來,這裏有一個重點,真正的包名是pakagename
由於以後會在申請表中填包名,這裏不能填錯的。
建立完成以後進Build->Generate Signed APK->Choose Existing選擇剛纔生成的那個簽名文件。正確填寫密碼和別名,別名直接點擊右邊按鈕能夠獲取,下一步直接打包,打包完成以後會生成一個apk文件,在手機上安裝。
將剛纔打包的apk安裝到手機上,微信開放平臺資源下載提供了簽名工具,下載下來也安裝到手機上,步驟不能亂,在簽名工具離輸入剛纔的包名,能夠獲取到簽名,這個簽名就是應該填寫的應用簽名,至此是成功的,直接提交審覈。api

3 開發微信

審覈經過以後會獲得APPID,只有分享到朋友圈和分享給朋友權限,其餘權限是要申請成爲開發者的,並且不能是我的開發者。
接下來引入gradle;在app/build.gradle文件中的dependencies裏添加一行代碼:app

compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+';

以後點擊進行gradle下載;如圖所示(其實就是對gradle進行一次更新):微信公衆平臺

clipboard.png

同步完成以後進AndroidManifest.xml文件添加依賴,ide

<uses-permission android:name="android.permission.INTERNET"/>

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

添加完成以後能夠進行代碼開發;工具

4 前臺

直接進主頁,app/src/main/res/layout/activity_main.xml文件。修改爲一下樣子:

給每一個按鈕都添加對應的事件。代碼以下:

<?xml version="1.0" encoding="utf-8"?>  
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:app="http://schemas.android.com/apk/res-auto"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context=".MainActivity">  
  
    <android.support.design.widget.AppBarLayout  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:theme="@style/AppTheme.AppBarOverlay">  
  
        <android.support.v7.widget.Toolbar  
            android:id="@+id/toolbar"  
            android:layout_width="match_parent"  
            android:layout_height="?attr/actionBarSize"  
            android:background="?attr/colorPrimary"  
            app:popupTheme="@style/AppTheme.PopupOverlay" />  
  
    </android.support.design.widget.AppBarLayout>  
  
    <include layout="@layout/content_main" />  
  
    <android.support.design.widget.FloatingActionButton  
        android:id="@+id/fab"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_gravity="bottom|end"  
        android:layout_margin="@dimen/fab_margin"  
        app:srcCompat="@android:drawable/ic_dialog_email" />  
  
</android.support.design.widget.CoordinatorLayout>

添加完成以後直接調用的是MainActivity.java;

引入Toast,view等等;按照微信開放平臺的文檔進行開發就能夠,如下是個人代碼:

package test.bocai.com;  
  
  
import android.content.DialogInterface;  
import android.os.Bundle;  
import android.support.design.widget.FloatingActionButton;  
import android.support.design.widget.Snackbar;  
import android.support.v7.app.AlertDialog;  
import android.support.v7.app.AppCompatActivity;  
import android.support.v7.widget.Toolbar;  
import android.view.View;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.widget.EditText;  
import android.widget.LinearLayout;  
import android.widget.Toast;  
  
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;  
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;  
import com.tencent.mm.opensdk.modelmsg.WXTextObject;  
import com.tencent.mm.opensdk.openapi.IWXAPI;  
import com.tencent.mm.opensdk.openapi.WXAPIFactory;  
  
public class MainActivity extends AppCompatActivity {  
    //微信初始化  
    public static final String APP_ID="你的appid";  
    private IWXAPI api;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);  
        setSupportActionBar(toolbar);  
  
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);  
        fab.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View view) {  
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)  
                        .setAction("Action", null).show();  
            }  
        });  
        api = WXAPIFactory.createWXAPI(this,APP_ID);  
        //註冊到微信  
        api.registerApp(APP_ID);  
    }  
  
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate the menu; this adds items to the action bar if it is present.  
        getMenuInflater().inflate(R.menu.menu_main, menu);  
        return true;  
    }  
  
    @Override  
    public boolean onOptionsItemSelected(MenuItem item) {  
        // Handle action bar item clicks here. The action bar will  
        // automatically handle clicks on the Home/Up button, so long  
        // as you specify a parent activity in AndroidManifest.xml.  
        int id = item.getItemId();  
  
        //noinspection SimplifiableIfStatement  
        if (id == R.id.action_settings) {  
            return true;  
        }  
  
        return super.onOptionsItemSelected(item);  
    }  
    //生成微信惟一標識  
    private String buildTransaction(final String type){  
        return (type == null)?String.valueOf(System.currentTimeMillis()):type + System.currentTimeMillis();  
    }  
    //打開微信  
    public void onClickopenwx(View view)  
    {  
        Toast.makeText(this,String.valueOf(api.openWXApp()),Toast.LENGTH_LONG).show();  
    }  
    //分享給朋友  
    public void onClickpy(View view)  
    {  
        //建立edittext控件  
        final EditText editor = new EditText(this);  
        editor.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));  
        editor.setText("分享到微信好友的文本");  
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);  
        builder.setIcon(R.drawable.ic_launcher_foreground);  
        builder.setTitle("微信共享");  
        builder.setView(editor);  
        builder.setMessage("請輸入要分享的文本");  
        builder.setPositiveButton("分享", new DialogInterface.OnClickListener() {  
            @Override  
            public void onClick(DialogInterface dialog, int which) {  
                String text = editor.getText().toString();  
                System.out.println(text);  
                if(text == null || text.length() == 0)  
                {  
                    return;  
                }  
                //Toast.makeText(getApplicationContext(), "按鈕組值發生改變", Toast.LENGTH_LONG).show();  
                //初始化對象  
                WXTextObject textobj = new WXTextObject();  
                textobj.text = text;  
                //用於傳輸的對象  
                WXMediaMessage msg = new WXMediaMessage();  
                msg.mediaObject = textobj;  
                msg.description = text;  
                //建立用於請求的對象  
                SendMessageToWX.Req req = new SendMessageToWX.Req();  
                req.message = msg;  
                //惟一標識  
                req.transaction = buildTransaction("text");  
  
                req.scene = SendMessageToWX.Req.WXSceneSession;  
                api.sendReq(req);  
                Toast.makeText(MainActivity.this,String.valueOf(api.sendReq(req)),Toast.LENGTH_LONG).show();  
            }  
        });  
        //取消按鈕  
        builder.setNegativeButton("取消",null);  
        final AlertDialog alert = builder.create();  
        alert.show();  
    }  
    //分享到朋友圈  
    public void onClickpyq(View view) {  
        //建立edittext控件  
        final EditText editor = new EditText(this);  
        editor.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));  
        editor.setText("分享到微信朋友圈的文本");  
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);  
        builder.setIcon(R.drawable.ic_launcher_foreground);  
        builder.setTitle("微信共享");  
        builder.setView(editor);  
        builder.setMessage("請輸入要分享的文本");  
        builder.setPositiveButton("分享", new DialogInterface.OnClickListener() {  
            @Override  
            public void onClick(DialogInterface dialog, int which) {  
                String text = editor.getText().toString();  
                if (text == null || text.length() == 0) {  
                    return;  
                }  
                //初始化對象  
                WXTextObject textobj = new WXTextObject();  
                textobj.text = text;  
                //用於傳輸的對象  
                WXMediaMessage msg = new WXMediaMessage();  
                msg.mediaObject = textobj;  
                msg.description = text;  
                //建立用於請求的對象  
                SendMessageToWX.Req req = new SendMessageToWX.Req();  
                req.message = msg;  
                //惟一標識  
                req.transaction = buildTransaction("text");  
  
                req.scene = SendMessageToWX.Req.WXSceneTimeline;  
                api.sendReq(req);  
                Toast.makeText(MainActivity.this,String.valueOf(api.sendReq(req)),Toast.LENGTH_LONG).show();  
            }  
        });  
        //取消按鈕  
        builder.setNegativeButton("取消", null);  
        final AlertDialog alert = builder.create();  
        alert.show();  
    }  
}

寫完以上代碼直接在真機上跑已經能夠打開微信了,可是分享是不行的,由於分享必需要對應的簽名。
直接打包,仍是剛纔的打包步驟,從新打包一次,基本上是直接能夠運行的。
可是我,在這裏踩了不少坑,浪費了幾個小時。如下是我出錯的地方:
1 我以前安裝後,發現不能運行,因而我從新生成了簽名,這時候微信記住的是以前的簽名,微信只能卸載重裝;
2 仍是用以前的簽名工具,輸入包名,看包名生成的簽名和微信經過的簽名是否是同樣,以前我就發現不同,這時候能夠選擇從新打包,打包時換成正確的keystore文件,也能夠選擇修改微信的簽名,微信在經過審覈以後簽名是隨時能夠修改的。
源代碼已經放在個人github上,歡迎給star
https://github.com/laurel-he/...

相關文章
相關標籤/搜索