2014-10-20 171 views
1

嗨,我试图从tutorial整合GCM。我有两个包第一个是com.wpeden.social.circle,第二个是com.wpeden.social.circle.gcm。在第一个包中,我添加了我的MainActivity,其中的SignUp类。我在我的项目中添加了google-play-servicesgcm.jar。我使用tutorialcom.wpeden.social.circle.gcm的所有GCM要求AlertDialogManager,ConnectionDetector,CommonUtilities,ServerUtilities。在我的SignUp类中,我使用以下代码使设备注册并保存数据库的注册码,名称,密码。但它不能获得注册ID并只保存用户名和密码。在我的清单,我用以下,,Android GCM:空注册ID

<permission android:name="com.wpeden.social.circle.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
<uses-permission android:name="com.wpeden.social.circle.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.CAMERA"/> 

<service android:name="com.wpeden.social.circle.gcm.GCMIntentService" /> 

    <receiver 
     android:name="com.google.android.gcm.GCMBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

      <category android:name="com.wpeden.social.circle.gcm" /> 
     </intent-filter> 
    </receiver> 
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 

在我SignUp

wpedenSignUpButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      userName = wpedenSignUpUserName.getText().toString(); 
      password = wpedenSignUpPassword.getText().toString(); 
      GCMRegistrar.checkDevice(SignUp.this); 

      GCMRegistrar.checkManifest(SignUp.this); 
      registrationId = GCMRegistrar.getRegistrationId(SignUp.this); 

      if (registrationId.equals("")) { 
       GCMRegistrar.register(SignUp.this, SENDER_ID); 
      } else { 
       if (GCMRegistrar.isRegisteredOnServer(SignUp.this)) { 
        Toast.makeText(SignUp.this.getApplicationContext(), "Already registered with GCM", Toast.LENGTH_LONG).show(); 
       } else { 
        final Context context = SignUp.this.getApplicationContext(); 
        mRegisterTask = new AsyncTask<Void, Void, Void>() { 

         @Override 
         protected Void doInBackground(Void... params) { 
          ServerUtilities.register(context, userName, password, registrationId); 
          return null; 
         } 

         @Override 
         protected void onPostExecute(Void result) { 
          mRegisterTask = null; 
         } 

        }; 
        mRegisterTask.execute(null, null, null); 
       } 
      } 

      System.out.println("this is my reg id:" +registrationId); 
      new SignUpUser().execute(); 
     } 
    }); 

class SignUpUser extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(SignUp.this); 
     pDialog.setMessage("Creating Product.."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 

    /** 
    * Creating product 
    * */ 
    protected String doInBackground(String... args) { 

     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("user_id", userName)); 
     params.add(new BasicNameValuePair("password", password)); 
     params.add(new BasicNameValuePair("reg_id", registrationId)); 
     params.add(new BasicNameValuePair("type", type)); 

     // getting JSON Object 
     // Note that create product url accepts POST method 
     JSONObject json = jsonParser.makeHttpRequest(wpedenSignUpUrl, 
       "POST", params); 

     String result = ""; 
     try { 
      result = json.getString("message"); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return result; 
    } 

    protected void onPostExecute(String result) { 
     // dismiss the dialog once done 
     pDialog.dismiss(); 
     if (result.equals(TAG_SUCCESS)) { 
      Toast.makeText(SignUp.this, "Successfully saved", 
        Toast.LENGTH_LONG).show(); 
      run(); 
      Intent intent = new Intent(SignUp.this, UserProfileTab.class); 
      startActivity(intent); 
     } else { 
      Toast.makeText(SignUp.this, "Failed to save", Toast.LENGTH_LONG) 
        .show(); 
     } 
    } 
} 

它可以节省用户名,密码,但得到空注册ID。在此先感谢

+0

check logcat any errar is coming – 2014-10-20 05:56:20

+0

also check this http://javapapers.com/android/google-cloud-messaging-gcm-for-android-and-push-notifications/ – 2014-10-20 05:56:55

+0

不,它不显示任何错误 – user3384985 2014-10-20 05:58:29

回答

0

谢谢所有,特别是@MOSO this文档描述得很好。

+0

你仍然可以投我的评论作为感谢的象征:p – MOSO 2014-10-20 06:57:46