這一次我們來試著把facebook sdk 加進來~
Target:post to facebook wall on phonegap
step1.
我們需要facebook sdk ,請到這裡下載 https://github.com/facebook/facebook-android-sdk
裡面會有一些目錄,有一個facebook的folder是主要的sdk(example是範例)
step2.
裝載facebook sdk的方法稍微有點不同,你得先把facebook這個folder(其實他就是一個project),建立成專案,用匯入專案的方式就好啦~ : ),匯入完專案就大功告成了!(我裝過2次他都會有找不到R 這個ERROR,放心 常遇到 CLEAN一下這個專案就好了~
step3.
把我們正在做的專案,就拿我們之前做ADMOB+PHONEGAP的專案來試好了~
點擊專案右鍵properties, 接著在左方列選擇android,會在右邊下方看見library,點選add...接著選擇剛剛建立好的facebook sdk的專案 就ok了~其實只是引用facebook那個project的資源的作法而已~(我相信也可以把facebook sdk包成jar,再用匯入lib的方式匯入~只是我沒試過)
step4.
再來講點facebook app for android的一些...有的沒的...
在facebook的app上 若是使用了facebook的canvas,不論是web site、mobile site,都會視為有一個實體的app存在,而若直接在app上只填上android的hash key而已,那就沒有實體app的存在,差別就在於 每個app都會有一個粉絲頁,android的app進去之後 是看不到 進入應用程式 這個button的(因為本來就沒有)。
再來講講那個hashkey...若你使用官網的範例,那你需要一組hashkey,因為會經過認證,而這個hash key的產生是使用java的keytool產生的。大家都知道 android要export出來需要一個storekey,就是拿這組storekey再轉成hash key,然後填入facebook的app中。而且你的apk也需要使用同一組storekeyexport出來,才能正常的登入facebook。
以下是gen出storekey的command,後面的10000代表有效時間,market需要至少50年的有效時間,所以是多少20000?
keytool -genkey -v -keystore androiddebug.keystore -alias androiddebug -keyalg RSA -keysize 2048 -validity 10000
接下來是haskkey的產生方法 有2個版本 都可以用,不過你要先有openssl,去http://git-scm.com 下載git裡面就會有所有你需要的相關檔案
ver.1
keytool -export -alias androiddebugkey -keystore androiddebug.keystore | openssl sha1 -binary | openssl enc -a -e
ver.2
keytool -exportcert -alias androiddebugkey
-keystore
androiddebugkey
.keystore | openssl sha1 -binary | openssl base64
在這個教學裡 不用用到hashkey 因為我只是單純的發佈到塗鴨牆~(當然你要用官方的example就需要啦)
step5.
....啊 關於建立plugin...是一件很簡單的事 相信大家看完之前的文章就會了 我就不再描述...那我就直接貼facebook plugin的主要code了,其它就看之前的plugin教學吧(茶
package com.phonegapPlugin;
import android.widget.Toast;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.FacebookError;
import com.facebook.android.Facebook.DialogListener;
import android.os.Bundle;
import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
import com.phonegap.api.PluginResult.Status;
import org.json.JSONArray;
public class FacebookPlugin extends Plugin {
//facebook
public static final String APP_ID = "Ur facebook app id";
private Facebook facebook = new Facebook(APP_ID);
private static final String POST_WALL_ACTION = "post_wall";
@Override
public PluginResult execute(String pluginAction, JSONArray data, String callbackId) {
if (pluginAction.equals(POST_WALL_ACTION)) {
this.ctx.runOnUiThread(new Runnable() {
@Override
public void run() {
//mAsyncRunner.request("me", new SampleRequestListener());
Bundle parameters = new Bundle();
parameters.putString("message", "Test Photo ");
parameters.putString("picture","http://fbrell.com/f8.jpg");
parameters.putString(" name","JCPenney Dialogs");
parameters.putString("caption", "test android and phonegap");
parameters.putString("description","all good!");
parameters.putString("redirect_uri","http://www.example.com/response");
facebook.dialog(ctx, "feed", parameters, new WallPostDialogListener());
}
});
}
return new PluginResult(Status.OK);
}
class WallPostDialogListener implements DialogListener {
public void onComplete(Bundle values) {
final String postId = values.getString("post_id");
if (postId != null) {
Toast.makeText(ctx, "Message posted to your facebook wall!!", 0);
}else {
Toast.makeText(ctx, "Wall post cancelled!!", 0);
}
}
public void onFacebookError(FacebookError e) {
Toast.makeText(ctx,"Failed to post to wall!",0);
e.printStackTrace();
}
public void onError(DialogError e) {
Toast.makeText(ctx, "Failed to post to wall!", 0);
e.printStackTrace();
}
public void onCancel() {
Toast.makeText(ctx, "Wall post cancelled!", 0);
}
}
}
沒有留言:
張貼留言