這篇文章我在CSDN上發過,地址是:java
https://blog.csdn.net/qq_2839...
不想再重複寫了,直接複製粘貼過來的
微信開放平臺andriod有不少坑,常常不知緣由地跑不通。如下是本身結合慕課網課程的記錄。
學習地址:android
https://www.imooc.com/video/8844
這個課程給我很大的啓發,可是不少很重要的地方沒有提到,如下是實現轉發到朋友圈的具體過程。
首先是建立應用:git
如下打包方法參照別人的博客,地址是: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進行一次更新):微信公衆平臺
同步完成以後進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/...