آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ایجاد تاپیک فایربیس بر اساس موقعیت مکانی

ali mdna  7 سال پیش  7 سال پیش
0 0

سلام . من میخواستم در زمینه تفکیک کاربران در فایربیس ، مانند سرویس های ایرانی پوشه و چشمک ، از موقعیت مکانی مبتنی بر شبکه و اپراتور و مدل گوشی استفاده کنم ! مدل گوشی و اپراتور رو تونستم به عنوان topic داخل فایربیس ثبت کنم ، ولی موقعیت مکانی چند کد مختلف تست کردم یا فورس کلوز میداد یا بدون خطا ، هیچ کاری نمیکرد -_-
کد نهایی که بدون خطا هست ولی چیزی ثبت نمیشه :

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService implements LocationListener {
private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName();
private static final long MIN_DISTANCE_FOR_UPDATE = 10;
private static final long MIN_TIME_FOR_UPDATE = 1000 * 60 * 2;


private LocationManager locationManager;
private double Latitude;
private double Longitude;

@Override
public void onTokenRefresh() {
super.onTokenRefresh();
// when you need location
// if inside activity context = this;

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Location location = locationManager.getLastKnownLocation(locationManager.NETWORK_PROVIDER);

try {
Geocoder geocoder=new Geocoder(this);
List<Address>addresses=null;
addresses=geocoder.getFromLocation(Latitude,Longitude,1);
String city =addresses.get(0).getLocality();
String state=addresses.get(0).getAdminArea();
FirebaseMessaging.getInstance().subscribeToTopic(city);
FirebaseMessaging.getInstance().subscribeToTopic(state);

} catch (IOException e) {
e.printStackTrace();
}


onLocationChanged(location);
loc_func(location);

String refreshedToken = FirebaseInstanceId.getInstance().getToken();
String manufacturer = Build.MANUFACTURER;
TelephonyManager tManager = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
String carrierName = tManager.getNetworkOperatorName();
AppSettings.setRegId(refreshedToken);
FirebaseMessaging.getInstance().subscribeToTopic("allmobile");
FirebaseMessaging.getInstance().subscribeToTopic("ALL");
FirebaseMessaging.getInstance().subscribeToTopic("global");
FirebaseMessaging.getInstance().subscribeToTopic(carrierName);
FirebaseMessaging.getInstance().subscribeToTopic(manufacturer);


}


@Override
public void onLocationChanged(Location location) {
Latitude = location.getLatitude();
Longitude = location.getLongitude();
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}

public void loc_func (Location location){

try {
Geocoder geocoder=new Geocoder(this);
List<Address>addresses=null;
addresses=geocoder.getFromLocation(Latitude,Longitude,1);
String city =addresses.get(0).getLocality();
String state=addresses.get(0).getAdminArea();
FirebaseMessaging.getInstance().subscribeToTopic(city);
FirebaseMessaging.getInstance().subscribeToTopic(state);

} catch (IOException e) {
e.printStackTrace();
}

}

}

تو همین کلاس ، دو جای مختلف درخواست subscribe به تاپیک داده شده ولی عمل نمیکنه
دسترسی های منیفست هم به درستی داده شده ، ممنون میشم درمورد دلیل و راه حل مشکل راهنمایی کنید

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
namdar79  7 سال پیش
0 0

در کد های بالا من جایی ندیدم شما مجوز دسترسی به موقعیت مکانی رو بگیرید اگه اینکار رو نکردید از کد های زیر استفاده کنید

 
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(YourActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}

شرط بررسی می کنه که ایا قبلا گرفته شده و باقی کد ها مجوز رو از کاربر درخواست می کنند


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .