一、建立一個新的專案,並且讓他擁有facebook功能:
Part1已經把facebook sdk所提供的專案匯入到Eclipse了,所以要讓我們的專案擁有與facebook溝通的能力,就必須將該專案以library的方式參考到新建專案當中,在專案名稱上點擊右鍵,選擇"Properties",選擇第二項"Android",並於library框中利用"Add"加進com_facebook_android該專案。
二、將識別碼加入專案中:
於Prat1最後,取得了Application ID,而是否可以正確的與facebook進行互動都取決於這個識別碼,所以在專案的一開始必須先定義。
private Facebook facebook = new Facebook("你的Application ID");
若是Facebook出現錯誤,表示第一步驟並沒有完成,Eclipse不知道Facebook是什麼。
三、取得與Facebook的連結,並說明程式需要什麼權限
一般在玩facebook的小遊戲時,最一開始會出現"是否可以張貼資訊"、"是否可以讀取個人資料"等等的詢問頁面,而在手機上開發的程式也不例外,必須要先定義需要使用什麼樣的權限。
facebook.authorize(this, new String[] { "email","publish_stream", "read_stream" },
new DialogListener() {
@Override
public void onComplete(Bundle values) {}
@Override
public void onFacebookError(FacebookError error) {}
@Override
public void onError(DialogError e) {}
@Override
public void onCancel() {}
}
);
上面程式碼有兩個重點,第一個是authorize後面所接的各項字串,每一項都代表著一種權限,比如publish_stream為是否可以貼資訊到塗鴉牆上,read_stream為是否可以讀取塗鴉牆。(官方文件的詳細權限列表)
第二個重點是onComplete、onFacebookError、onError、onCancel可以讓我們增加facebook有問題時的各項回應。
四、利用複寫onActivityResult方法,取得facebook頁面的回傳資訊
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
}
五、發出訊息到塗鴉牆
以上步驟都完成以後,如果直接執行專案,就可以看到facebook的一個權限詢問介面,接著出現帳號確認的頁面,然後轉回一個空的Activity。接下來依照自己的方式增加各項控制項到Activity當中,並且加入以下程式碼。
Bundle params = new Bundle();
params.putString("message", message);
facebook.request("/me/feed", params, "POST");
重點只有三句:
1. 建立一個Bundle
2. 放入要傳遞的資訊,並且指定key為"message"
3. 對facebook發出POST的request,Eclipsec會提醒必須加入適當的try catch。
*message表示我們要發布的為文字訊息。(官方詳細參數說明)
**可以注意第一個參數為"/me/feed",me對於facebook就是自己的意思,而feed代表著塗鴉牆。(官方詳細說明)
六、執行程式發送訊息後,連上facebook並說"Yes,有訊息了"。
*所以整個概念其實就是利用POST發出facebook已定義的各項參數,完成與其的各項溝通,講是這樣講想要發個建個相簿、發個照片、指定相簿名稱也是卡我一整個假日。XD
------------------------------------------------
2011年08月15日補充,貼上全部原始碼,效果:
1. 登入後就將"open"貼上塗鴉牆
2. 按鈕後將"I want to sent message"貼上塗鴉牆
package ola.OlaTeach_facebook_feed;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.FacebookError;
import com.facebook.android.Facebook.DialogListener;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class OlaTeach_facebook_feed extends Activity {
private Facebook facebook = new Facebook("你的Application ID");
private Button btn_send;
String message = "I want to sent message";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findview();
//publish_stream
facebook.authorize(this, new String[] { "email","publish_stream", "read_stream","user_photos" },
new DialogListener() {
@Override
public void onComplete(Bundle values) {
postToWall("Open");
}
@Override
public void onFacebookError(FacebookError error) {}
@Override
public void onError(DialogError e) {}
@Override
public void onCancel() {}
}
);
//按鈕
btn_send.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
postToWall(message);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
}
public void findview()
{
btn_send = (Button) this.findViewById(R.id.btn_send);
}
public void postToWall(String messageString) {
Bundle params = new Bundle();
params.putString("message", messageString );
try {
facebook.request("/me/feed", params, "POST");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
OLA大大,不知道你有沒有遇過invaid key的問題呢?
回覆刪除你是說貼到塗鴉牆結果返回invalid key'嗎?
回覆刪除"/me/feed"這是官方提供的,應該是不會才對。
但是如果你貼到相簿,那就必須要先找到對應的相簿編碼才可以。
不好意思,我照著您上面所說的步驟做了但還是無法將訊息貼上Facebook塗鴉牆,不知道您是否能夠幫我解決這個問題
回覆刪除(我有寄信給您,標題為:Eclipse無法將訊息貼到Facebook塗鴉牆
,上面有我的程式碼) 就麻煩您了,謝謝!
初步看起來是Application ID與應用程式密鑰搞混了,
回覆刪除Application ID應該是一組15碼的數字。
我已經改成Application ID了,執行時跳出FB對話方塊問我是否要接受此應用程式,我按接受後FB對話方塊就消失了,而我的塗鴉牆上面也沒有我想要顯示的文字,麻煩您幫我解決一下此問題,謝謝您!
回覆刪除還是不行....
回覆刪除又要麻煩您了不好意思
補上第四點的程式碼[onActivityResult部分],
回覆刪除若是要一進入就貼上塗鴉牆,就將facebook.request的部分寫在onComplete內。
不好意思最近都沒有開Email,所以到現在才回覆您
回覆刪除後來我去試了之後已經可以將文字貼上塗鴉牆了,真的是非常的感謝您!
不知道您是否有將圖片貼上塗鴉牆的方法,我們不太清楚如何將圖片貼上塗鴉牆(網路上有人說要先把圖片轉成binary再上傳到Facebook,也不太清楚要上傳的圖片是要依照檔名或是路徑)
不知道您是否能夠幫我們解決這個問題,真的非常感謝您!!!
之前傳字串是用params.putString("message", messageString );這個方式收集字串內容,如果要傳照片就必須用params.putByteArray("picture", buffer);來收集圖片內容。
回覆刪除而上面的buffer變數是一個byte[],所以你必須先將你要上傳的圖檔轉為byte[];至於要傳到哪一個相簿,就必須要先取得facebook上相簿的ID,當然你也可以自己建一個。
已經可以貼上文字和圖片了 真的很感謝您!!
回覆刪除想請問如果在模擬器上測試都可以使用
回覆刪除但是輸出專案後卻無法使用FB功能
(會有FB的框框出現,但是授權或發布訊息的功能都不會跑出來)
是因為我沒有把facebook的key含進專案裡嗎?
c19900202@yahoo.com.tw
要裝上手機的apk必須要使用註冊在facebook的keystore匯出才可以喔,不然他會不知道你的程式是誰。
回覆刪除{要裝上手機的apk必須要使用註冊在facebook的keystore匯出才可以喔,不然他會不知道你的程式是誰。}
回覆刪除好像是這樣XD...
晚點測試看看
另外想請教你
有辦法在取得使用者資訊的時候
只抓他的ID碼呢?
facebook.request("me");會抓到使用者的全部資料
我只需要他ID的部分(我現在是用切割的方式把ID碼切出來)
有試過
facebook.request("me/id")
facebook.request("me/uid")
等等寫法~但是語法好像不是這樣寫
有專門抓ID的寫法嗎?
c19900202@yahoo.com.tw
感謝你~!
回覆刪除目前實機運作正常︿︿
請問~如果
回覆刪除facebook.request("me")
讀出來的中文變成utf-8編碼...該怎麼轉成中文呢QQ?
我有自己使用自己的keystore
回覆刪除也有利用Eclipse中Export signed的方式安裝
還是一直出現invalid_key的問題
可是模擬機上測試卻是完全OK
感謝大大
我最近比較沒有在測facebook sdk了,我猜應該不能單獨只取id吧,應該還是要拆解一下回來的json字串。
回覆刪除我沒有特別去注意取得的編碼,但是我記得好像沒有做過相關的編碼轉換。
回覆刪除如果你確定是utf8編碼,那可能要查一下轉BIG5的語法。詳細的語法我就沒有記了。
如果模擬器執行OK,那應該facebook的key沒有錯誤;所以我猜錯誤還是在keystore的部分,你在申請Hash Key所用的keystore必須要與匯出專案時的相同。
回覆刪除我猜可能你用模擬器測試完以後,雖然使用自己的keystore匯出專案,但是在facebook那邊沒有重新去以這個去註冊來取得對應的Application ID。
可以搭配前篇的文章來看確認每一個步驟都是使用手機用的keystore。
請問一下我執行
回覆刪除String request = facebook.request("me/feed", params, "POST");
回傳
message : an active access token must be used to query information about the current user
type: OAthException
請問這個是哪個地方漏掉沒有設設定的問題
看訊息像是沒有取得access token,可能你要確認一下程式裡面的facebook.authorize是否有正確的執行;並且onActivityResult的部份是否有正確完成facebook.authorizeCallback的部份。
回覆刪除感覺起來是你的程式並沒有完成上述的步驟,導致沒有合法的權限讀取。(我猜的)
您好請問一下最近是不是有個BUG
回覆刪除就是在Util.java中更改成
if (params.get(key) instanceof byte[])
我已經改過了~可以解除Bundle的問題
可是卻一直出現
Facebook-Example(7283): JSON Error in response
這個問題不知道是如何@@
可以幫助我嗎
謝謝板大
我沒有碰過"JSON Error in response"這個錯誤訊息過耶,你確定這是由facebook那邊發出來的錯誤嗎?還是你自己寫在try catch的訊息?
回覆刪除是try catch裡面出現的訊息~
回覆刪除所以都一直無法成功上傳照片@@
不知道原因出在哪邊~
我下載了完整的範例之後
只有改過這個
Util.java
if (params.get(key) instanceof byte[])
可是其他都沒有改過~
卻都無法上傳圖片@@版大會有這個問題嗎?
還是Facebook 那邊會有權限的問題嗎?
意思是JSON Error in response是你自己打的錯誤訊息囉?如果是這樣,那就沒辦法從你的描述"猜"錯誤在哪裡了。
回覆刪除你可能要先清楚"真正"導致程式跳到catch的錯誤是什麼,再去找解決方法。
我是直接從範例做的
回覆刪除版大直接從範例做是可以成功的嗎?
您可以提供一個成功的範例 借我參考嗎?
只需要有上傳圖片的功能就好~
我的信箱是peter7953@hotmail.com
(還是跟Java 的版本還是Android的版本有關嗎?)
想請問如果要取得好友名單,要怎麼取呢??
回覆刪除Bundle params = new Bundle();
params.putString("message", message);
facebook.request("/me/feed", params, "POST");
大概是在這段做修改吧??
看不太懂官方的列表要怎麼使用,麻煩幫解答~
我是看文件跟參考網路文章寫的,不太清楚你說的範例內容。剛找了一下,我沒有留下當初測試照片上傳的專案,大多參雜了其他測試的內容。如果你已經可以正常送"文字"到塗鴉牆,那你可以參考這篇第9個留言改變傳遞的項目即可傳送照片;如果還不能送"文字"到塗鴉牆,那先完成文字的部分比較好。
回覆刪除至於好友名單我沒有進行測試,當初僅取得相簿列表,但方式應該是類似的,比如說取得相簿的語法是facebook.request("me/albums"),置換"me/albums"的部分即可獲得其他相關的資訊,但前提是facebook.authorize的部分要先註冊相關的權限。
感謝ola大的回覆^^"
回覆刪除照著你的講解一步步都完成了,只是好友名單我還是出不來欸><,把feed改成friend,如下:
Bundle params = new Bundle();
params.putString("message", message);
facebook.request("/me/friend", params, "POST");
這樣子應該是把取得的好友名單po到塗鴉牆,可是我都沒有值,我是想在手機內取得名單做其他應用。麻煩了~
板大您好:
回覆刪除我參考了您的範例
改成這樣
Bitmap bmp = BitmapFactory.decodeFile("/sdcard/4.jpg");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] data = baos.toByteArray();
Bundle params = new Bundle();
params.putByteArray("picture", data);
可是上傳的圖片卻沒有辦法顯示@@而是一個星星的圖案@@
這是為何?
版大你好~
回覆刪除請問這範例的FB帳號登入,有辦法把輸入的FB帳號另外存成字串嗎? 當作會員機制使用~感謝!
星星? ㄜ........你是說有圖出來,但是是星星?那應該是你上傳的圖就是星星吧。
回覆刪除這方式是利用facebook所提供的單一登入來進行,所以在登入時會先跳到fb的activity,完成驗證後才帶類似token的資訊回你的程式;所以你想要用程式的方式輸入帳號,應該要找一下他有沒有提供相關的api。
回覆刪除但是通常手機都為一個人使用,這種方式會以手機內預設的fb帳號去進行登入,應該是沒有需要把'FB帳號另外存成字串'的需求。
另外,如果你說的是在登入後取得帳號,那應該就是去查帳號id如何取得的程式碼,取得後再存成你需要的格式。所以可能的流程是登入進入你的activity後,再做一次Query取得帳號id,再儲存到你需要的地方。
不是耶上傳後
回覆刪除會出現類似http://www.facebook.com/DoSaChild
這種星星@@
不知道是什麼問題?
謝謝板大的細心解答,想請問一下~
回覆刪除params.putString("message", message);
facebook.request("/me/feed", params, "POST");
這是板大的範例,第一行的兩個message,請問各代表什麼意思? 如果不是po到塗鴉牆,而是要讀取資料還需要這行嗎?
另外第二行如果要取好友名單是這樣嗎...facebook.request("/me/friends,params,"GET"");
麻煩囉~謝謝
我將板大的範例修改了@@卻還是沒有辦法上傳圖片@@
回覆刪除請問這樣哪裡有問題嗎@@
我可以PO文字沒有問題!!!
public void postToWall(String messageString) {
Bitmap bmp = BitmapFactory.decodeFile("/sdcard/2.png");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] data = baos.toByteArray();
Bundle params = new Bundle();
params.putByteArray("message", data);
try {
facebook.request("me/feed", params, "POST");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
您好,我想請問一下他的Intent事件要在哪裡定義,因為我還有其他的Intent事件,所以利用onActivityResult將資訊帶回來時有衝突,所以我想要將這個回傳事件的requestCode定義成3,麻煩您教我一下(我有寄E-Mail給您,a9967920@hotmail.com)
回覆刪除板大你好~照著板大的步驟讓我收穫很多~
回覆刪除目前碰到的問題是AVD可以,實機不行~
我做的是取得好友ID及Name,以下:
Bundle params = new Bundle();
params.putString("fields", "name,id");
try {
JSONObject json = new JSONObject(facebook.request("me/Friends",params));
JSONArray array = json.getJSONArray("data");
if(array != null)
{
for(int i=0;i<array.length();i++)
{
String id = array.getJSONObject(i).getString("id");
String name = array.getJSONObject(i).getString("name");
TextView txt_id= (TextView) findViewById(R.id.txt_id);
TextView txt_name= (TextView) findViewById(R.id.txt_name);
txt_id.setText(id);
txt_name.setText(name);
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
好像是JSONArray array = json.getJSONArray("data");
取不到值,請問這該怎辦??
感謝板大~~
取得好友用facebook.request("me/Friends"),不是facebook.request("me/Friends",params)。
回覆刪除for a9967920
回覆刪除我猜測應該是不行將facebook所回傳的requestCode定義成你要的數值;但其實你不用去變更,只需要看他傳送多少,利用那個值去進行判斷就可以了。
Log.v("ola_log", String.valueOf(requestCode));
可以看到requestCode是"32665"。
我寫了一篇上傳圖片的文章,如果你還有圖片上傳的問題可以參考那一篇。http://wangshifuola.blogspot.com/2011/09/androidfacebook-sdkpart3.html
回覆刪除目前在模擬器上測試可以,但是手機卻無法使用(會有FB的框框出現,但是授權或取得好友名單的功能都抓不到值),查了一下前例,好像是說"要裝上手機的apk必須要使用註冊在facebook的keystore匯出才可以喔,不然他會不知道你的程式是誰。 "
回覆刪除請問要使用註冊的facebook keystore是指,private Facebook facebook = new Facebook("你的Application ID");這邊要改成android key hash(ex:bOUMQ9WhRJCwnGHSKOU=),再匯出apk安裝嗎???? 感謝板大~
當你去取得facebook的Application ID時,你必須輸入一個用keystore轉換的Hash Key來取得;所以當你要安裝到實機時,你必須用當初的keystore來匯出你的專案為apk檔。
回覆刪除匯出方法:該篇第五項(http://wangshifuola.blogspot.com/2011/06/androidgoogle-map-api-key.html)
安裝apk的方法:http://wangshifuola.blogspot.com/2011/06/androidadbapk.html
實機終於可以運作了~!!(雖然重複同樣動作幾次..)
回覆刪除感謝板大ㄛ^^Y
你好
回覆刪除想請教一下
我之前做facebook發佈訊息都沒有問題
但是今天卻出現
"發佈時出現錯誤
你提供的訊息裡發生錯誤無法顯示你的活動記錄。"
這是什麼原因呢?
以下是ddms的訊息
09-28 16:25:43.170: DEBUG/Facebook-WebView(597): Redirect URL: fbconnect://success#_=_
09-28 16:25:47.911: DEBUG/Facebook-WebView(597): Webview loading URL: https://m.facebook.com/dialog/oauth?display=touch&client_id=144632882296371&scope=email%2Cread_stream%2Cpublish_stream%2Ccreate_event&type=user_agent&redirect_uri=fbconnect%3A%2F%2Fsuccess&access_token=AAACDiveSdjMBAFTmQsLHBkdDYZBXM9EsBxM4ZCdLQSnaRQa4n98xAZAgGcNqjcGU3WuDLqOGotfsZAfar7tvPqT7EsGZB5ZBXR3X8EL3lRVblM12anDzx4
09-28 16:25:48.011: DEBUG/Facebook-WebView(597): Webview loading URL: https://m.facebook.com/dialog/feed?message=%3Cmessage_you_want_to_send%3E&app_id=144632882296371&display=touch&redirect_uri=fbconnect%3A%2F%2Fsuccess&access_token=AAACDiveSdjMBAFTmQsLHBkdDYZBXM9EsBxM4ZCdLQSnaRQa4n98xAZAgGcNqjcGU3WuDLqOGotfsZAfar7tvPqT7EsGZB5ZBXR3X8EL3lRVblM12anDzx4
09-28 16:25:48.311: DEBUG/Facebook-WebView(597): Webview loading URL: https://www.facebook.com/dialog/permissions.request?app_id=144632882296371&display=touch&next=fbconnect%3A%2F%2Fsuccess&type=user_agent&fbconnect=1&perms=email%2Cread_stream%2Cpublish_stream%2Ccreate_event
09-28 16:25:48.340: DEBUG/Facebook-WebView(597): Redirect URL: https://www.facebook.com/dialog/permissions.request?app_id=144632882296371&display=touch&next=fbconnect%3A%2F%2Fsuccess&type=user_agent&fbconnect=1&perms=email%2Cread_stream%2Cpublish_stream%2Ccreate_event
09-28 16:25:49.671: DEBUG/dalvikvm(597): GC freed 6966 objects / 490224 bytes in 195ms
09-28 16:25:52.421: DEBUG/Facebook-WebView(597): Redirect URL: fbconnect://success#access_token=AAACDiveSdjMBAFTmQsLHBkdDYZBXM9EsBxM4ZCdLQSnaRQa4n98xAZAgGcNqjcGU3WuDLqOGotfsZAfar7tvPqT7EsGZB5ZBXR3X8EL3lRVblM12anDzx4&expires_in=5650&code=AQC-BtB_-JN30zLxfSDk_zBvVNDvIfTX-JojtRuNlZYpLz8Y_nL24BIiv1jkGkcsM5OY0P21KcwxyhPe0k68BYSUitoguHeltuS1e8N6fDvAPYLmzdalIUk4qIbPr5GYe_KS4ujKOM2r0Pzz9TSmL6KneWUnmwAvUsKIupUkeqXUh0gY27uNaHPJgB6tAEqxHegBVZxrUeYov6mttRiJqloH
09-28 16:25:52.441: DEBUG/Facebook-authorize(597): Login Success! access_token=AAACDiveSdjMBAFTmQsLHBkdDYZBXM9EsBxM4ZCdLQSnaRQa4n98xAZAgGcNqjcGU3WuDLqOGotfsZAfar7tvPqT7EsGZB5ZBXR3X8EL3lRVblM12anDzx4 expires=1317232802450
09-28 16:25:53.201: WARN/InputManagerService(52): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43d9cad0
依照『發佈時出現錯誤,你提供的訊息裡發生錯誤無法顯示你的活動記錄。』這個訊息,看起來是facebook所發出來的錯誤訊息,所以應該是facebook提供的service有問題所致,你可能先到facebook的測試頁進行發布測試。從你所提供的資訊,我猜不出錯誤原因。
回覆刪除作者已經移除這則留言。
回覆刪除感謝你...今天測試的時候又可以了...
回覆刪除可能昨天FB的API在做更新= =
我記得當初在測試的時候,好像有用過一個網頁,可以將request打上去,確認語法正確與否,但是剛剛找好久找不到。 XD
回覆刪除ok~~就好 ^.<
我可以請問一下 為什麼我都照著打
回覆刪除結果出現application requires permission to access the Internet.的問題
但是我可以用模擬上網
你的AndroidManifest.xml必須加入網路連線的權限,才能使你製作的程式擁有連網路的能力。
回覆刪除<uses-permission android:name="android.permission.INTERNET"/>
作者已經移除這則留言。
回覆刪除您好,我照了您的步驟一步一步做了,但是將APK放到實機上後無法將文字及圖片推上Facebook 一直重複出現允許不允許應用程式的畫面
回覆刪除我有寄信給您(a9967920@hotmail.com)
麻煩您幫我解答一下,真的是非常的感謝您!!
如果模擬器OK,但安裝到實機上時發生錯誤,猜測應該是匯出專案用的keystore與拿去申請facebook Application ID的並不相同,導致無法正確登入。
回覆刪除可以搭配前篇的文章來看確認每一個步驟都是使用手機用的keystore。(http://wangshifuola.blogspot.com/2011/06/androidfacebook-sdkpart1.html)
板大你好~之前9月份的時候參考你的範例能成功取得朋友資訊,放到實機執行也OK。
回覆刪除可是就在昨天,實機執行的時候facebook詢問存取權限的時候,樣板跟原本的不一樣(是facebook api有做更新嗎??),今天執行卻失敗,錯誤訊息如下:
API Error Code:100
API Error Description: Invalid parameter
Error Message: Requires valid redirect URI.
我有重新申請一組app id,還是不行說,麻煩解答~
謝謝^^
我試著重新建立一個新的Facebook應用程式(也用了keystore),結果第一次實機執行會詢問權限,第二次以後就又跑出上面的錯誤訊息了...麻煩解答~
回覆刪除謝謝!!
"Requires valid redirect URI"這個錯誤訊息我沒有碰過,但看起來像是你對facebook進行request的時候指向了錯誤的網址。
回覆刪除所以你有在程式中指向特定網址嗎?
或者你可以先測試手機原有的facebook程式是否可正常執行,
再者安裝到另一台手機上,確認不是手機的問題。
這樣的訊息實在想不出錯誤的原因,真抱歉。
你好
回覆刪除我可以請問一下,如果我成功po文後,要跳出訊息
要加在那裡嗎?
我有試過加在try內或加上finally
但最後頁面都怪怪的 無法順利po文。
貼上塗鴉牆以後,要跳出訊息,應該是加在facebook.request之後,但理論上我們應該會用一個Thread去處理貼上塗鴉牆的這件事情,所以你可以加在Thread所對應的Handler內。
回覆刪除想要請問我想要抓sqlite裡面的文字資料PO到Facebook
回覆刪除不知道要如何做???
只要將SQLite要貼上塗鴉牆的訊息讀出來,再置換本篇messageString字串就可以了。 @.@
回覆刪除請想問 ~ 最近是不是因為換新版的Facebook...
回覆刪除之前我測試可以發部到塗鴉牆~今天全部都不行了><
我剛剛測試(2011/12/24 10:12),仍舊可以正常貼上塗鴉牆。
回覆刪除版大你好~~~
回覆刪除目前在模擬器上測試可以,但是放到手機(已用keystore方式),卻無法使用(問題:會出現FB的載入畫面,一直轉轉轉...進不去程式)
可以麻煩版大將程式放到實機上測試看看嗎??
我都是用實機測的。
回覆刪除我猜你匯出專案的keystore應該與註冊facebook的不同,所以才導致這個問題。
版大你好~~
回覆刪除我是利用fb login api結合我的android app,去年11月份都還可以在手機上跑,大概1月初再開啟就一直出現問題。我現在在模擬器上跑可以,export apk放到手機上面安裝,會卡在FB視窗"載入中.."的畫面。我已經照版大的方式重複做好幾次都是一樣的結果,facebook應用程式後台需要做什麼設定嗎? 還是可不可以麻煩版大幫我產生一個keystore和解出keyhash 再寄到我信箱 (louis10279@gmail.com )呢? 麻煩版大>O<""
已回信,請測試。
回覆刪除作者已經移除這則留言。
回覆刪除請問ola大知道怎麼再設計一個按鈕是登出的功能嗎?
回覆刪除登出的指令要去哪裡查詢呢?謝謝
登出的api,"印象中"官方文件裡面好像有提到,但我沒有實際操作過,所以沒辦法回答你。
回覆刪除可是登出的這件事情是有點怪異的,因為目前登入的方法是使用facebook提供的單一簽入方式,若是登出表示手機內建的fb應該也是登出了。
作者已經移除這則留言。
回覆刪除請問我有給read_stream讀取的權限
回覆刪除那我要如何把塗鴉牆的訊息讀取出來?
可以請大大解答一下
回覆刪除關於
btn_send =(Button)this.findViewById(R.id.btn_send);
這個東西在R.java內找不到id
意思是要新建一個id
所以在main.xml內是要以怎樣的形態來表示??
不太明白在此做這個的用意???
每一個有介面的程式,都會對應至少一個xml檔案,xml檔案負責編排使用者介面的呈現。
回覆刪除在編譯的時候,編譯器會將你所建立的xml檔案含有id屬性的tag,編排至R.java檔案內,程式碼再對R.java進行對應。
如果你xml這塊不熟,可以直接用eclipse的拖拉介面來建立,或是找本基礎的書把他的程式碼貼上。
最後,一個按鈕在xml的表示方式是:
<Button android:id="@+id/btn_search_Back" android:layout_width="wrap_content"
android:layout_height="wrap_content"
></Button>
謝謝大大
回覆刪除其實大概在四點的時候
我才想起來 然後拉了按鈕
程式碼都有照大大說的一個一個打進去
可是他說應用程式異常中止
Debug是表示: Sourcr not found
所以想問說模擬機有需要再載入apk嘛?
還事是因為其他什麼原因呢?
如果模擬器可以跑但實機不行,應該就是代表你所使用的keystore、Key Hash到最後的Application ID不對應,照你說的不管換哪一個hash key都是模擬器可以跑,那你可能一直都使用到debug的keystore。
回覆刪除最後安裝到實機,一定要用匯出的方式,以註冊fb用的keystore匯出apk,再以安裝apk的方式來裝入實機。
你好,請問模擬器可以跑但手機跑 點完發送會Crash 會是什麼原因呢?
回覆刪除這樣很難猜測原因,至少要先log之類的方式判斷出是哪一句。
回覆刪除您好:
回覆刪除目前我用API-2.3.3在AVD(2.3.3)上跑沒問題,可以張貼在WALL上;可是我用自己匯出的keystore,生成hash key後,與FB APP做認證儲存,有再用自己的keystore來簽署成為.apk,安裝在4.0.4的實機上,登入完帳號後卻無法將訊息張貼在WALL上...。
後來不死心,換用AVD(4.0.3)的來測試,發現在4.x的環境上跑就與在4.x的實機一樣都會發生錯誤,無法順利張貼;不過如果又換回2.x的環境(AVD)就可以順利張貼。
不知您是否有遇到類似情形呢?
謝謝您!
我剛剛用api-2.3.3然後裝在4.0.3的實機上,可以正常張貼訊息到塗鴉牆,我沒有碰過這個問題。
回覆刪除板大 有個問題想請教一下
回覆刪除FB登入後把access token放在SharedPreferences
但要寫登出的時候是否可以直接清掉sharedPreferences就好?
不過我寫完他跑都無法清掉耶?
然後上FB的API文件看他有一個method是logout的
String logout(Context context) throws MalformedURLException, IOException :
想請問他所需要的變數context是指?
是要把sharedpreferences轉乘context嗎?
謝謝~~
我沒有測試過登出,但以文件來看,
回覆刪除facebook.logout(你的Activity);(或是你可以寫facebook.logout(this);)
↑這句應該就可以做到登出。
想請問一下,發文我的手機已經可以了
回覆刪除但是要怎麼取得FB上的個人資料下來 使用呢?
如果已經可以發佈到塗鴉牆,取個人資訊也是類似的方式,實際的語法查官方的文件最詳盡。每一種資訊都有不同的參數。
回覆刪除ola版主您好,我想要先在layout裡拉一個按鈕,按下此按鈕後才會開始FB登入介面,而不是一進入程式點就開始FB介面,但是FB的facebook.authorize這個方法寫在OnClick裡就會變成錯誤訊息,請問該如何解決呢?
回覆刪除我沒有把該語法寫在按鈕中,不知道會有這個情況;但是最單純的想法就是,activity1上有按鈕跟相關說明,activity2就是fb相關程式,按activity1後進入activity2。
回覆刪除如此也是相同的流程,又不需要更改程式碼。
感謝ola版主^^
回覆刪除我照著版主的code
回覆刪除打開程式之後會自動LOGIN FB,接著詢問權限
按下接受之後,也點惹button
但是我到我自己FB的塗鴉牆上
沒有看到"open"跟"I want to sent message"的訊息耶...
這樣很難判斷是哪裡出錯,但是我猜測應該是在keystore的部分,你在申請Hash Key所用的keystore必須要與匯出專案時的相同,並且在程式中用對應的Application ID。
回覆刪除終於看到 OPEN 跟I want to sent message
回覆刪除原來是我忘記在AndroidManifest.xml 加入INTERNET權限
謝謝ola大大^^
恭喜你! :D
回覆刪除板大你好,如果我現在只是要在登入之後並取得登入者資訊(名稱)來供app使用
回覆刪除那我應該看哪個部份呢?
版大你好,我想起問一下 如果我只是要在登入facebook之後,取得登入者資訊(名稱)供app後續使用 這樣我該看哪個部份呢?? 謝謝!
回覆刪除版大你好:
回覆刪除我模擬器測試OK,但用到實機
會顯示500 internal server error
為何會這樣??
500 internal server error,是伺服器端的錯誤。 @.@
回覆刪除伺服器錯誤??是手機部分還是facebook的伺服器呢?
回覆刪除你跟他送了某個要求,他傳回伺服器錯誤,是一個很難看出問題的錯誤訊息,我想不出有什麼建議可以說。
回覆刪除請問使用Facebook SDK範例stream讀取的訊息(posts)不多,而我的APP卻讀取很多的訊息,如更改設定或Icon?[authorize和AsyncFacebookRunner(Fb).request是一樣的]
回覆刪除不好意思,我不是很懂問題的描述。
回覆刪除Facebook SDK範例stream使用JavaScript去讀取訊息,Facebook不會將更改設定的訊息傳給stream,如"OOO正在使用中文(台灣) 版的 Facebook"或"OOO正在使用 English (US) 版的 Facebook".如何加參數,讓AsyncFacebookRunner(Fb).request()不會將更改設定的訊息傳回來?
回覆刪除謝謝
你好,可以發一份demo給我學習學習嗎,剛開始學習,沒有一點頭緒
回覆刪除目前沒有準備類似的專案可以直接分享,抱歉。
回覆刪除版大您好:
回覆刪除我照著您的程式碼
也更改過APP ID 的部分
但是我出現的結果會是
"the application login has stopped unexpectedly"
想請問 是否是執行序或是其他的問題 謝謝
看詳細的錯誤訊息才抓的到原因,要看log的部分。
回覆刪除版大,請教下如何獲取當前使用APP的好有,不知道該如何實現
回覆刪除版大,請教下如何獲取當前使用APP的好友,不知道該如何實現
回覆刪除請問版大,我有 import FB 的 SDK 進來,可是在 import com.facebook.*; 時顯示錯誤。 無法 import,所有 com.facebook 的 class 都無法使用,請問是哪裡設定錯了嗎?
回覆刪除如果import那句出現問題,應該是專案沒有參考成功。
回覆刪除版大您好!
回覆刪除我想跟您請教一下
程式執行後,
當輸入完帳號密碼之後,
會出現這個問題
"登入時發生問題 請稍後再試"
請問您有遇過這種問題嗎?
我當時沒有發生過這個問題,這看起來像是fb有收到你的請求,但是登入的api沒有正確回應,但也可能就是錯誤了,只是他返回一個沒辦法判斷的原因。
回覆刪除不好意思,沒辦法給甚麼有用的意見。 Q.Q
當我丟進去參考的時候,它顯示是正常的
回覆刪除但是從開那邊之後,他就顯示錯誤了說 ...
所以就變成import facebook那邊就有問題了 ... 請問版大是哪邊出了問題呢 ??
您好:
回覆刪除我後來寫了關於標記地點的程式,
權限部分程式碼為:
private static final List PERMISSIONS = new ArrayList() {
{
add("publish_action");
}
};
標記完好友以及地點後
會出現連線錯誤如下:http://ppt.cc/c3OF
(#200)Updated the extended permissions to "publish_actions"
但是我將全限部分改成
private static final List PERMISSIONS = new ArrayList() {
{
add("publish_stream");
}
};
發生錯誤的時候,會沒有出現錯誤代碼http://ppt.cc/nKTM
想請問您是否有碰過類似的問題,謝謝
程式碼照貼 還是有錯誤...
回覆刪除AndroidManifest 的網路權限也加了
APPID 也有貼上去了
請問還有什麼地方要改嗎 ...?
沒有發現那個什麼 OPEN等等的訊息上去捏
請問一下 我貼文到塗鴉板 利用上面那三行
回覆刪除Bundle params = new Bundle();
params.putString("message", message);
facebook.request("/me/feed", params, "POST");
編譯時沒有出問題 但是在執行時會出錯直接跳出
然後找到問題是指向這行有問題
facebook.request("/me/feed", params, "POST");
然後也有跳到Facebook.java裡這行
return requestImpl(graphPath, params, httpMethod);
請問一下這是哪裡需要修改嗎?
您好 請問能提供舊版的fb sdk嗎? 謝謝~
回覆刪除新版的好像寫法都改變了
p810706j@yahoo.com.tw
我自己也沒有特別去保存,建議都使用新的版本會比較好。
回覆刪除請問一下這個專案裡面只有一個MainActivity與他的layout而已嗎?
回覆刪除因為我btn_send應該不是在main的xml裡面
但是我不知道該新增到哪裡
謝謝
您好,我想請問您
回覆刪除{要裝上手機的apk必須要使用註冊在facebook的keystore匯出才可以喔,不然他會不知道你的程式是誰。}
的意思是??
是指我用eclipse匯出apk時,的android.keystore檔案要重FB抓嗎?
謝謝您~~~~
我想問我燈第一次的時候可以 但登入第二次就會出現錯誤訊息
回覆刪除Invalid android_key parameter. The key tucy2GitT8XKTy7LKi30kswwfee does not match any allowed key. 到底是為什麼 登第一次時候他會問我要取得我的部分權限 第二次就出錯 專案重開也是
"要裝上手機的apk必須要使用註冊在facebook的keystore匯出才可以喔,不然他會不知道你的程式是誰。"的意思是要驅動fb的api你的程式必須要先跟fb註冊(註冊方法請見http://wangshifuola.blogspot.tw/2011/06/androidfacebook-sdkpart1.html),註冊時必須給fb一個keystore的Hash Key,所以你匯出開發的APP時,必須使用當初註冊在fb的keystore,這樣api才會正常運作。
回覆刪除理論上這個錯應該是key沒有對應到,但是應該就連第一次都無法登入才對,我無法確認是怎樣的錯誤。 :'(
回覆刪除作者已經移除這則留言。
回覆刪除作者已經移除這則留言。
回覆刪除請問一下,如果在Android Tools→Export Signed Application Package按下完成後出現Conversion to Dalvik format failed with error 1,是甚麼問題呢...我試過:
回覆刪除1.到Project->Clean->Clean all projects
2.到Project->Proties->Java Build Path->Order and Export勾選所有lib
3.到ProGuard官網下載4.10,lib跟bin都覆蓋了。
無法會出apk....