2013-02-25 23 views
8

Tôi có ứng dụng Android gốc cần kết nối với ứng dụng Facebook khác (ID ứng dụng khác) dựa trên cài đặt ứng dụng có thể thay đổi khi chạy.SDK Facebook cho Android - đặt ID ứng dụng theo lập trình

Hãy tưởng tượng ứng dụng có thể được đặt để trỏ tới DEV, TEST hoặc PROD. Khi được trỏ tới DEV, ID ứng dụng FB phải là "1". Khi được trỏ tới TEST, ID ứng dụng FB phải là "2". v.v.

Sự cố là UiLifecycleHelper từ SDK Facebook tự động đọc "com.facebook.sdk.ApplicationId" từ tệp AndroidManifest.xml trong giai đoạn onCreate. Dường như không có cách nào để thiết lập chương trình này.

Có thể sử dụng UiLifecycleHelper và trỏ đến ID ứng dụng khác trong thời gian chạy hoặc tôi có phải quay lại để quản lý phiên theo cách thủ công không?

+0

Bạn có thể làm theo ý tưởng của Ravi Kumar. Nhưng nó sẽ không hoạt động với bất kỳ FacebookDialogs nào. Đối với các hộp thoại, bạn có thể viết hàm tạo riêng của mình cho DialogBuilders trong SDK. – Sripathi

Trả lời

0

bạn không thể chỉ đơn giản là ngã ba SDK và tự thêm những thay đổi đó?

+0

có, đó là những gì tôi sẽ làm gì nếu tôi phải nhưng nó là không may nếu không có cách nào được hỗ trợ để làm điều này trong API. –

3

Có, bạn có thể đặt nó theo lập trình. Sử dụng lớp Sessions $ Builder cho phép bạn xây dựng một phiên mà không cần sử dụng một trong các hàm tạo riêng.

Session session = new Session.Builder(context).setApplicationId(applicationId).build(); 
+0

Làm thế nào để bạn sử dụng điều này kết hợp với UIHelper? –

+0

Tôi kiểm tra xem tôi có phiên hợp lệ không trước khi gọi UiLifecycleHelper qua gọi lại. Tôi tưởng tượng nó không phải là thanh lịch như một phiên bản tùy chỉnh chia rẽ nhưng nó giữ bảo trì của chúng tôi xuống. – mhradek

13

Ở đây những gì tôi được sử dụng để thiết lập các ứng dụng id programatcally

private Session.StatusCallback statusCallback = new SessionStatusCallback(); 

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String s=""+R.string.app_id; 

    Session session = new Session.Builder(getBaseContext()).setApplicationId(s).build(); 

    Session.setActiveSession(session); 

    if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
     session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); 
    } 
} 

private class SessionStatusCallback implements Session.StatusCallback { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     // TODO Auto-generated method stub 
     if(session.isOpened()){ 
      //Do your task 
     } 
    } 
} 
+2

+1 để tìm giải pháp với mã hiện có. – greg7gkb

+0

Tôi không thể làm việc này. nếu session.getState(). bằng (SessionState.CREATED_TOKEN_LOADED) đang bị bỏ qua – user1634451

+1

Điều này được sử dụng kết hợp với UIHelper như thế nào? –

2

Tôi nghĩ rằng có một cách đơn giản hơn để làm điều này, chỉ cần gọi phương thức tĩnh setApplicationId com.facebook.Settings.setApplicationId(facebookID);

Và bạn tốt để đi. Không cần tạo phiên bằng tay với Trình tạo và đặt phiên làm phiên hoạt động!

Chi tiết về các khuyết tật:

Các facebookID bạn đặt trong lớp thiết lập này sẽ được sử dụng bởi getMetadataApplicationId phương pháp com.facebook.internal.Utility

public static String getMetadataApplicationId(Context context) { 
     Validate.notNull(context, "context"); 

     Settings.loadDefaultsFromMetadata(context); 

     return Settings.getApplicationId(); 
    } 

nào đến lượt nó sẽ được sử dụng bởi tất cả các cuộc gọi đến tạo một phiên:

Session(Context context, String applicationId, TokenCachingStrategy tokenCachingStrategy, 
      boolean loadTokenFromCache) { 
     // if the application ID passed in is null, try to get it from the 
     // meta-data in the manifest. 
     if ((context != null) && (applicationId == null)) { 
      applicationId = Utility.getMetadataApplicationId(context); 
     } 

     Validate.notNull(applicationId, "applicationId"); 
. 
. 
. 
} 

Chúc mừng.

+0

Tìm kiếm tốt nhưng 'getMetadataApplicationId' chỉ được gọi nếu id ứng dụng = null có nghĩa là bạn không thể cập nhật id ứng dụng nếu bạn đã có. – Wayne

23

Xin chào tất cả tôi biết câu trả lời ở trên là phù hợp với older sdk version, nhưng trong facebook sdk 4 không có Session lớp

Bạn chỉ có thể làm điều đó bằng cách sử dụng mã dòng này:

FacebookSdk.setApplicationId(APP_ID); 

Cảm ơn!

+2

Chúng tôi có thể làm điều đó bất cứ lúc nào hoặc nó phải được trước khi FacebookSdk.sdkInitialize()? – Sagar

Các vấn đề liên quan