2016-04-01 189 views
0

我正在嘗試在正在開發的應用程序上實施Facebook登錄。我遵循Facebook開發人員指南,它的工作!但是,它只適用於我的智能手機上安裝了Facebook應用程序。如果我卸載它,或者我嘗試在沒有安裝Facebook應用程序的智能手機上運行我的應用程序,它只會崩潰。如果未安裝應用程序,Facebook登錄不起作用

所以會發生的是,我點擊登錄按鈕,它讓我把我的Facebook的憑據。它記錄的,但是當我試圖訪問配置文件是這樣的:

Profile.getCurrentProfile().getId() 

這給了我一個NullPointerException:

04-01 15:22:10.690 16758-16794/com.example.diogo.soulfiware E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2 
    java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:299) 
     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
     at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
     at java.lang.Thread.run(Thread.java:841) 
    Caused by: java.lang.NullPointerException 
     at com.example.diogo.soulfiware.Fragments.FragmentSlideLogin$3$1.doInBackground(FragmentSlideLogin.java:173) 
     at com.example.diogo.soulfiware.Fragments.FragmentSlideLogin$3$1.doInBackground(FragmentSlideLogin.java:158) 
     at android.os.AsyncTask$2.call(AsyncTask.java:287) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)  
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)  
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)  
     at java.lang.Thread.run(Thread.java:841)  

有趣的是,當它崩潰,如果我打開應用程序第二時間,它要求我以先前插入的用戶憑證註銷,並且顯示「以用戶身份登錄」並要求我註銷!

我的問題是:我真的需要安裝Facebook應用程序才能使登錄工作?

+0

你登錄之前,您可以檢查FB應用程序如已安裝的或沒有,如果沒有,那麼從做登錄網絡而不是應用程序。 –

+0

是的,我想過,但我該怎麼做?登錄按鈕由Facebook API自動生成,並且每次創建片段時都會執行回調。如果我做了onClickListener,它不會更改任何內容,因爲登錄仍在進行。 –

回答

0

Facebook應用程序不一定需要,因爲您也可以通過網絡小部件登錄進行。但是,當您是開發人員時,您需要在生成已簽名的apk時處理密鑰哈希對。保持兩種方式(applogin和Web控件登錄)可用,使用這個..

try { 
    //try to open facebook app if installed. Pass the username as u_name if required 
    context.getPackageManager().getPackageInfo("com.facebook.katana", 0); 
    return new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/" + u_name)); 
} catch (Exception e) { 
    //open the web login if app not installed. Pass the user id as u_id if required. 
    return new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/" + u_id)); 
} 
相關問題